728x90

Spring Boot로 백엔드 애플리케이션을 개발할 때 application.yml 파일은 거의 반드시 만나게 되는 핵심 설정 파일입니다.
초기에는 복잡하고 생소하게 느껴질 수 있지만, 프로젝트 규모가 커질수록 이 파일을 얼마나 잘 설계했는지가 유지 보수성과 개발 효율성에 큰 영향을 주게 됩니다.
이 글에서는 application.yml이 어떤 파일인지, 기본 문법은 어떤지, 그리고 실무에서 자주 사용하는 설정 항목들을 실제 예제와 함께 "이 값은 무엇을 의미하는가" 중심으로 설명합니다.
1. application.yml이란?
Spring Boot의 환경 설정 파일입니다. 다음과 같은 내용을 정의합니다.
- 서버 포트 번호
- DB 접속 정보
- 파일 업로드 관련 설정
- 메일/도메인 등 서비스 운영 정보
- 인증, API 키 등 보안 관련 값
- 실행 환경 구분(dev, prod 등)
2. 기본 문법 요약
server: port: 8080
my-list:
- apple
- banana
- : 기준으로 key-value를 표현하고,
- 계층 구조는 들여쓰기로 표현하며,
- **공백(Space)**을 사용해야 하며 Tab은 오류 원인이 됩니다.
3. 실무에서 자주 사용하는 설정 예시 + 설명
1) 서버 포트 설정
server:
port: 8081
- 서버가 실행될 포트 번호를 지정합니다.
- 여러 애플리케이션을 동시에 띄우거나 Nginx 등과 포트를 나눌 때 유용합니다.
2) 실행 환경 구분 (Profiles)
spring:
profiles:
active: dev
- 현재 사용할 프로파일 설정 파일을 지정합니다.
- 예: application-dev.yml, application-prod.yml 등
3) DB 연결 정보
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: myuser
password: mypass
driver-class-name: org.postgresql.Driver
- Spring이 데이터베이스와 연결하는 데 필요한 정보입니다.
- 환경별로 다른 DB를 사용하려면 -dev, -test 프로파일에 맞게 분기해줍니다.
4) 메일 발송자 설정
app:
mail:
sender:
address: no-reply@example.com
name:
ja: 株式会社サンプル
en: Sample Inc.
reply:
address: support@example.com
- 사용자에게 발송할 이메일의 발신자 주소 및 이름입니다.
- 다국어 지원이 필요한 경우 언어 코드(jp/en 등)로 나누어 관리합니다.
5) 도메인 및 콜백 URL
app:
domain:
root: https://www.example.com
front: https://front.example.com
- root: 시스템의 기본 URL (예: 마케팅용 루트 도메인)
- front: 프론트엔드 웹 앱의 URL (예: Vue/React 기반 화면)
login-cb-url:
sign-in: /login/callback
logout: /logout/callback
- 로그인/로그아웃 성공 후 사용자가 이동하게 될 콜백 주소입니다.
6) S3 파일 업로드 설정
app:
s3:
bucket:
temporary: my-temp-bucket
customer-upload: my-upload-bucket
region: ap-northeast-1
upload:
expiration-seconds: 600
max-bytes: 10485760
- bucket.temporary: 임시 파일을 업로드할 S3 버킷 (예: presigned URL 사용)
- bucket.customer-upload: 고객이 업로드하는 파일을 위한 실제 버킷
- expiration-seconds: 업로드 URL 만료시간 (초)
- max-bytes: 허용 가능한 최대 업로드 크기 (바이트)
7) 인증 관련 설정
app-cloud:
auth:
customer-password-salt: salt-value
- 비밀번호 해싱 시 사용할 salt 값입니다.
- 반드시 외부에서 주입하도록 설계하고, Git에 올리지 않아야 합니다.
selmid:
client-id: selmid-client-id
client-secret: selmid-client-secret
token-signing:
private-key: -----BEGIN PRIVATE KEY-----
key-id: abcdef123456
- selmid는 외부 인증 시스템 (예: Azure AD, OAuth 서버 등)의 클라이언트 정보입니다.
- private-key, key-id는 JWT 서명에 사용될 비공개 키 정보입니다.
8) 외부 API 연동
google:
maps:
api-key: google-maps-api-key
url-signing-secret: signing-secret
twilio:
auth:
id: twilio-auth-id
token: twilio-auth-token
- 외부 API(Google Maps, Twilio) 사용을 위한 인증 정보입니다.
- 반드시 .gitignore된 secret 파일로 분리해서 관리하는 것이 좋습니다.
9) 다운로드 링크 설정
download:
cloud-front-base-url: https://cdn.example.com
expiration-seconds: 3600
- CDN을 통한 다운로드 URL을 만들 때 사용하는 기본 주소입니다.
- presigned URL 사용 시 만료시간도 함께 설정합니다.
10) 캐시 만료 설정
cache:
cache-groups:
sampleCache:
expire: 100
- 캐시 그룹 이름별로 TTL(Time To Live)을 초 단위로 설정합니다.
- Redis, Ehcache 등에서 활용됩니다.
11) RSS 피드 타임아웃
rss-feed:
connect-timeout-millis: 3000
read-timeout-millis: 5000
- 외부 RSS 데이터를 불러올 때의 연결 및 응답 시간 제한 설정입니다.
- 너무 길게 설정할 경우 전체 응답이 지연될 수 있어 주의가 필요합니다.
4. 전체 구조 샘플
spring:
profiles:
active: dev
app:
domain:
root: https://www.example.com
mail:
sender:
address: no-reply@example.com
s3:
bucket:
temporary: example-temp-bucket
upload:
expiration-seconds: 600
env:
profile: dev
5. 초보자를 위한 팁
- Tab 대신 반드시 Space로 들여쓰기 하세요.
- 환경이 많아지면 application-dev.yml, application-prod.yml로 분리해서 관리하세요.
- application-secret.yml에 민감한 정보를 분리하고 Git에 올리지 마세요.
- @Value, @ConfigurationProperties를 통해 설정값을 Java 클래스에 주입할 수 있습니다.
- 공통된 값은 상수처럼 한 곳에 정리하면 유지보수가 쉬워집니다.
6. 마무리
지금까지 Spring Boot에서 자주 사용되는 `application.yml` 설정 항목들을 정리해보았습니다. 설정의 의미와 사용 목적을 이해하고 나면, 복잡해 보였던 yml 구조도 점점 익숙해질 수 있습니다.
다음 글에서는 "설정은 했는데 적용되지 않는 경우"를 주제로, 실무에서 겪기 쉬운 실수와 그 해결 방법들을 자세히 소개할 예정입니다.
읽어주셔서 감사합니다.
728x90
'Work' 카테고리의 다른 글
| [1편] CLI·CUI·GUI 완전 정리 – 개념, 문법, 실무 활용까지 한눈에! (2) | 2025.07.04 |
|---|---|
| Mockito로 static 메서드와 생성자(mockConstruction) 완전 제어하기 – 테스트 커버리지 100% 실전 전략 (2) | 2025.06.13 |
| Spring WebClient 체인 구조와 Mockito를 활용한 테스트 전략 정리 (4) | 2025.06.12 |
| JUnit5 + Mockito로 Java 테스트 커버리지 100% 달성하는 법 (실전 사례 코드 포함) (4) | 2025.06.09 |
| 복합키 변경으로 다시 본 MyBatis와 쿼리 설계 – selectByExample을 선택하기까지 (2) | 2025.05.29 |