ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 1.5
    카테고리 없음 2023. 4. 22. 14:39
    오늘은 대략 2주전에 릴리즈 되었던 Spring boot 1.5의 변화에 대해서 알아보도록 하자! 필자도 회사 프로젝트를 1.5 로 업그레이드 했다. 아직 개발 단계라서 많은 영향이 없을 것으로 판단해서 올린 후 테스트를 해봤는데 잘 동작했다. 물론 개발단계라서 쉽게 올렸지만 만약 릴리즈된 상태였다면 쉽게 올리지 못했을 듯 하다. 올릴 때 별다른 문제는 없었는데 두가지 때문에 코드를 조금 수정하였다. 첫 번째는 @ConfigurationProperties 어노테이션의 locations() 속성이 삭제되면서 해당 속성을 사용하지 않고 다른 방식으로 작성하고, 또 다른 하나는 테스트 때문에 작성해둔 HibernateJpaAutoConfiguration 클래스를 상속하던 클래스가 있었는데 생성자의 속성이 추가 되면서 코드를 수정하였다. 단지 테스트를 위해서 만든 클래스였으므로 배포시점에는 삭제 될 클래스이므로 크게 신경 쓰지 않았다.
    public HibernateJpaAutoConfiguration(DataSource dataSource,
                                                                JpaProperties jpaProperties,
                                                                            ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
        super(dataSource, jpaProperties, jtaTransactionManagerProvider);
    }
    
    위는 1.4 에 존재했던 HibernateJpaAutoConfiguration 클래스의 생성자 이고 아래는 1.5 부터 바뀐 생성자이다.
    public HibernateJpaAutoConfiguration(DataSource dataSource,
                                                                             JpaProperties jpaProperties,
                                                                             ObjectProvider<JtaTransactionManager> jtaTransactionManager,
                                                                             ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
        super(dataSource, jpaProperties, jtaTransactionManager,
            transactionManagerCustomizers);
    }
    
    아무튼 아직까지는 별 다른 문제가 없어서 일단은 계속 개발하고 있다. 아마 다 알아보진 않을 테고 많이 사용될 만한 것 또는 필자가 자주 사용할만한 것을 알아볼 예정이며, 필자가 잘 사용하지 않아 뭔말이지 모르는 것은 제외시켰다. ㅎㅎㅎ

    Deprecations from Spring Boot 1.4

    Spring boot 1.4에서 Deprecated 되었던 클래스, 메서드, 속성들이 제거 되었다. 1.4 에서 1.5 올릴 때 해당 클래스, 메서드, 속성을 호출하는지 잘 확인해야 된다. 특히 자주 사용될만한 HornetQVelocity 지원은 제거 되었다. 제거 될 속성은 여기 맨 아래 보면 제거 대상들이 작성되어 있으니 참고하길 바란다.

    Renamed starters

    원래 최초에는 2.0 에서 제거 될 예정이였는데 갑자기(?) 변경되었다. 아래 두개의 starter들은 1.5 부터 제거 되고 새로운 이름으로 디펜더시를 받으면 된다.
    • spring-boot-starter-wsspring-boot-starter-web-services

    • spring-boot-starter-redisspring-boot-starter-data-redis

    @ConfigurationProperties validation

    @ConfigurationProperties 클래스에 jsr-303 어노테이션을 사용할 경우 @Validated 어노테이션을 작성해야 된다. 현재는 사용하지 않아도 유효성검사가 잘 동작하지만 경고 로그가 출력될 것이다. 앞으로는(?) @Validated 어노테이션이 없는 클래스는 유효성 검사가 동작하지 않을 것이다. 앞으로 언제.. 필자가 2.0 스냅샷으로 테스트 해봤는데 유효성검사 잘 하는 거 같은데.. 일단 뭐 그렇다고 하니..

    Spring Session store

    이전에는 특별한 설정없이 redis와 session을 디펜더시 받았다면 redis는 자동으로 세션에 저장되는데 사용되었지만 이제는 store-type 을 다음과 같이 명시적으로 지정해줘야 한다.
    spring.session.store-type=redis
    

    Actuator security

    Spring security를 적용하지 않더라도 Actuator는 기본적으로 보안처리가 되어 있다. 하지만 만약 기존과 동일하게 해당 엔드포인트의 대한 권한을 오픈하고 싶다면 management.security.enabled=false로 설정을 해주면 된다. 또 한 해당 엔드포인트의 권한이 ADMIN 에서 ACTUATOR 변경 되었다. 만약 기존과 동일하게 설정 하고 싶다면 management.security.roles=ADMIN 으로 설정 하면 된다.

    InMemoryMetricRepository

    InMemoryMetricRepository는 이제 더 이상 MultiMetricRepository 를 구현 하지 않는다. 새로운 InMemoryMultiMetricRepositoryMultiMetricRepository를 구현하고 있다.

    @IntegrationComponentScan

    Spring integration 을 사용할 경우에 @IntegrationComponentScan 은 자동으로 설정이 된다. 그러므로 해당 어노테이션은 삭제해도 된다. 삭제하는게 권장하는 사항이다.

    ApplicationStartedEvent

    ApplicationStartedEvent 클래스를 사용하는 경우에는 ApplicationStartingEvent 클래스로 변경해야 된다. 현재 1.5 에서는 ApplicationStartedEvent 클래스가 ApplicationStartingEvent 클래스를 상속받고 있지만 Deprecated 처리 되어 있다.

    Spring Integration Starter

    spring-boot-starter-integration 는 더 이상 spring-integration-jmx 를 디펜더시 받지 않는다. 만약 spring integration jmx 의 지원이 필요 하다면 spring-integration-jmx 를 디펜더시 받아야 한다.

    Gradle 1.x

    Spring boot gradle 플로그인은 Gradle 1.x 및 Gradle 2.x 초기 버전을 지원하지 않는다. Gradle 2.9 이상의 버전만 지원하니 잘 확인하기를 권장한다.

    Remote CRaSH shell

    Spring boot shell 을 사용하기 위해 spring boot는 CRaSH 라이브러리를 사용하는데 해당 프로젝트는 유지보수가 잘 되지 않는 관계로 ssh 지원을 중단하고 결정하였다. 아마도 Spring boot 2.0에서는 완전히 제거될 예정이다.

    Third-party library upgrades

    많은 Third-party library 업그레이드 되었다. 그 중에 Spring Data Ingalls, Jetty 9.4, JooQ 3.9, AssertJ 2.6.0, Hikari 2.5, Neo4J 2.1 등이 있고 플러그인 또한 업그레이드 되었다.

    Apache Kafka support

    spring boot 1.5는 spring-kafka 프로젝트를 자동설정을 지원 한다. kafka를 사용하려면 spring-kafka를 디펜더시 받고 spring.kafka.* 속성들을 사용하면 된다.
    @Component
    public class MyBean {
    
        @KafkaListener(topics = "someTopic")
        public void processMessage(String content) {
            // ...
        }
    }
    
    위 처럼 간단하게 카프카의 메세지를 받을 수 있다.

    Transaction manager properties

    spring.transaction.* 속성을 사용하여 자동설정된 PlatformTransactionManager 클래스를 좀 더 다양하게 구성할 수 있다.
    spring.transaction.rollback-on-commit-failure=...
    spring.transaction.default-timeout=...
    
    현재는 위의 두가지 속성만 지원하고 있다.

    JmxEndpoint interface

    새롭게 JmxEndpoint 인터페이스가 도입되었다. JMX 통해 노출되는 엔드포인트를 개발할 수 있다. MvcEndpoint 인터페이스가 유사하니 참고하면 되겠다.

    Testing updates

    이제는 Test 를 작성할 때 자동설정을 제외시킬 수 있다. 기존의 @Test.. 어노테이션에도 excludeAutoConfiguration 속성이 추가 되었으니 제외 시킬 자동 설정을 작성하면 된다. 또 는 @ImportAutoConfiguration 어노테이션의 (exclude=... 속성을 사용하여 직접 테스트에 추가 할 수 있다. @JdbcTest, @DataMongoTest, @JsonTest, @DataJpaTest, @RestClientTest 어노텡이션에서 확인 할 수 있다.
    @JdbcTest 테스트는 이번 1.5부터 새롭게 추가된 테스트이다.

    JmsTemplate customizations

    spring.jms.template.* 속성들을 사용해서 자동 설정된 JmsTemplate을 커스터마이징 할 수 있다.

    Deprecations in Spring Boot 1.5

    • TomcatEmbeddedServletContainerFactory.setTldSkip 메서드가 deprecated 되었고 setTldSkipPatterns 메서드가 사용된다.

    • ApplicationStartedEventApplicationStartingEvent 로 변경

    • LogFileLOG_FILE, LOG_PATHLoggingApplicationListener 클래스의 상수로 변경

    • 구아바는 Spring 5에 삭제 될 예정이므로 Guava 캐싱은 더이상 사용되지 않을 것이다. 만약 구아바 캐시을 사용한다면 카페인 캐시로 업그레이드 하는 것이 좋다.

    • CRaSH 유지보수가 안되는 관계로 추후에 삭제

    • JmxEndpoint 인터페이스가 추가되어 EndpointMBeanExporter 클래스의 다수의 protected 메서드가 deprecated 처리

    • SearchStrategy.PARENTS 가 SearchStrategy.ANCESTORS 변경 되었다. SearchStrategy.PARENTS는 deprecated 처리

    • Apache DBCP가 Deprecated 되었다. DBCP2 를 권장한다.

    • server.undertow.buffers-per-region 속성은 더이상 사용되지 않으므로 deprecated 처리

    • org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureTestDatabase deprecated 처리 되었고 org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase 이동하였다.

    Property Renames

    • server.max-http-post-size deprecated 처리 되었고 해당 서버의 따라 지정 예) server.tomcat.max-http-post-size=..

    • spring.data.neo4j.session.scope 속성 제거!

    오늘은 이렇게 Spring boot 1.5의 대해서 살펴봤다. 1.4 보다는 많은 변화가 없었다. 아마도 2.0에 투자를 더 많이 하는 듯 보인다. 2.0은 아마도 올해 말이나 내년초에 나올지 않나 싶다. 당분간은 1.x 로 개발을... 필자 또 한 새롭게 사용할 만한 것은 kafka가 정도 될 것 같다. 그 외에는 필자가 자주 사용할만한 것은 없는 것 같다. 이상으로 spring boot 1.5에 대해서 알아봤다!

    댓글

Designed by Tistory.