๐ Spring Boot์ ๊ฐ Starter(web, webflux)์ ์ญํ
โ 1. Spring Boot
Spring Boot๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ.
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ์๋ํํ๊ณ , ํ์ํ ์ค์ ์ ์ต์ํํ๋ ์ญํ ์ ํ๋ค.
๐ฏ Spring Boot๊ฐ ํ๋ ์ผ
1๏ธโฃ Spring ์ค์ ์๋ํ
- @SpringBootApplication์ ์ฌ์ฉํ๋ฉด @Configuration, @ComponentScan, @EnableAutoConfiguration์ด ํฌํจ๋จ
- application.properties ๋๋ application.yml์ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์ค์ ์ํ
2๏ธโฃ ๋ด์ฅ ์น ์๋ฒ ์ ๊ณต
- Tomcat, Jetty, Undertow, Netty ๋ฑ์ ๋ด์ฅํ์ฌ ๋ณ๋ WAS ์ค์น ์์ด ์คํ ๊ฐ๋ฅ
3๏ธโฃ Spring Boot Starters ์ ๊ณต
- Starter๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐ (spring-boot-starter-web, spring-boot-starter-webflux ๋ฑ)
4๏ธโฃ ํ๋ก๋์ ์ง์ ๊ธฐ๋ฅ ํฌํจ
- Actuator (spring-boot-starter-actuator)๋ฅผ ํ์ฉํ ๋ชจ๋ํฐ๋ง, ํฌ์ค ์ฒดํฌ ๊ฐ๋ฅ
- ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๋ฐ ๋ก๊น ์ค์ ์ ๊ณต
โ 2. spring-boot-starter-web (Spring MVC)
spring-boot-starter-web์ Spring MVC ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ Starter์ด๋ค.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
๐ฏ ์ญํ
1๏ธโฃ Spring MVC ์๋ ์ค์
- DispatcherServlet ์๋ ๋ฑ๋ก
- @Controller, @RestController, @RequestMapping ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต
2๏ธโฃ ๋ด์ฅ Tomcat ๊ธฐ๋ณธ ์ ๊ณต
- ๋ณ๋๋ก ์ค์ ํ์ง ์์ผ๋ฉด Tomcat์ด ๊ธฐ๋ณธ ๋ด์ฅ๋จ
3๏ธโฃ Blocking I/O ๋ฐฉ์ (Servlet ๊ธฐ๋ฐ)
- ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋น ์ค๋ ๋๋ ์๋ต์ ๋ฐํํ ๋๊น์ง ๋๊ธฐ
- ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ง๋ง, ๋ง์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ค๋ ๋๊ฐ ๋ถ์กฑํ ์ ์์
4๏ธโฃ ๋ณด์ ํํฐ ๋๊ธฐ ์ฒ๋ฆฌ
- Spring Security ํํฐ๋ ๋๊ธฐ์์ผ๋ก ๋์
๐ ํฌํจ๋ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ญํ |
spring-webmvc | Spring MVC ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
spring-boot-starter-tomcat | ๋ด์ฅ Tomcat ์๋ฒ ์ ๊ณต |
jackson-databind | JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ |
hibernate-validator | ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ ์ ๊ณต |
โ 3. spring-boot-starter-webflux (Spring WebFlux)
spring-boot-starter-webflux๋ Reactive Programming์ ์ง์ํ๋ WebFlux ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ Starter์ ๋๋ค.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
}
๐ฏ์ญํ
1๏ธโฃ Spring WebFlux ์๋ ์ค์
- @RestController, @RequestMapping, @GetMapping ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต
- RouterFunction์ ์ด์ฉํ ํจ์ํ ๋ผ์ฐํ ์ง์ (RouterFunctions.route())
2๏ธโฃ ๋ด์ฅ Netty ๊ธฐ๋ณธ ์ ๊ณต
- Tomcat ๋์ Netty ์๋ฒ๊ฐ ๊ธฐ๋ณธ ๋ด์ฅ๋จ
- Jetty, Undertow, Tomcat ๋ฑ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
3๏ธโฃ Non-blocking I/O ๋ฐฉ์ (Reactive Streams ๊ธฐ๋ฐ)
- ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์์ ์ ์ํ ๊ฐ๋ฅ
- ๋ง์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง
4๏ธโฃ ๋ณด์ ํํฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ
- Spring Security ํํฐ๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋์
๐ ํฌํจ๋ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ญํ |
spring-webflux | Spring WebFlux ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
reactor-core | ๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
spring-boot-starter-reactor-netty | Netty ์๋ฒ ์ ๊ณต |
jackson-databind | JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ |
โ ๐ฅ 4. spring-boot-starter-web vs spring-boot-starter-webflux ๋น๊ต
ํญ๋ชฉ | spring-boot-starter-web (Spring MVC) | spring-boot-starter-webflux (Spring WebFlux) |
I/O ๋ชจ๋ธ | Blocking (Servlet) | Non-blocking (Reactive Streams) |
๊ธฐ๋ณธ ๋ด์ฅ ์๋ฒ | Tomcat | Netty |
์ค๋ ๋ ๊ด๋ฆฌ | ์์ฒญ๋น ํ๋์ ์ค๋ ๋ ์ฌ์ฉ | ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ (์ค๋ ๋ ํจ์จ์ ํ์ฉ) |
๋ณด์ ํํฐ | ๋๊ธฐ ์ฒ๋ฆฌ | ๋น๋๊ธฐ ์ฒ๋ฆฌ |
JSON ๋ณํ | Jackson | Jackson or JSON/BSON via Project Reactor |
์ ํฉํ ๊ฒฝ์ฐ | ์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ | ๋๊ท๋ชจ ํธ๋ํฝ, ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (WebSocket, SSE ๋ฑ) |
์ฆ, spring-boot-starter-web์ ๋๊ธฐ์ ์น ๊ฐ๋ฐ์, spring-boot-starter-webflux๋ ๋น๋๊ธฐ์ ์น ๊ฐ๋ฐ์ ์ ํฉํฉ๋๋ค! ๐
โ โญ 5. WebFlux ๋์ Web(Spring MVC)์ ์ฌ์ฉํ๋ ์ด์
WebFlux(๋น๋๊ธฐ ๋ชจ๋ธ)์ด ์ฅ์ ๋ฟ์ธ๊ฒ ๊ฐ์๋ฐ, ์ ์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ Spring MVC(Servlet ๊ธฐ๋ฐ, ๋๊ธฐ ๋ชจ๋ธ)์ ๋ ๋ง์ด ์ฌ์ฉํ ๊น?
1๏ธโฃ ๊ธฐ์กด ๊ธฐ์ ์คํ๊ณผ์ ํธํ์ฑ
- JDBC, JPA, Hibernate ๋๋ถ๋ถ์ DB ๋๋ผ์ด๋ฒ๊ฐ ๋๊ธฐ ๋ฐฉ์.
- WebFlux์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
2๏ธโฃ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋จ์ํจ
- ์ผ๋ฐ์ ์ธ ์น์ฌ์ดํธ๋ ๋๊ธฐ ๋ฐฉ์๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋น ๋ฆ!
- webflux๋ ๋ณ๋์ ํ์ต์ด ํ์ํ๋ค.
- Spring Security ์ค์ ๋ฐฉ์์ด ๋ฌ๋ผ์ ธ์ ๋ณ๋ ํ์ต ํ์.
- WebFlux๋ ๋น๋๊ธฐ(์ฝ๋ฐฑ) ๊ธฐ๋ฐ์ด๋ฏ๋ก, ์คํ ํธ๋ ์ด์ค ๋ถ์์ด ์ด๋ ต๊ณ , ํธ๋์ญ์ ๊ด๋ฆฌ, ๋๋ฒ๊น ์ด ๋ณต์ก.
๐ ์ต์ข ์ ๋ฆฌ
- ์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ (CRUD, ๊ด๋ฆฌ์ ํ์ด์ง, ์ผํ๋ชฐ, ๋ธ๋ก๊ทธ ๋ฑ) → Spring MVC (spring-boot-starter-web) ์ฌ์ฉ์ด ์ ํฉ!
- ๋๊ท๋ชจ ํธ๋ํฝ, ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ(WebSocket, SSE, ์ฑํ ์๋น์ค ๋ฑ) → Spring WebFlux (spring-boot-starter-webflux)๊ฐ ์ ํฉ!
'Backend > spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[error] conversionServicePostProcessor Bean ์ค๋ณต ์ค๋ฅ (0) | 2025.02.23 |
---|---|
[Spring Security] Web vs WebFlux Spring Security ์ค์ (0) | 2025.02.23 |
[Spring Security] Spring Security ์์ ๊ณ์ (0) | 2025.02.23 |
[Spring Security] Spring Security๋? (0) | 2025.02.16 |
DTO ์์ฑ ๋ฐฉ๋ฒ - Array ๋ฐ Object ํ์ (0) | 2024.11.18 |