๐ ๋ ๊ฑฐ์ Java 8 + Spring Boot 2.1 ํ๋ก์ ํธ๋ฅผ Java 17์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ธฐ (๋ชจ๋ ๊ฒ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์)
Source: Dev.to
ํํ
- 2029๋ ๊น์ง LTS โ ์ฅ๊ธฐ ์ง์ ๋ฐ ๋ณด์ ์ ๋ฐ์ดํธ
- 40โ60โฏ% ๋น ๋ฅธ JVM โ ํฅ์๋ GC(G1/ZGC), ๋น ๋ฅธ ์คํ ์๋
- ํ๋์ ์ธ ์ธ์ด ๊ธฐ๋ฅ โ
var, ๋ ์ฝ๋, sealed ํด๋์ค, switch ํํ์ - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์ โ ํ ํํ๋ฆฐํธ ๊ฐ์
- ๋ณด์ ๊ฐํ โ ๊ฐ๋ ฅํ TLS, ์ํธํ, JVM ๊ท์น
์ ๊ทธ๋ ์ด๋ ๊ฒฝ๋ก
| ๋จ๊ณ | ์ด์ โ ์ดํ |
|---|---|
| 1 | Javaโฏ8 โ Javaโฏ11 |
| 2 | SpringโฏBootโฏ2.1 โ 2.7 |
| 3 | Javaโฏ11 โ Javaโฏ17 |
| 4 | SpringโฏBootโฏ2.7 โ 3.x (Jakarta) |
pom.xml ๋ณ๊ฒฝ ์ฌํญ
Java ๋ฒ์ ์ 11๋ก ์ค์ (๋จ๊ณโฏ1)
11
๋๋ฝ๋ JavaโฏEE ๋ชจ๋ ์ถ๊ฐ (Javaโฏ11)
javax.xml.bind
jaxb-api
2.3.1
SpringโฏBoot ๋ฒ์ ์ ๋ฐ์ดํธ (๋จ๊ณโฏ2)
org.springframework.boot
spring-boot-starter-parent
2.7.18
Java ๋ฒ์ ์ 17๋ก ์ค์ (๋จ๊ณโฏ3)
17
SpringโฏBootโฏ3.x๋ก ์ ๊ทธ๋ ์ด๋ (๋จ๊ณโฏ4)
org.springframework.boot
spring-boot-starter-parent
3.3.4
SpringโฏBootโฏ3 ์ด์ ์กฐ์ ์ฌํญ
- Springfox๋ฅผ springdocโopenapi๋ก ๊ต์ฒด
@ConfigurationProperties์ ๋ํ ์๋ก์ด ์์ฑ์ ๋ฐ์ธ๋ฉ ์คํ์ผ ์ ์ฉ- ์ฌ์ฉ ์ค๋จ๋ Spring Security ์ค์ ์ ๋ฆฌ
- (์ ํ)
RestTemplateโWebClient๋ง์ด๊ทธ๋ ์ด์ ์์
springdocโopenapi ์์กด์ฑ ์ถ๊ฐ
org.springdoc
springdoc-openapi-starter-webmvc-ui
2.6.0
์ผ๋ฐ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ฆฌํ๋ ์
๊ฒฝ๊ณ โ ์์๋ก
--add-opensJVM ์ต์ ์ถ๊ฐ - ๋ ๊ฑฐ์ HTTP ํด๋ผ์ด์ธํธ๋ฅผ ์ต์ ๋์(
WebClient๋ฑ)์ผ๋ก ๊ต์ฒด - ๋ชจ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Javaโฏ17์ ์ง์ํ๋์ง ํ์ธ
ํจํค์ง ๋ง์ด๊ทธ๋ ์ด์ ์์ (Jakarta)
// Before (SpringโฏBootโฏ2.x)
import javax.servlet.http.HttpServletRequest;
// After (SpringโฏBootโฏ3.x)
import jakarta.servlet.http.HttpServletRequest;
๋จ์ ์๋ javax ์ํฌํธ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์คํ:
grep -R "javax" src/
Spring Security API ๋ณ๊ฒฝ
// Old (Spring Security 5.x)
http.authorizeRequests().anyRequest().authenticated();
// New (Spring Security 6.x)
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/**").authenticated()
);
JPA ํจํค์ง ์ด๋ฆ ๋ณ๊ฒฝ
javax.persistence
jakarta.persistence
CI ์ค์ (GitHub Actions)
- name: Setup JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
๊ฒํ ๊ฐ ํ์ํ ์ผ๋ฐ์ ์ธ ์ปดํฌ๋ํธ
- ์ปจํธ๋กค๋ฌ
WebClient/ Feign ํด๋ผ์ด์ธํธ- Kafka / RabbitMQ ์ฐ๋
- Flyway / Liquibase ๋ง์ด๊ทธ๋ ์ด์
- ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌํ๋ก
ํํ ๋ฐ์ํ๋ ์ค๋ฅ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
| ์ค๋ฅ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
ClassNotFoundException: javax.* | ์ํฌํธ๋ฅผ jakarta.*๋ก ๊ต์ฒด |
| Spring Security๊ฐ ๋์ํ์ง ์์ | ์๋ก์ด DSL์ ๋ง๊ฒ ๋ณด์ ์ค์ ์ ์ฌ์์ฑ |
| Swagger UI ๋ก๋ ์คํจ | Springfox์์ springdocโopenapi๋ก ์ ํ |
| ์์ ์ ๋ฆฌํ๋ ์ ๊ฒฝ๊ณ | --add-opens ํ๋๊ทธ ์ถ๊ฐ ๋๋ ๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๊ทธ๋ ์ด๋ |
์ ๊ทธ๋ ์ด๋ ์ฒดํฌ๋ฆฌ์คํธ
- Javaโฏ8 โ 11
- ์ ๊ฑฐ๋ Java EE ๋ชจ๋ ๋ณต๊ตฌ
- Javaโฏ11 โ 17
- CI ํ์ดํ๋ผ์ธ์ JDKโฏ17 ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธ
- SpringโฏBootโฏ2.1 โ 2.7 ์ ๊ทธ๋ ์ด๋
- ์ฌ์ฉ ์ค๋จ๋ Spring API ์ ๊ฑฐ
- SpringโฏBootโฏ2.7 โ 3.x ์ ๊ทธ๋ ์ด๋
-
javax.*ํจํค์ง๋ฅผjakarta.*๋ก ๋ง์ด๊ทธ๋ ์ด์ - Spring Security ์ค์ ์ ๋ฐ์ดํธ
- Springfox๋ฅผ springdocโopenapi๋ก ๊ต์ฒด
- Hibernate / JPA ์์กด์ฑ ์ ๋ฐ์ดํธ
- ์ ์ฒด ํตํฉ ํ ์คํธ ์คํ
์ด๋ฌํ ๋จ๊ณ์ ์ ๊ทผ ๋ฐฉ์โ๋จผ์ Javaโฏ8 โ 11๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ , ์ฌ์ฉ ์ค๋จ๋ API๋ฅผ ์กฐ๊ธฐ์ ์์ ํ ๋ค ์ถฉ๋ถํ ํ ์คํธํ๋ฉดโJavaโฏ17 ๋ฐ SpringโฏBootโฏ3.x๋ก์ ์ ํ์ ์ํํ๊ณ ์ํ์ ์ต์ํํ๋ฉด์ ์งํํ ์ ์์ต๋๋ค.