[F-Lab 챌린지 19일차] 프로젝트 - 의사결정 문서 작성하기

성수데브리·2023년 7월 17일
0

f-lab_java

목록 보기
16/73

학습 목표

  • 모든 의사 결정은 근거를 갖고 하기 -> 문서화 연습으로 훈련하기

학습 결과

  • 의사 결정을 위해 후보군 선정, 장단점 조사, 결정까지 생각보다 고려할게 많았다.

[스프링 부트 버전 선택]

  • Status: 확정
  • Deciders: 쌍문데브킴, 구의데브리
  • Date: 2023-07-17

Technical Story: Github Issue #1

Context and Problem Statement

프로젝트 생성에 앞서 스프링 부트 버전 선택이 필요하다.

스프링 부트의 지원은 2년이기 때문에 최신 버전을 고려하고 있다.

이전 회사에서는 2.7을 사용했기 때문에 3의 주요 변화를 파악하고 결정할 필요가 있다.

Decision Drivers

  • 최신 버전인가?
  • 지원 종료일

Considered Options

  • Spring Boot 3.1.1

Decision Outcome

  • 현재 가장 최신 버전인 3.1.1 으로 결정했다. 신규 프로젝트라 그동안 사용해온 2.7.x 버전과 마이그레이션 사이드 이펙트를 고려하지 않아도 되기 때문이다.

Positive Consequences

  • JDK 17 학습
  • 개발 환경에서 테스트 컨테이너 사용 경험
  • ConnectionDetails 으로 외부 서비스 커넥션 정보 추상화 장점 기대

Negative Consequences

  • 지금 프로젝트가 향후 메이저 업데이트된 버전으로 마이그레이션할 때는 고려해야 될 부분이 상당히 많아 보인다.
  • 의존성 라이브러리들의 버전도 같이 변경되기 때문에 기존 코드에 미칠 사이트 이펙트를 잘 파악해야 할 것 같다.

Pros and Cons of the Options

option 1 : Spring Boot 3.1.1

  • 최근 릴리즈된 버전이라 지원 기간이 넉넉하다. 지원 종료일 2024-05-18
  • 버전3.x 의 주요 변화 Spring Boot 3.0
    1. JDK 17 기본, JDK 19도 가능하다.

    2. Spring Framework 6.0 and Jakarta EE 9 을 기반으로 한다.

      javax.* 패키지명이 jakarta.* 로 변경된다.

    3. GraalVM Native Image 지원

    4. Log4j2 강화

    5. Observability

      • Spring framework 6 부터 Spring Observability 가 도입된다.
    6. @ConstructorBinding

    7. Prometheus Support

    8. More Flexible Auto-configuration for Spring Data JDBC

    9. Enabling Async Acks with Apache Kafka

    10. Elasticsearch Java Client

    11. Auto-configuration of JdkClientHttpConnector

    12. @SpringBootTest with Main Methods

      Spring Boot 3.1

    13. Apache HttpClient 4 의존성 관리

      1. Spring framework 6 에서 RestTemplate 지원이 제거되었다.
      2. Spring boot 3.0 에서는 HttpClient 4 와 HttpClient 5 모두 의존성 관리를 해준다.
      3. HttpClient4 를 계속 사용하면 진단하기 어려운 에러가 발생할 수 있다.
      4. Spring Boot 3.1 에서는 HttpClient 4 의존성 관리를 제거했다.
        HttpClient 5 사용을 권장하고 있음.
    14. Servlet and Filter Registrations

      1. ServletRegistrationBean, FilterRegistrationBean 등록에 실패하면 warning 경고 대신 IllegalStateException 예외를 발생시킨다.

        기존 동작을 유지하려면 setIgnoreRegistrationFailure(true) 메서드를 사용하면 된다.

    15. Testcontainers 의존성 관리

      1. Hibernate 6.2 버전으로 업그레이드

        Hibernate 6.2 migration guide 읽고 어플리케이션에 미치는 영향을 파악할 것

      2. Jackson 2.15

        • Jackson wiki
        • 주요 변화 : Processing limits 기능이 생김.
          • 최대 허용 메모리 크기
          • 최대 허용 문자열 크기
          • 최대 허용 깊이
    16. Mockito 5

      • Mockito 5.3 버전으로 업그레이드함
    17. 주요 의존성 버전 업그레이드

    18. Service Connections

      새로운 service connection 개념이 도입됨.  ConnectionDetails이라는 새로운 인터페이스가 생성되었다.

      원격 서비스와 커넥션에 필요한 정보를 제공하는 Beans 이다. auto-configuration 도 ConnectionDetails 빈을 사용하도록 변경중이다.

      장점은 환경 설정 파일과 어플리케이션 결합을 낮추는 효과가 있으며,
      connection 관련된 정보를 캡슐화할 수 있다.

    19. Testcontainers

      기존에는 테스트 환경에서만 일회용 테스트 컨테이너를 사용했으나, 개발 모드에서도 사용이 가능해졌다.

      Testcontainer lifecycle 관리가 개선되어 container가 먼저 초기화되고 마지막으로 파기되도록 한다.

    20. Docke Compose 지원

    21. Maximum HTTP Response Header Size

      HTTP 통신시 tomcat, jetty 사용할 경우 Response 헤더 사이즈 설정 가능하다.

      기본은 8kb 다.

https://spring.io/projects/spring-boot#overview

https://docs.spring.io/spring-boot/docs/current/reference/html/

https://blog.stkcorp.co.kr/splunk/observability-vs-monitoring-차이점은-무엇일까요

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

0개의 댓글