본문 바로가기
IT 도서/스프링 부트 실전 활용 마스터

3. 스프링 부트 개발자 도구

by 이민우 2021. 7. 31.
728x90
반응형

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=20551523

 

스프링 부트 실전 활용 마스터

대규모 트래픽을 적은 비용으로 처리할 수 있는 고성능 서버의 비밀은 무엇일까? 스프링 부트 개발, 테스트, 문서화, 보안, 도커화, 운영까지 모두를 한 권에 마스터하는 것을 목표로, 익숙하고

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세한 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.

 

 

개발자 도구

 

스프링 부트 개발팀은 내장형 서블릿 컨테이너에 만족하지 않고 DevTools 라는 새로운 개발자 도구를 만들었다고 한다. 이에 포함된 기능은 다음과 같다.

 

  • 어플리케이션 재시작 및 리로드 자동화
  • 환경설정 정보 기본값 제공
  • 자동설정 변경사항 로깅
  • 정적 자원 제외
  • 라이브 리로드 지원

 

이를 사용하기 위해서는 다음 의존관계를 추가해야 한다.

메이븐의 optional을 지정하면 선택적 의존관계는 실제 상용 운영 코드에서는 추가되지 않는다. 즉, 의존관계가 외부로 전파되는 것을 막아준다.

 

상용 운영을 판단하는 기준은 어플리케이션의 기작 방법이다. java -jar이나 서비스 제공자가 사용하는 클래스로더로 실행하면 상용이라고 판단하여 활성화하지 않는다.

IDE에서 실행되거나 메이븐으로 실행 시 개발 모드라고 판단한다.

이 판단은 스프링 부트 데브툴즈가 알아서 수행한다.

 

 

 

재시작 및 리로드 자동화

 

개발자 도구는 개발자가 작성한 코드를 하나의 클래스로더로 로딩하고 서드파티 라이브러리는 별도의 클래스 로더로 로딩한다.

 

어플리케이션이 재시작될 경우 개발자가 작성한 코드를 로딩했던 클래스로더도 종료되고 새로운 클래스로더가 사용된다. 하지만 서드파티 라이브러리를 로딩했던 클래스로더는 그대로 남는데, 이는 새로 시작하는 것보다 빠르게 어플리케이션을 재시작할 수 있다.

 

 

정적 자원 제외

 

스프링 부트는 /META-INF/maven, resources, /resources, /static 등 자원 변경 시에도 재시작을 하지 않는다.

대부분의 웹 기술에서는 정적 자원 변경 내용은 재부팅 없이도 서버에 반영할 수 있다. 그리고 이를 구현하기 위해서는 다음 설정을 추가하면 된다.

 

spring.devtools.restart.exclude=static/**,public/**

 

이렇게 설정된 폴더의 자원 변경은 서버 재시작을 유발하지 않게 된다. 혹은 spring-devtools.restart.enabled=false 로 지정하면 개발자 도구에 의한 재시작 자체를 비활성화할 수 있다.

 

 

개발 모드에서 캐시 비활성화

 

개발 과정에서는 굳이 캐시가 필요가 없다. spring-thymeleaf.cache=false 등의 옵션을 설정하면 캐시 사용이 불가능하지만, 상용시에는 바꿔줘야 하는 불편함이 있다.

 

spring-boot-devtools는 상용과 개발을 알아서 판단하기에 여기에 적용하면 편리하다.

 

빌드 파일에 spring-boot-devtools를 추가하여 IDE나 메이븐으로 실행 시 환경설정 정보가 기본으로 정해진 값으로 지정되는데, 이를 속성 기본값 적용이라고 한다.

 

 

 

부가적 웹 활동 로깅

 

logging.level.web=DEBUG 추가 시 로깅 활성화가 가능하다.

728x90
반응형