스프링부트 - #2 환경설정

2020. 11. 17. 13:14개발&TIL/스프링

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 변형 어노테이션
728x90

'개발&TIL > 스프링' 카테고리의 다른 글

스프링부트 - #5 oAuth2  (0) 2020.11.17
스프링부트 - #4 web  (0) 2020.11.17
스프링부트 - #3 테스트  (0) 2020.11.17
스프링 부트 - #1 소개  (0) 2020.11.17
Spring Tests에서 스케쥴링 제외하기  (0) 2020.11.10