application.yml 이란?
application.yml은 Spring Boot 프레임워크에서 사용하는 설정 파일 중 하나입니다. YAML 형식으로 작성되며, 애플리케이션의 구성 정보를 정의하는데 주로 사용됩니다.
1. 애플리케이션 설정: 애플리케이션의 이름, 버전 등과 같은 일반적인 설정을 포함할 수 있습니다.
spring:
application:
name: my-application
2. 데이터베이스 연결 정보: 데이터베이스의 URL, 사용자 이름, 비밀번호, 드라이버 클래스 등과 같은 데이터베이스 연결 정보를 포함할 수 있습니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/my_database
username: root
password: password123
driver-class-name: com.mysql.cj.jdbc.Driver
3. 웹 애플리케이션 설정: 웹 애플리케이션의 뷰 템플릿 위치, 뷰 접미사 등과 같은 설정을 포함할 수 있습니다.
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
4. 프로파일별 설정: 여러 환경(로컬, 개발, 운영 등)에 따라 다른 설정을 지정할 수 있습니다. 이 경우에는 application-{profile}.yml 형식으로 별도의 파일을 만들어서 관리할 수도 있습니다.
5. 기타 설정: 보안 설정, 캐시 설정, 로깅 설정 등 다양한 설정들을 포함할 수 있습니다.
application.yml 설정 방법
Spring Boot 애플리케이션에서 기존의 application.properties 설정을 application.yml 파일로 전환하기 위해서는 아래와 같이 진행합니다.
1. application.yml 파일 생성
프로젝트의 src/main/resources 디렉토리에 application.yml 파일을 생성합니다.
2. application.properties 내용 복사 및 변환
기존의 application.properties 파일 내용을 application.yml 형식으로 변환하여 application.yml 파일에 복사합니다.
예시: application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
server.port=8080
logging.level.org.springframework=DEBUG
변환된 application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server:
port: 8080
logging:
level:
org:
springframework: DEBUG
변경 시 주의 사항
1. 들여쓰기: YAML은 들여쓰기를 통해 계층 구조를 나타내므로, 각 설정 항목을 적절한 위치에 배치하고 들여쓰기를 정확하게 맞추어야 합니다.
2. 키-값 쌍: : 다음에는 공백이 있어야 합니다. 예를 들어, spring.datasource.url: jdbc:mysql과 같이 설정합니다.
3. 주석: YAML에서 주석은 # 기호로 시작합니다.
4. 마지막 줄 문제: YAML 파일에서는 마지막 줄에 문제가 발생할 수 있으므로, 추가적인 공백 또는 주석을 달아줍니다.
3. 기존 application.properties 파일 제거 (선택 사항)
변환이 완료되면 기존의 application.properties 파일을 삭제하거나 백업합니다. Spring Boot는 기본적으로 application.properties와 application.yml 파일을 모두 지원하므로, 두 파일이 동시에 존재하면 설정 충돌이 발생할 수 있습니다.
(근데 위에 1~3번 방법 대신 application.properties 우클릭 해서 Refactor -> Rename 으로 application.yml 로 변경해도 됩니다,,)
4. 다중 프로파일 설정 (옵션)
여러 프로파일을 사용하는 경우, application.yml 파일에서 각 프로파일의 설정을 관리할 수 있습니다.
예시: 다중 프로파일 설정
방법 1: application.yml 파일에 추가 설정
application.yml
spring:
datasource:
url: jdbc:mariadb://localhost:3306/mydb
username: root
password: secret
driver-class-name: org.mariadb.jdbc.Driver
---
spring:
config:
activate:
on-profile: local
datasource:
url: jdbc:mariadb://vennycode.com:3306/mydb
username: root
password: secret
driver-class-name: org.mariadb.jdbc.Driver
또는 아래와 같이 application-local.yml 파일을 추가하여 local 일 경우의 설정을 분리 할 수 있습니다.
방법 2: application-local.yml 파일 분리
application.yml
spring:
datasource:
url: jdbc:mariadb://localhost:3306/mydb
username: root
password: secret
driver-class-name: org.mariadb.jdbc.Driver
application-local.yml
spring:
datasource:
url: jdbc:mariadb://vennycode.com:3306/mydb
username: root
password: secret
driver-class-name: org.mariadb.jdbc.Driver
* 방법 1 또는 방법 2 적용 후, IntelliJ의 Run/Debug Configurations에서 Active profiles를 local로 입력하여 실행
또는 Modify options -> Add VM options 를 활성화하여 -Dspring.profiles.active="local" 입력하여 실행
* Active profiles 와 VM options 설정 차이 ↓
Active profiles에 local을 입력하거나 VM options에 -Dspring.profiles.active="local"을 입력하는 방법은 두 가지 다른 접근 방식으로, 각각의 차이점은 다음과 같습니다:
• 적용 범위: Active profiles 설정은 IntelliJ IDEA 내에서만 적용되고, 해당 IDE에서 실행할 때만 효과가 있습니다. 반면에 VM options로 시스템 프로퍼티를 설정하는 방법은 JVM 레벨에서 적용되어, IntelliJ IDEA 외의 다른 실행 환경에서도 동일하게 작동합니다.
• 편의성: Active profiles 설정은 IntelliJ IDEA의 UI를 통해 직관적으로 프로파일을 선택할 수 있어 사용하기 편리합니다. 반면에 VM options는 명령 줄 또는 다른 실행 환경에서도 동일한 설정을 적용할 수 있어 유연성이 높습니다.
따라서, 자신의 편의와 프로젝트의 요구에 맞게 Active profiles 설정 또는 VM options로 시스템 프로퍼티를 설정하는 방법을 선택하여 사용할 수 있습니다.
--------------------------------------
위와 같이 설정할 경우 로컬 개발 환경에서는 local 설정이 적용되기 때문에
기본 서버에서는 jdbc:mariadb://localhost:3306/mydb 를 호출하고,
local 에서는 jdbc:mariadb://vennycode.com:3306/mydb 를 호출하여 실행하게 됩니다.
(관리의 편의성과 명확성을 고려할 때 application-local.yml과 같이 프로파일별로 분리된 설정 파일을 사용하는 것이 일반적으로 권장됩니다. 이 방식은 설정의 복잡성을 줄이고, 각 환경에 맞게 명시적으로 구성할 수 있도록 도와줍니다.)
5. 애플리케이션 실행 및 테스트
애플리케이션을 실행하여 application.yml 파일이 제대로 작동하는지 확인합니다. 로그 및 애플리케이션 동작을 통해 설정이 제대로 반영되었는지 검증합니다.
application.properties와 application.yml의 차이가 궁금하다면 ↓
https://vennycode.tistory.com/57
'Framework > Spring' 카테고리의 다른 글
[Spring] RESTful API 컨트롤러의 @GetMapping 에서 데이터를 받는 방법 (0) | 2024.07.03 |
---|---|
[Spring] Spring Boot 기본, 자주 사용하는 어노테이션 (애너테이션) (0) | 2024.07.02 |
[Spring Boot] application.properties와 application.yml 차이 (0) | 2024.06.29 |
[Spring] message.yml 이란? 사용 목적, 사용 예시 (0) | 2024.06.29 |
[Spring] @Controller와 @RestController의 차이 (0) | 2024.06.29 |