www.youtube.com/watch?v=z0EaPjF3pCQ&t=39s
✍ <내용 정리>
스프링부트를 알기 위해서는 스프링과 JEE에 대한 기술을 알아야 한다. (왜 스프링부트가 편리한지..)
오늘 살펴볼 내용
프로젝트 생성
- start.spring.io
- SNAPSHOT 버전 : 개발 중인 버전
- M2, M3 : 마일스톤으로 배포한 버전 (공식적으로 배포하였으나 바뀔 수 있다, 얼리어답터가 아니면 권장하지 않는다.)
- GA(Generally Available) : 정식 배포 버전
- Group, Artifact, version정보를 가지고 프로젝트를 식별하게 된다.
- Description, Package name : 부가정보
- Packaging
- Jar : Java Archive
- War(Web Application Archive) : 톰캣에 배포 가능한 형태 / 압축된 상태로 배포하거나, 압축을 풀어서 배포하거나 할 수 있다.
의존성 관리
1. 버전을 적지 않았는데 어떻게 스프링 버전 5.*가 의존성으로 들어와 있을까?
2. 메이븐의 <parent>, <DependencyManagement> 그리고 <properties>를 활용한 의존성 관리.
- 의존성들의 parent가 spring-boot-start-parent이고 또 그 부모는 spring-boot-dependencies(컨트롤+마우스클릭) 부모인데
- 그 안에 dependencyManagement 블럭으로 버전이 명시되어 있다.
- 예전에는 예를 들어 spring과 logback이 있으면 적합한 버전을 찾는 것 자체가 일이었다. 하지만 스프링 부트가 지금은 알아서 찾아준다.
- dependencyManagement에서 관리 대상이 아닌 라이브러리들은 버전을 명시해줘야 한다.
애플리케이션 실행
1. mvn spring-boot:run (빌드 툴을 이용)
- IDE에서도 실행 가능하다
- ./mvnw를 이용하여 실행 가능하다. (메이블이 설치되어 있지 않더라도 mvnw 스크립트를 활용하여 실행하게끔 도와줌)
2. main 클래스 실행: ide를 이용한
3. JAR 패키징 & java -jar
- 스프링 부트 플러그인을 사용해 특수한 실행 가능한 형태의 JAR 파일 만들 수 있다.
- 서버에 배포하는 용도로 주로 사용한다.
스프링부트 포트 변경
- application.properties에서
- server.port=xxxxx로 변경하면 된다.
개발 툴
Spring-Boot-Devtools
• 개발 중에 뷰 리소스 또는 템플릿에 적용되는 캐시는 오히려 불편하다.
• 개발 중에 애플리케이션을 자주 재시작한다.
• 개발 중에 웹 브라우저를 자주 리로딩한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- 타임리프라면 : spring.thymeleaf.cache=true를 false로 바꾸면 된다.
- -> 사실 devtools를 추가해도 캐시가 먹기 때문에 build를 해야 한다.
재기동 메커니즘
- watcher가 특정한 디렉터리의 클래스들이 변경이 되었는지 확인한다
- 변경이 되었으면 재기동, 재기동하려면 즉 빌드를 해서 바뀌었는지 알려줘야 된다.
💡 브라우저 reload는 : live-reload라는 플러그인 추가하면 된다.
🔍 spring-boot-devtools는 패키징 할 때 빼야 될까?
- 기본적으로 패키징 할 때 무시되기 때문에 그냥 하면 된다.
자동 설정
애플리케이션에서 설정한 빈 등록
- @ComponentScan
- @Component, @Service, @Controller, @Repository
- @Configuration
- @Bean
자동 설정으로 제공하는 빈 등록
- META-INF/spring.factories
- EnableAutoConfiguration
- @Configuration && @ConditionalOnXxx
애플리케이션에서 설정한 빈과 자동 설정으로 설정된 빈이 중복되어 있다면 애플리케이션이 뜨지 않는다.
외부 설정 파일
- application.properties 또는 application.yaml, 환경 변수, java 명령어 아규먼트 등 키/값의 형태로 정의되어 있는 다양한 외부 설정을 지원한다.
- application.properties : 가장 구체적이고 가까운 위치에 있는 설정의 우선순위가 높다.
- 구체적 뜻 : config안에 있는 디렉터리 안에 있는 설정
- 가까운 뜻 : jar파일 안에 있으면 멀다, 현재위치에 있는 filesystem이라면 가깝다.
도커 이미지 빌드
- 도커 이미지는 다른 이미지를 기반으로 새로운 이미지를 만들 수 있다.
- 계층형 이미지를 만든다면 기존 계층은 캐시로 재사용할 수 있어 효율적이다.
Actuator
- 웹(JSON)과 JMX 지원
- 여러 엔드포인트 제공
- /beans “빈” 정보 조회.
- /configprops “프로퍼티” 정보 조회.
- /logger “로거” 정보 조회 및 변경 가능. (런타임중에 바꿀수도 있다.)
- /heapdump 메모리의 현재 상태를 내려받을 수 있다.
- /threaddump 쓰레드의 현재 상태를 내려받을 수 있다.
- 이밖에도 /metrics, /mappings 등 여러 엔드포인트를 제공한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
스프링 부트 어드민
'세미나' 카테고리의 다른 글
[OKKY 7월 세미나] 개발자에게 좋은 이직/퇴사를 위한 꿀팁 (0) | 2021.07.25 |
---|---|
SLASH 21 컨퍼런스 (0) | 2021.05.01 |
[OKKYCON: 2018] 정진욱 - 테스트하기 쉬운 코드로 개발하기 (0) | 2021.03.27 |
[자바 라이브 스터디] 종료 기념 리뷰 (0) | 2021.03.21 |
[OKKYCON 2021 Live] 협업의 기술 (0) | 2021.03.06 |