prepare Spring Framework 7
1. ๋ด์ฅ๋ ๋ณต์๋ ฅ ๊ธฐ๋ฅ
Spring Framework 7์ ๊ฐ๋ ฅํ ๋ณต์๋ ฅ ๋๊ตฌ๋ฅผ ํต์ฌ์ ์ง์ ๋์ ํ์ต๋๋ค.
@Retryable: ์ต๋ ์๋ ํ์, ์ง์ฐ, ์งํฐ, ๋ฐฑ์คํ ๋ฑ์ ์ค์ ๊ฐ๋ฅํ ์ต์ ์ ์ฌ์ฉํ์ฌ ์คํจํ ๋ฉ์๋ ํธ์ถ์ ์ฌ์๋ํฉ๋๋ค. ๋ํ ๋ฐ์ํ ๋ฐํ ์ ํ์ ์ง์ํฉ๋๋ค.
@ConcurrencyLimit: ์๋น์ค์ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋์ ๋ฉ์๋ ํธ์ถ์ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ผ ์ค๋ ๋์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ํํฉ๋๋ค.
@EnableResilientMethods๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํน์ ํฌ์คํธ ํ๋ก์ธ์๋ฅผ ๋ฑ๋กํ์ฌ ๋ ์ ๋ ธํ ์ด์ ์ ๋ชจ๋ ํ์ฑํํ์ธ์ . ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
@Configuration
@EnableResilientMethods
public class ApplicationConfig {
}@Retryable ๋ฐ @ConcurrentLimit์ ์ฌ์ฉํ ์๋น์ค
@Configuration
@EnableResilientMethods
public class ApplicationConfig {
}2. Fluent JMS ํด๋ผ์ด์ธํธ API
Spring์ ์ด์ JdbcClient ์ RestClient๋ฅผ ๋ชจ๋ธ๋ก ํ JmsClient๋ฅผ ํฌํจํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ด์ ์ ์ฐฝํ ๋น๋ ์คํ์ผ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
์ด ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ๊ธฐ์กด JMS ํ ํ๋ฆฟ๋ณด๋ค ๋์ฑ ์ฐ์ํ๊ณ ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋ ๋์์ ๋๋ค. JdbcClient ๊ฐ JdbcTemplate์ , RestClient๊ฐ RestTemplate์ ๋์ฒดํ๋ ๋ฐฉ์๊ณผ ๊ฐ์ต๋๋ค .
3. ๊ฐ๋ ฅํ API ๋ฒ์ ๊ด๋ฆฌ
Spring Framework๋ ๊ฐ๋ ฅํ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก API ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํฅ์์ํต๋๋ค.
๋ฏธ๋์ด ์ ํ์ ํตํด ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
API ์ค๋จ ์๋ฆผ ๋ฐ ๊ฒ์ฆ์ ์ง์ํฉ๋๋ค.
๊ณ ์ ๋ ๋ฒ์ ์ธํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฐ์ ์ฌํญ์ Spring MVC์ Spring WebFlux ๋ชจ๋์์ ์ ์ฉ๋ฉ๋๋ค.
4. ํตํฉ ๋ฉ์์ง ๋ณํ
Spring์ ์๋ก์ด HttpMessageConverters ๊ตฌ์ฑ ํด๋์ค๋ฅผ ํตํด ๋ฉ์์ง ๋ณํ์ ๊ฐ์ํํฉ๋๋ค. ์ด ํตํฉ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ์ํ ์ฝ๋ฑ์์ ์๊ฐ์ ๋ฐ์ HTTP ๋ฉ์์ง์ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ๋ฐฉ์์ ๊ฐ์ํํฉ๋๋ค.
5. ๋ ๋น ๋ฅด๊ณ ์ค๋งํธํ ํ
์คํธ
Spring์ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ผ์ ์ค์งํ์ฌ ํ ์คํธ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค. ์ผ์ ์ค์ง๋ ์ปจํ ์คํธ๋ ํ๋ ์์ํฌ์์ ์ค์ง๋์๋ค๊ฐ ํ์ํ ๋ ์๋์ผ๋ก ๋ค์ ์์๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ค์ด๊ณ ํ ์คํธ ์คํ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
6. ํ๋ ์ํ๊ณ ํตํฉ
Spring Framework 7์ ์ต์ ํ๋ซํผ ๋ฐ ํ์ค์ ๋ง์ถฐ์ ธ ์์ต๋๋ค.
์ฝํ๋ฆฐ 2.2
์์นด๋ฅดํ EE 11 ๊ธฐ์ค์
GraalVM 24 ์ง์
7. Hibernate ORM ๋ฐ JPA ์
๊ทธ๋ ์ด๋
Spring์ Hibernate ORM 7.0 ๋ฐ JPA 3.2 ์ ํตํฉ๋์ด ์ต์ ์ง์์ฑ ํ์ค๊ณผ์ ํธํ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด์ ์๋ EntityManager๋ฅผ @PersistenceContext ์ ๋ ธํ ์ด์ ์ ์ ์ํด์ผ๋ง ์ฃผ์ ํ ์ ์์์ต๋๋ค. ํ์ง๋ง ์ด์ EntityManagerFactory ์ ๊ด๋ จ ๊ณต์ EntityManager๋ฅผ ๋ชจ๋ @Inject ๋๋ @Autowired ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ฃผ์ ํ ์ ์์ผ๋ฉฐ , ์ฌ๋ฌ ๊ฐ์ ์ง์์ฑ ๋จ์๊ฐ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ํน์ ์ง์์ฑ ๋จ์๋ฅผ ์ ํํ๋ ํ์ ์๋ ์ง์๋ฉ๋๋ค.
8. HttpHeaders API ๊ฐํธ
์๋ก์ด HttpHeaders API๋ HTTP ํค๋๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ ๊น๋ํ๊ณ ์ผ๊ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
9. Jackson 3.x ์ง์
Spring Framework๋ ์ด์ Jackson 3.x๋ฅผ ์ง์ ํ๊ณ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ Jackson ๊ธฐ๋ฅ์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์ ์ง์นจ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ํํ๊ฒ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋๋ก ๋์ต๋๋ค.
10. JSpecify๋ฅผ ์ฌ์ฉํ Null ์์ ์ฑ
์ด์ ์ ๋ ธํ ์ด์ ์ ํ์คํ ๋์ฒดํ๋ null ์์ ์ฑ์ ์ํ JSpecify๋ฅผ ์๊ฐํฉ๋๋ค
์คํ๋ง ๋ถํธ ๊ด์
Spring Boot 4๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ, ๊ตฌ์ฑ ๋ฐ ๋ฐฐํฌ ๋ฐฉ์์ ํ๋ํํ๋ ๋ฐ ์์ด ์ค์ํ ๋์ฝ์ ๋๋ค. ์ด ํ๊ธฐ์ ์ธ ๋ณํ๋ ๋์ฑ ๋ชจ๋ํ๋๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ๊ฐ๋ฐ์ ์นํ์ ์ธ ํ๋ ์์ํฌ ๋ฒ์ ์ ์์์ ์๋ฏธํฉ๋๋ค. Spring Boot 4์ ์ฃผ์ ๊ฐ์ ์ฌํญ๊ณผ ์ด๋ฌํ ๊ฐ์ ์ฌํญ์ด ๊ฐ๋ฐ์์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ชจ๋ํ ์ฝ๋๋ฒ ์ด์ค - ๋ฆฌํฉํ ๋ง๋ ์ํคํ
์ฒ
๋ด๋ถ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์๊ณ ์ง์ค์ ์ธ ๋ชจ๋๋ก ๋ถํ ํจ์ผ๋ก์จ ์ํคํ ์ฒ์ ํฐ ๋ณํ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค . ์ด์ ์๋ Spring Boot๊ฐ ํฌ๊ณ ๋ชจ๋๋ฆฌ์ ์๋ ๊ตฌ์ฑ JAR ํ์ผ ํ์์ ์์กดํ์ต๋๋ค. ๋ฒ์ 4์์๋ ์๋ ๊ตฌ์ฑ์ด ๋ชจ๋์ ํจํค์ง๋ก ๋ฆฌํฉํ ๋ง ๋์ด ํ๋ ์์ํฌ์ ์ ์ง ๊ด๋ฆฌ ๋ฐ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ํฅ์๋์์ต๋๋ค.
๊ฐ ๋ชจ๋์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฉ ํจํค์ง๋ก ์์ํฉ๋๋ค.
org.springframework . < ๋ชจ๋ >โ
๋ชจ๋์ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๊ณต๊ฐ API
์๋ ๊ตฌ์ฑ ๋ ผ๋ฆฌ
์ก์ถ์์ดํฐ ๊ด๋ จ ์ง์
ํฅ์๋ ๊ตฌ์ฑ ์์ฑ ๋ฉํ๋ฐ์ดํฐ
์๋ก์ด ์ด๋ ธํ ์ด์ @ConfigurationPropertiesSource ๋ฅผ ๋์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด Spring Boot๋ ์ธ๋ถ ๋ชจ๋์ ์ ์๋ @ConfigurationProperties ์ ํ์ ์ฝ์ ์ ์๊ฒ ๋๋๋ฐ , ์ด๋ ์ด์ ์๋ ๋ถ๊ฐ๋ฅํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค. 1. ๋์ฑ ๊น๋ํ ๋ชจ๋ํ ๋์์ธ 2. ๋๊ตฌ ์ง์ ๊ฐ์ (IDE ์๋ ์์ฑ, ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ) 3. ๊ณต์ ๊ตฌ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ์ฉ์ด์ฑ ํฅ์
SSL ์ํ ๋ณด๊ณ ๊ฐ์
Spring Boot์ SSL ์ํ ์๋ํฌ์ธํธ๊ฐ ๊ฐ์ ๋์ด ๋์ฑ ์ ํํ๊ณ ๊ฐ์ํ๋ ๋ณด๊ณ ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๋ฌด์์ด ๋ฐ๋์๋์?
WILL_EXPIRE_SOON ์ํ๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
์ด์ ์ธ์ฆ์๋ ์ค์ ๋ก ๋ง๋ฃ๋ ๋๊น์ง ์ ํจํ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค.
๋ง๋ฃ๊ฐ ์๋ฐํ ์ธ์ฆ์๋ฅผ ์ถ์ ํ๋ ๋ฐ ๋์์ด ๋๋ ์๋ก์ด ํ๋ expiringChains๊ฐ ์ถ๊ฐ๋์์ต๋๋ค .
์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ชป๋ ๊ฒฝ๋ณด ์์ด ํ๋ก๋์ ํ๊ฒฝ์์ SSL ์ธ์ฆ์์ ์ ํจ์ฑ์ ๋ ์ฝ๊ฒ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
์ฌ๋ฌ TaskDecorator Bean์ ์ฌ์ฉํ ์์
์ค์ผ์ค๋ง
Spring Boot 4.0์์ ๊ฐ์ฅ ๊ฐ๋ฐ์ ์นํ์ ์ธ ์ ๋ฐ์ดํธ ์ค ํ๋๋ ์ฌ๋ฌ TaskDecorator ๋น์ ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค. 4.0 ์ด์ ๋ฒ์ ์์๋ Spring Boot๊ฐ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํ๋๋ง ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ถ์ ๋ฐ ๋ก๊น ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋น์ ์ ์ฉํด์ผ ํ ๋ ์๋์ผ๋ก ์ฒด์ด๋ํด์ผ ํ์ต๋๋ค.
Spring Boot 4.0 ์ด์ :
Spring Boot์์๋ ํ๋๋ง ํ์ฉํ์ต๋๋ค.
TaskDecorator์ฌ๋ฌ ๋ฐ์ฝ๋ ์ดํฐ(์: ์ถ์ ๋ฐ ๋ก๊น )์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ๋ฐ์ฝ๋ ์ดํฐ์์ ์๋์ผ๋ก ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
@Bean
public TaskDecorator customTaskDecorator() {
return runnable -> {
Runnable decoratedWithTracing = tracingDecorator().decorate(runnable);
return loggingDecorator().decorate(decoratedWithTracing);
};
}
public TaskDecorator tracingDecorator() {
return runnable -> () -> {
System.out.println("Tracing Start");
runnable.run();
System.out.println("Tracing End");
};
}
public TaskDecorator loggingDecorator() {
return runnable -> () -> {
System.out.println("Logging Start");
runnable.run();
System.out.println("Logging End");
};
}์์ ์ฝ๋ ์กฐ๊ฐ์์,
์ฒด์ด๋์ ์๋์ผ๋ก ํด์ผ ํด์
Spring ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฃผ์ ํ๊ณ ์ฃผ๋ฌธํ ์ ์์ต๋๋ค.
Spring Boot 4.0์์:
Spring Boot๋ @Order ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์์๋๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ CompositeTaskDecorator๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค
@Bean
@Order(1)
public TaskDecorator tracingDecorator() {
return runnable -> () -> {
System.out.println("Tracing Start");
runnable.run();
System.out.println("Tracing End");
};
}
@Bean
@Order(2)
public TaskDecorator loggingDecorator() {
return runnable -> () -> {
System.out.println("Logging Start");
runnable.run();
System.out.println("Logging End");
};
}์์ ์ด ์คํ๋๋ฉด Spring์ ๋ค์ ์์๋๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ์ฉํฉ๋๋ค.
์ถ์ ๋ฐ์ฝ๋ ์ดํฐ
๋ก๊น ๋ฐ์ฝ๋ ์ดํฐ
๊ทธ ๋ค์ ์ค์ ์์
๋ ์ด์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ง์ ๊ตฌ์ฑํ ํ์๊ฐ ์์ต๋๋ค. Spring Boot๊ฐ ๋์ ์ฒ๋ฆฌํด ์ค๋๋ค.
6. JdbcClient๋ฅผ ํตํ JMS ์ง์
Spring Boot 4.0์ Spring Framework 7์ ๋์ ๋ JmsClient๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ JdbcClient ๋ฐ RestClient์ ์ต์ํ ํจํด๊ณผ ์ผ์นํ๋ฉฐ, JMS ๋ฉ์์ง ์์ ์ ์ํ ์ ์ฐํ๊ณ ๋น๋ ํจํด ์คํ์ผ์ ์ต์ API๋ฅผ ์ ๊ณตํฉ๋๋ค. JmsTemplate ๋ฐ JmsMessagingTemplate ๊ณผ๋ ์ฌ์ ํ ๊ณต์กดํฉ๋๋ค .
์ด๋ฅผ ํตํด JMS๋ ์ ๊ทผ์ฑ์ด ๋ฐ์ด๋๊ณ ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ๊น๋ํด์ง๋๋ค. ํนํ ๋ฉ์์ง ์์คํ ์ ์์กดํ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
Last updated