본문으로 바로가기

[Spring] 스프링 부트 업데이트 - 3

category Spring 2021. 7. 21. 16:41

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8

 

스프링 부트 업데이트 - 인프런 | 강의

이 강의는 "스프링 부트 개념과 활용" 강의 확장팩으로 지난 2년간 있었던 스프링 부트 업데이트를 다루고 있습니다. 스프링 부트 2.1부터 2.4까지의 새로운 기능 및 변경 내역을 확인하시고 스프

www.inflearn.com

 

 

ㅇ 스프링 부트 2.3

- 자바 14 지원

- 의존성과 프로퍼티 변경

- 효율적인 컨테이너 이미지 생성 방법 제공

- Liveness와 Readiness

 > 쿠버네티스에서 잘 작동하기 위해 생김 

 > actuator에서 지원

- Graceful Shutdown 지원

 > 톰캣, undertow 등이 원래 가지고 있는 기능이였으나, 부트에서 적극 지원

- Actuator, configprops 엔드푄트

 

ㅁ 의존성과 프로퍼티 변경

- spring-boot-stater-web 에서 spring-boot-stater-validation 모듈을 가져오지 않음

 > @Notempty, @NotNull 등을 못써서, 쓰기위해서는 디펜던시 따로 추가해줘야함

- jackson 2.11

 > 필드 이름 없이 Array 만들지 못하도록 변경됨.

- period 타입 지원 

-  spring.data.jpa.repositories.bootstrap-mode가 deffered 모드로 바뀜

 ( 어플리케이션 생성 후, 리포지토리 생성 )

 > 조금이라도 빨리 부팅하게 하기 위한 의지 

 

ㅁ 스프링 부트 애플리케이션 도커 이미지 만들기

- 배포 하기 위해

 1. jar로 만들기

 2. mvn 사용  (maven 이 설치 안되어있으면 mvnw 사용 - maven wrappper )

     > 클린 ( 타겟폴더 지움 ) 하고 빌드, 패키징 권장

 3. mvn spring-boot:run

- 도커 파일 만들기

- dive를 통해 이미지 분석 가능 

 > jarlauncher의 main 함수를 통해 어플리케이션 실행됨

 

ㅁ 보다 효율적인 도커 이미지 만들기

- 레이어 개념으로 만들기

- jdk -> 라이브러리 -> 애플리케이션 코드 순으로 생성 ( 가장 변하지 않을만한 것 위에 변할만한것 올림 )

 > 애플리케이션 코드 : BOOT-INF 폴더  > classes 폴더 + application.properties

 > 레이어로 하게 되면, 소스코드를 변경하면 애플리케이션 코드 레이어만 변경되고, 나머지는 캐싱하게 됨

 

ㅁ 스프링 부트로 효율적인 도커 이미지 만들기

- 아래 항목 메이븐 플러그인에 추가

 <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
 <layers>
   <enabled>true<enabled>
 </layers>
 </configuration>
 <executions>
   <execution>
     <goals>
       <goal> build-image </goal>
     </goal>
   </execution>
 </excutions>
</plugin>

- # ./mvnw clean package

 > 빌드 할때마다 도커 이미지로 만들어짐 (효율적인 형태로)

 

ㅁ Gracefull 셧다운

- application.properties 에 server.shutdown=gracefull 추가

- 요청 처리 중인 리퀘스트에 대해 응답을 주고 꺼짐

- 신규 요청은 받지 않음

 > 네트워크단에서 거부, undertow는 503 (service unavailable)

- 다른 방식으로 라이브 체크 하는게 좋음 (liveness, readiness)

 

ㅁ Liveness와 Readiness

- Liveness : 애플리케이션이 살아있는가?

- Readiness : 요청을 받을 준비가 되었는가?

- ApplicationAvailability 라는 bean으로 상태 체크도 가능 ( 자동으로 등록되어 있음 )

- macOS 에서 http pie라는 걸로 명령어로 체크 가능

- applicationContext에 eventpublisher를 통해 상태값 변경 테스트 함

- @async 를 생각해서 잘 써야함 (그렇지않으면 sync 하게 작업되어 원하는결과가 안나옴)

 

ㅁ Actuator, configprops 엔드포인트 개선

- 2.3 부터는 /acutoator/configprops 에 origin이 나옴

 > 프로퍼티 값이 어디서 왔는지 확인 할 수 있다.

 

ㅁ Properties 파일에 한글을 쓰면 왜 깨질까

- ISO 8859-1로 인코딩 되는데, 이게 한글을 표현할 수 없음 , 표현할 수 없는 문자는 유니코드로 작성해야함

 > 유니코드로 컨버팅하여 입력해야함

- IDE에서 도움 받을 수 있음