๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์ „์ฒด ๊ธ€443

Spring Boot 1.1~1.3 - @SpringBootApplication์€ ์–ธ์ œ ์ƒ๊ฒผ์„๊นŒ 1ํŽธ์—์„œ ๋ถ€ํŠธ 1.0์˜ ์ž๋™ ์„ค์ •์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ•œ ๊ฐ€์ง€๋ฅผ ์งš์—ˆ๋‹ค. ๊ทธ๋•Œ๋Š” ๋ฉ”์ธ ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜์„ ์…‹ ๋”ฐ๋กœ ๋ถ™์˜€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.// 1.0@Configuration@EnableAutoConfiguration@ComponentScanpublic class SampleSimpleApplication {์ง€๊ธˆ ์“ฐ๋Š” @SpringBootApplication์€ ์—†์—ˆ๋‹ค. ๊ทธ๊ฒŒ ์–ธ์ œ ์–ด๋–ค ๋ชจ์–‘์œผ๋กœ ์ƒ๊ฒผ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‚ฌ์ด ๋ถ€ํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฉ์น˜๋ฅผ ๋ถˆ๋ ธ๋Š”์ง€๊ฐ€ ์ด๋ฒˆ ํŽธ์ด๋‹ค.๋‹ค๋ฃจ๋Š” ๊ตฌ๊ฐ„์€ 1.1(2014๋…„ 6์›” 10์ผ), 1.2(2014๋…„ 12์›” 10์ผ), 1.3(2015๋…„ 11์›” 16์ผ) ์…‹์ด๋‹ค. ๋ฆด๋ฆฌ์ฆˆ ํ๋ฆ„ 1.1 — ์ž๋™ ์„ค์ •์ด ๋‘ ๋ฐฐ๊ฐ€ ๋๋‹ค1.1์€ ์ƒˆ ๊ฐœ๋…์„ ๋“ค์ด๊ธฐ๋ณด๋‹ค ๋Œ€์ƒ์„ ๋„“ํžŒ ๋ฒ„์ „์ด๋‹ค. ์ €์žฅ์†Œ์—์„œ spring.f.. 2026. 9. 23.
Spring Boot 1.0 - ์˜์กด์„ฑ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์„ค์ •์ด ๋˜๋Š” ์ด์œ  ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด pom.xml์— ์ด ํ•œ ์ค„๋งŒ ๋„ฃ์–ด๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋œฌ๋‹ค. org.springframework.boot spring-boot-starter-webํ†ฐ์บฃ์„ ์„ค์น˜ํ•œ ์ ๋„, web.xml์„ ์“ด ์ ๋„, DispatcherServlet์„ ๋“ฑ๋กํ•œ ์ ๋„ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€๊ฐ€ ์ด๋ฒˆ ํŽธ์˜ ์ฃผ์ œ๋‹ค.์Šคํ”„๋ง ๋ถ€ํŠธ 1.0์€ 2014๋…„ 4์›” 1์ผ์— ๋‚˜์™”๋‹ค. ์•ž์„œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์‹œ๋ฆฌ์ฆˆ 7ํŽธ์—์„œ 4.0์˜ @Conditional์„ ๋‹ค๋ฃจ๋ฉด์„œ "์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„ ์ž๋ฆฌ"๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ทธ ์ž๋ฆฌ์— ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ์ง€์–ด์กŒ๋Š”์ง€๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋ณธ๋‹ค. ๋จผ์ €, 1.0์—๋Š” @SpringBootApplication์ด ์—†๋‹ค์ง€๊ธˆ์€ ๋ฉ”์ธ ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋งŒ ๋ถ™์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ.. 2026. 9. 22.
Spring 0.9~7.0 - 22๋…„์น˜ ๋ฆด๋ฆฌ์ฆˆ ํ•œ๋ˆˆ์— ์ •๋ฆฌ ์Šคํ”„๋ง ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ 0.9๋ถ€ํ„ฐ 7.0๊นŒ์ง€ ์—ด์„ธ ํŽธ์— ๊ฑธ์ณ ์ •๋ฆฌ๋ฅผ ํ–ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์€ ๊ทธ ์—ด์„ธ ํŽธ์„ ์ •๋ฆฌํ•œ ์ž๋ฃŒ๋‹ค.๋ฒ„์ „๋งˆ๋‹ค ๋ฌด์—‡์ด ๋“ค์–ด์™”๋Š”์ง€, ๊ทธ๊ฒŒ ์ง€๊ธˆ ์“ฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์–ด๋А ๋ถ€๋ถ„์ด ๋๋Š”์ง€๋ฅผ ์„ธ๋Œ€๋ณ„๋กœ ๋ฌถ์–ด ์ •๋ฆฌํ–ˆ๋‹ค. ๊ฐ ํŽธ์—์„œ ๋‹ค๋ฃฌ ๊ทผ๊ฑฐ๋Š” ์ „๋ถ€ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ์™€ ์‹ค์ œ ์†Œ์Šค์˜€๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ๊ฒฐ๋ก ๋งŒ ์ถ”๋ฆฐ๋‹ค. ๋ฆด๋ฆฌ์ฆˆ ํ๋ฆ„ ํ•œ๋ˆˆ์— 1์„ธ๋Œ€ · 0.9 ~ 1.2 (2003~2005)์‹œ์ž‘์€ ํŒจํ‚ค์ง€ ์ด๋ฆ„๋ถ€ํ„ฐ์˜€๋‹ค. 0.9์˜ ํŒจํ‚ค์ง€๋Š” org.springframework๊ฐ€ ์•„๋‹ˆ๋ผ com.interface21์ด์—ˆ๋‹ค. ๋กœ๋“œ ์กด์Šจ์˜ ์ฑ… ์ œ๋ชฉ์—์„œ ์˜จ ์ด๋ฆ„์ด๋‹ค.// 0.9com.interface21.beans.factory.BeanFactory// 1.0org.springframework.beans.factory.BeanFactory.. 2026. 9. 22.
Spring 7.0 - ์Šคํ”„๋ง์˜ @Nullable์ด JSpecify๋กœ ๋„˜์–ด๊ฐ„ ์ด์œ  ์Šคํ”„๋ง 7.0์œผ๋กœ ์˜ฌ๋ฆฌ๋ฉด import ๋ฌธ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋€๋‹ค.// 6.2๊นŒ์ง€import org.springframework.lang.Nullable;// 7.0import org.jspecify.annotations.Nullable; 9ํŽธ์—์„œ 5.0์ด @Nullable์„ ๋งŒ๋“  ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์ด ๋„ ๊ฐ€๋Šฅ์„ฑ์„ ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์ž๋ฐ”๋กœ ์“ฐ์ธ API์—๋Š” ๊ทธ ์ •๋ณด๊ฐ€ ์—†์–ด์„œ, ์Šคํ”„๋ง์ด ์ง์ ‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„ ์•Œ๋ ค์ค€ ๊ฒƒ์ด์—ˆ๋‹ค. 7.0์€ ๊ทธ ์–ด๋…ธํ…Œ์ด์…˜์— @Deprecated๋ฅผ ๋ถ™์˜€๋‹ค.7.0์€ 2025๋…„ 11์›” 13์ผ์— ๋‚˜์™”๋‹ค. 6.2๊ฐ€ 2024๋…„ 11์›” 14์ผ์ด์—ˆ์œผ๋‹ˆ ๋”ฑ 1๋…„ ๋งŒ์ด๋‹ค.์ด๋ฒˆ ํŽธ์ด ์ด ์‹œ๋ฆฌ์ฆˆ์˜ ๋งˆ์ง€๋ง‰์ด๋‹ค. 0.9๋ถ€ํ„ฐ ๋”ฐ๋ผ์˜จ ํ๋ฆ„์ด ์–ด๋””์— ๋„์ฐฉํ–ˆ๋Š”์ง€ ๊ฐ™์ด ๋ณด์ž. ๋ฆด๋ฆฌ์ฆˆ ํ๋ฆ„ (7.0) Spring 7.0.. 2026. 9. 21.
Spring 6.1~6.2 - ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ”๊พผ ๊ฒƒ ์Šคํ”„๋ง 6.1์— ์ด๋Ÿฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋“ค์–ด์™”๋‹ค.Person person = restClient.get() .uri("/persons/{id}", id) .retrieve() .body(Person.class);WebClient์™€ ๋ชจ์–‘์ด ๊ฑฐ์˜ ๊ฐ™์€๋ฐ Mono๋„ Flux๋„ ์—†๋‹ค. ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.9ํŽธ์—์„œ ์Šคํ”„๋ง์ด ์™œ WebFlux๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์‚ดํŽด๋ดค๋‹ค. ๋ฌธ์„œ๊ฐ€ ์ง์ ‘ ๋งํ•˜๊ธฐ๋ฅผ, ๋” ๋นจ๋ผ์ง€๋ ค๊ณ  ๋งŒ๋“  ๊ฒŒ ์•„๋‹ˆ๋ผ ์ ์€ ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ถ€ํ•˜๋ฅผ ๊ฒฌ๋””๋ ค๊ณ  ๋งŒ๋“  ๊ฒƒ์ด๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ ๋ฌธ์ œ๊ฐ€ ์ž๋ฐ” 21์—์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋„ ํ’€๋ฆฐ๋‹ค. ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋‹ค.6.1์€ 2023๋…„ 11์›” 16์ผ, 6.2๋Š” 2024๋…„ 11์›” 14์ผ์— ๋‚˜์™”๋‹ค. ์ •ํ™•ํžˆ 1๋…„ ๊ฐ„๊ฒฉ์ด๋‹ค. ์ด๋ฒˆ ํŽธ์€ ๋‘ ๋ฒ„์ „์„ ๋ฌถ์–ด์„œ .. 2026. 9. 19.
Spring 6.0 - AOT๋Š” ์‹œ์ž‘ ์ „์— ๋ฌด์—‡์„ ๋ฏธ๋ฆฌ ํ•˜๋Š”๊ฐ€ Spring 6.0์€ 5.3 ๋‹ค์Œ ๋ฒ„์ „์ด๋‹ค. 5.3์ด 2020๋…„ 10์›”์ด์—ˆ์œผ๋‹ˆ 2๋…„ ๋งŒ์ด๊ณ , GA๋Š” 2022๋…„ 11์›” 16์ผ์ด๋‹ค. ์ง€๋‚œ ํŽธ ๋งˆ์ง€๋ง‰์— ์Šคํ”„๋ง์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. 6.0์—์„œ ๊ทธ๊ฒŒ ๋„์ฐฉํ•œ๋‹ค.๊ทธ๋Ÿฐ๋ฐ 6.0์„ ์‹ค์ œ๋กœ ์˜ฌ๋ ค๋ณธ ์‚ฌ๋žŒ์—๊ฒŒ 6.0์€ ์•„๋งˆ ๋‹ค๋ฅธ ๊ธฐ์–ต์ผ ๊ฒƒ์ด๋‹ค. import ๋ฌธ์„ ์ „๋ถ€ ๊ณ ์นœ ๊ธฐ์–ต...// 5.ximport javax.servlet.http.HttpServletRequest;import javax.persistence.Entity;// 6.0import jakarta.servlet.http.HttpServletRequest;import jakarta.persistence.Entity;์ด๋ฒˆ ํŽธ์€ ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ณธ๋‹ค. ๋ฐ–์—์„œ ๊ฐ•์ œ๋œ ๋ณ€ํ™” ํ•˜๋‚˜์™€, ์Šคํ”„๋ง์ด ์Šค.. 2026. 9. 17.
Spring 5.0 - ์Šคํ”„๋ง์€ ์™œ ์ƒˆ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์„๊นŒ ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์˜์กด์„ฑ ๋ชฉ๋ก์„ ๋ณด๋ฉด ์›น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‘ ๊ฐœ๋‹ค.implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.boot:spring-boot-starter-webflux'ํ•˜๋‚˜๋Š” ์Šคํ”„๋ง MVC๊ณ  ํ•˜๋‚˜๋Š” WebFlux๋‹ค. ๋‘˜ ๋‹ค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  @GetMapping์„ ๋ถ™์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ ๋‘ ๊ฐœ์ผ๊นŒ. ์“ฐ๋˜ ๊ฒƒ์„ ๊ณ ์น˜๋ฉด ๋˜์ง€ ์•Š์•˜์„๊นŒ. Spring 5.0 ๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ์—๋„ ๋™์ผํ•œ ์งˆ๋ฌธ์ด ์„น์…˜ ์ œ๋ชฉ์œผ๋กœ ์˜ฌ๋ผ์™€ ์žˆ๋‹ค.Why a new web framework?์ด๋ฒˆ ํŽธ์€ ๊ทธ ๋‹ต์„ ๋”ฐ๋ผ๊ฐ€ ๋ณธ๋‹ค. 8ํŽธ์—์„œ ์‚ดํŽด๋ณธ 4.3์€ 2016๋…„ 6์›”์—, 5.0์€ 2017๋…„ 9์›” 28์ผ.. 2026. 9. 15.
Spring 5.1~5.3 - WebFlux์—์„œ ๋งŒ๋“  ๊ฒƒ์ด ์Šคํ”„๋ง MVC๋กœ ๋„˜์–ด์˜จ ๊ณผ์ • ์Šคํ”„๋ง MVC๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.@Beanpublic RouterFunction routes(PersonHandler handler) { return route() .GET("/person/{id}", accept(APPLICATION_JSON), handler::getPerson) .POST("/person", handler::createPerson) .build();}์ง€๋‚œ ํŽธ์—์„œ 5.0์˜ ํ•จ์ˆ˜ํ˜• ๋ผ์šฐํŒ…์„ ์‚ดํŽด๋ดค๋‹ค. ๊ทธ๊ฑด WebFlux ์–˜๊ธฐ์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„ ์ฝ”๋“œ๋Š” WebFlux๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง MVC์—์„œ ๋ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์œ„์—์„œ.์ด๋ฒˆ ํŽธ์€ 5.1, 5.2, 5.3 ์„ธ ๋ฒ„์ „์„ ๋ฌถ์–ด์„œ ๋ณธ๋‹ค. 5.0์ฒ˜๋Ÿผ ์ƒˆ ๋ชจ๋“ˆ์ด ์ƒ๊ธฐ.. 2026. 9. 14.
Spring 4.1~4.3 - @Autowired๋ฅผ ์ง€์›Œ๋„ ๋˜๋Š” ์ด์œ  ์ง€๊ธˆ ์Šคํ”„๋ง์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค๋ฅผ ์งœ๋ฉด ๋Œ€๋žต ์ด๋Ÿฐ ๋ชจ์–‘์ด ๋œ๋‹ค.@RestController@RequiredArgsConstructorpublic class UserController { private final UserService userService; @GetMapping("/users/{id}") public UserResponse find(@PathVariable Long id) { return userService.find(id); }}@GetMapping์„ ์“ฐ๊ณ , ์ƒ์„ฑ์ž์— @Autowired๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. ๋‘˜ ๋‹ค ๋„ˆ๋ฌด ๋‹น์—ฐํ•ด์„œ ์–ธ์ œ๋ถ€ํ„ฐ ๊ทธ๋žฌ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณธ ์ ์ด ์—†์„ ๊ฒƒ์ด๋‹ค.์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์–ธ์ œ ๋“ค์–ด์™”๋Š”์ง€ ์ฐพ์•„๋ณด๋ฉด ๊ณต๊ต๋กญ๊ฒŒ๋„ ๊ฐ™์€ ๋ฒ„์ „์ด๋‹ค. 2016๋…„ 6์›”์— .. 2026. 9. 12.
Spring 4.0 - ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์—ฌ๊ธฐ์„œ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค ์ง€๋‚œ ํŽธ๊นŒ์ง€ ์˜ค๋ฉด์„œ ์Šคํ”„๋ง์ด XML์„ ๊ฑท์–ด๋‚ด๊ณ  ์ž๋ฐ” ์„ค์ •์œผ๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ดค๋‹ค. 3.0์—์„œ @Configuration์ด ๋‚˜์™”๊ณ , 3.1์—์„œ @Enable๋กœ XML ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋Œ€์ฒดํ–ˆ๋‹ค.๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ์œผ๋กœ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค. ๋ถ€ํŠธ์˜ ํ•ต์‹ฌ์€ "ํด๋ž˜์ŠคํŒจ์Šค์— ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ผ ๋‹ค"์ธ๋ฐ, ๊ทธ ํŒ๋‹จ์„ ํ•  ์ˆ˜๋‹จ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.๊ทธ ์ˆ˜๋‹จ์ด 4.0์—์„œ ๋“ค์–ด์˜จ๋‹ค. ์ด๋ฒˆ ํŽธ์€ ๊ทธ ์ด์•ผ๊ธฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด์ž. ์ฐธ๊ณ ๋กœ ์ด๋ฒˆ ํŽธ๋ถ€ํ„ฐ ์ž๋ฃŒ ์กฐ์‚ฌ ๋ฐฉ์‹์ด ์กฐ๊ธˆ ๋‹ฌ๋ผ์กŒ๋‹ค. 4.0๋ถ€ํ„ฐ๋Š” ๊ณต์‹ changelog.txt ํŒŒ์ผ์ด ๋” ์ด์ƒ ๋ฐฐํฌ๋˜์ง€ ์•Š๋Š”๋‹ค. 4ํŽธ์—์„œ "3.0๋ถ€ํ„ฐ git ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค"๊ณ  ํ–ˆ๋Š”๋ฐ, 4.0์— ์™€์„œ๋Š” ๊ทธ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์œ ์ผํ•œ ์ƒ์„ธ ๊ธฐ๋ก์ด ๋๋‹ค. ๋ฆด๋ฆฌ์ฆˆ ํ๋ฆ„ (4.0 M1.. 2026. 9. 12.
๋ฐ˜์‘ํ˜•