스프링부트 - #2 환경설정
https://start.spring.io/
피보탈에서 제공하는 스프링 이니셜라이저는 원하는 언어, 빌드 도구, 스프링 버전, 의존성을 체크하여 스프링 부트 프로젝트를 생성
@RestController
@Controller, @ResponseBody를 합쳐놓은 역할, RESTful 웹 서비스를 만들때 주로 사용
@GetMapping
get 방식으로 경로를 받는 매핑 어노테이션, value 값을 지정하지 않으면 기본값인 빈 값(""")
그레이들 레퍼 기본 구조
gradle
wrapper
gradle-wrapper.jar
gradle-wrapper.properites
gradlew
gradlew.bat
- gradlew : 리눅스 및 맥OS용 셸 스크립트
- gradlew.bat : 윈도우용 배치 스크립트
- gradle/wrapper/gradle-wrapper.jar : Wrapper JAR
- gradle/wrapper/gradle0wrapper.properties : 그레이들 설정 정보 프로퍼티 파일
그레이들을 사용하면 멀티 프로젝트를 활용하기 쉽다.
스프링 부트 모듈 기본 경로
- src
- main
- java : 자바 소스 경로
- com
- demo
- resources
- static : static한 파일(css, images, js등)의 디폴트 경로
- templates : thymeleaf, freemarker 및 기타 서버 사이드 템플릿 파일의 경로
- test : 스프링 부트의 테스트 코드 경로
- java
- com
- demo
환경 프로퍼티 파일 설정하기
기존 스프링 프레임워크의 복잡한 XML 설정을 파일 하나로 설정 가능
기존에는 properties 파일을 많이 사용했으나 최근에는 YAML(YAML Ain't Markup Language) 파일을 더 많이 사용
application.properties와 application.yml 파일이 둘 다 생성되어 있으면 application.yml만 오버라이딩 됨
yml 파일에서 프로퍼티 설정을 구분하는 방법은 ---를 사용하여 기준으로 설정값을 구분
application-{profile}.yml 로도 사용 가능
프로파일을 지정하면 해당 프로파일의 속성이 1순위가 되고 나머지는 application.yml 파일 참조
server:
port: 80
---
spring:
profiles: local
server:
port: 8080
---
spring:
profiles: dev
server:
port: 8081
---
spring:
profiles: prd
server:
port: 8082
JAR 파일로 직접 실행시 프로파일 지정 방법
java -jar ... -D spring.profiles.active=dev
YAML 파일을 사용하면 List, Set, Map 등 다양한 바인딩형 매핑이 휠씬 간편
@Value와 @ConfigurationProperties 어노테이션을 비교
@Value: 프로퍼티의 키를 사용하여 특정한 값을 호출
@ConfigurationProperties: 루트 접두사를 활용하여 원하는 객체를 바인딩
기능 | @Value | @ConfigurationProperties |
---|---|---|
유연한 바인딩 | X | O |
메타데이터 지원 | X | X |
SpEL 평가 | O | X |
- 유연한 바인딩: 프로퍼티의 값을 객체에 바인딩할때 필드를 Camel Case로 선언하고 프로퍼티 키는 낙타, 케밥, 언더바 등으로 선언 가능
- 메타데이터 지원: 프로퍼티의 키에 대한 정보를 메타데이터 파일(JSON)로 제공
- SpEL(Spring Expression Language, 스프링 표현 언어): 런타임에 객체 참조에 대해 질의하고 조작하는 기능을 지원하는 언어
자동 환경 설정 이해하기
스프링 부트 자동설정은 약 100여개의 자동 설정을 제공
이런 자동설정은 @EnableAutoConfiguration 또는 이를 포함한 @SpringBootApplication 중 하나를 사용
@SpringBootApplication 어노테이션은 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan 의 조합
자동 설정 어노테이션 살펴보기
스프링 부트는 자동 설정이 적용되는 조건, 시점 등에 따라 다양한 어노테이션을 지원
자동 설정을 위한 조건 어노테이션 목록
조건 어노테이션 | 적용 조건 |
---|---|
@ConfitionalOnBase | 해당하는 빈 클래스나 이름이 이미 빈 팩토리에 포함되어 있는 경우 |
@ConditionalOnClass | 해당하는 클래스가 클래스 경로에 있는 경우 |
@conditionalOnCloudPlatform | 해당하는 클라우드 플랫품이 활용 상태인 경우 |
@conditionalOnExpresssion | SpEL에 의존하는 조건일 경우 |
@conditionalOnJava | JVM 버전에 일치하는 경우 |
@conditionalOnJndi | JNDI가 사용 가능하고 특정 위치에 있는 경우 |
@conditionalOnMissingBean | 해당하는 빈 클래스나 이름이 미리 빈 팩토리에 포함되지 않는 경우 |
@conditionalOnMissingClass | 해당하는 클래스가 클래스 경로에 없는 경우 |
@conditionalOnNotWebApplication | 웹 애플리케이션이 아닌 경우 |
@conditionalOnProperty | 특정한 프로퍼티가 지정한 값을 갖는 경우 |
@conditionalOnResource | 특정한 리소스가 클래스 경로에 있는 경우 |
@conditionalOnSingleCandidate | 지정한 빈 클래스가 이미 빈 팩토리에 포함되어 있고 단일 후보자로 지정 가능한 경우 |
@conditionalOnWebApplication | 웹 애플리케이션인 경우 |
자동 설정을 위한 순서 어노테이션
순서 어노테이션 | 설명 |
---|---|
@AutoConfigureAfter | 지정한 특정 자동 설정 클래스들이 적용된 이후에 해당 자동 설정 적용 |
@AutoConfigureBefore | 지정한 특정 자동 설정 클래스들이 적용되기 이전에 해당 자동 설정 적용 |
@AutoConfigureOrder | 자동 설정 순서 지정을 위한 스프링 프레임워크의 @Order 변형 어노테이션 |