티스토리 뷰
외부설정파일에는 yml 과 properties 파일이 있다 나는 yml 파일을 자주 사용하기 때문에 자세한 설명에 대한 것은 yml 파일 기준으로 작성하였다
자동 구성
- 별도의 코드 작성 없이 스프링이 알아서 감지하여 빈을 생성하는 기능
- 자동구성의 예: 스프링을 사용할 경우 DataSource 생성과 연결을 위한 메소드를 작성하고 @Bean 어노테이션을 붙임으로써 스프링 어플리케이션 컨텍스트에 빈을 생성하였다. 하지만 스프링부트에서는 의존성 라이브러리(예를들어 H2)를 pom.xml에 작성한다면 런타임 시점에 스프링부트가 해당 빈을 자동으로 찾아 스프링 애플리케이션 컨텍스트에 생성한다. 이처럼 별도의 코드 작성 없이 알아서 감지하여 빈을 생성하는 스프링의 기능을 자동-구성 기능이라고 한다.
스프링 외부 설정
- 스프링 애플리케이션의 모든 빈들이 사용하는 설정들
- 자동-구성 설정들을 변경할 때도 사용된다
application.properties / application.yml 파일에 지정할 수 있다
외부 설정의 종류
- 데이터 설정(datasource), jpa 설정, 로깅 설정 등 이 있다 아래는 yml 파일 예시
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${secrets.MYSQL_URL}
username: ${secrets.MYSQL_USER}
password: ${secrets.MYSQL_PW}
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
open-in-view: false
show-sql: true
hibernate:
format_sql: true
ddl-auto: update
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace
보통 yml 파일을 많이 작성한다. 키값의 중복되는 코드를 생략 가능하기 때문
빈을 사용한 외부 설정
- @ConfigurationProperties 사용
@Component
@ConfigurationProperties(prefix="taco.orders")
@Data
@Validated
public class OrderProps {
@Min(value=5, message="must be between 5 and 25")
@Max(value=25, message="must be between 5 and 25")
private int pageSize = 20;
}
해당 클래스를 속성 설정 클래스로 사용하는 예시
추가로 @Validated를 사용하여 외부설정파일이 실행 될 때 해당 속성을 검증하여준다
다른 클래스에서 해당 클래스를 사용하여 외부 설정 값을 변경 할 수 있다
외부설정 파일
taco:
orders:
pageSize:10
외부 설정 파일에 지정한 값 코드에서 사용
- @Value 사용
@Component
public class User {
@Value("${custom.myname}")
private String name;
}
외부설정 파일의 custom.myname 의 값을 가져와 name 변수에 대입하여 사용가능 하다
외부설정 파일
custom:
myname:Rayoungji
외부설정 파일을 사용하는 이유
- 배포하고난 후의 설정을 변경할때 서버를 내리지 않고 변경해주기 위함
- properties 파일로 관리되는 정보들을 불러다 쓰게 된다면 키-값 구조로 정의된 값들이 소스코드에서는 키만 불러다가 값으로 치환되는 작업을 거치게 된다. 이는 소스코드를 수정해야할 필요도 없을 뿐만아니라 서버에 접속해서 properties 파일만 수정하고 끝나면 되는 것이기 때문에 배포가 완료된 이후 과정에서는 매우 편리하다.
프로파일(profiles)
- 스프링 애플리케이션의 구동 환경에 대한 설정
- 개발환경과 배포환경을 다르게 설정해야 할 때 두개의 properties 파일 생성 혹은 yml 파일에서 ---을 사용하여 프로파일 구분
Yml 파일 내에서의 프로파일 설정
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url : jdbc:mysql://rdsdatabase.cwa8drqjuwbz.ap-northeast-2.rds.amazonaws.com:3306/damoim?verifyServerCertificate=false&useSSL=false&serverTimezone=Asia/Seoul
username: username
password: password
---
spring:
profiles: local
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url : jdbc:mysql://localhost:3306/damoim?verifyServerCertificate=false&useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
username: username
password: password
--- 구분자로 설정파일을 구분한 뒤 profiles에 local을 명시함으로써 local 프로파일을 사용하게되면 해당 외부설정이 실행된다
local 프로파일을 사용하지 않으면 ---구분자 위의 외부설정이 실행된다
'BackEnd > Spring In Action' 카테고리의 다른 글
Chap3. 데이터로 작업하기 (0) | 2020.08.22 |
---|---|
Chap2. 웹 애플리케이션 개발하기 (0) | 2020.08.22 |
Chap1. 스프링 시작하기 (0) | 2020.08.22 |