📁 설정 파일
application.properties
또는application.yml
- Spring Boot가 자동으로 인식하는 설정 파일
- 애플리케이션 시작 시 자동으로 로드됨
🔧 Spring Boot Auto Configuration
Spring Boot가 이 설정들을 보고 자동으로 Bean을 생성해준다.
# 이 설정을 보고...
spring.datasource.url=jdbc:sqlite:product.db
spring.datasource.driver-class-name=org.sqlite.JDBC
Spring Boot가 자동으로 해주는 일
// 이런 코드를 자동으로 생성해줌 (우리가 안 써도!)
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:sqlite:product.db");
dataSource.setDriverClassName("org.sqlite.JDBC");
return dataSource;
}
@Bean
public EntityManagerFactory entityManagerFactory() {
// JPA 설정도 자동으로...
}
🎯 전통적인 Spring vs Spring Boot
전통적인 Spring (복잡함)
<!-- 수동으로 모든 Bean 설정 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="jdbcUrl" value="jdbc:sqlite:product.db"/>
<property name="driverClassName" value="org.sqlite.JDBC"/>
</bean>
<bean id="entityManagerFactory" class="...">
<!-- 복잡한 JPA 설정들... -->
</bean>
Spring Boot (간단함)
# 이것만 쓰면 끝!
spring.datasource.url=jdbc:sqlite:product.db
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.hibernate.ddl-auto=update
🔍 실행 로그에서 확인
HikariPool-1 - Starting... # ← DataSource 자동 생성
Hibernate ORM core version 6.6.15 # ← JPA 자동 설정
Tomcat initialized with port 8080 # ← 웹서버 자동 설정
Spring Boot 설정 방법 🚀
기본 설정 파일 위치
src/main/resources/
├── application.properties # 또는
└── application.yml # 둘 중 하나 선택
주요 설정 항목들
📊 데이터베이스 설정
# H2 (메모리 DB - 개발용)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=1234
# SQLite
spring.datasource.url=jdbc:sqlite:product.db
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.hibernate.dialect=org.hibernate.community.dialect.SQLiteDialect
# PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=1234
🗄️ JPA/Hibernate 설정
# DDL 옵션
spring.jpa.hibernate.ddl-auto=create-drop # 앱 시작시 생성, 종료시 삭제
spring.jpa.hibernate.ddl-auto=create # 항상 새로 생성
spring.jpa.hibernate.ddl-auto=update # 변경사항만 반영
spring.jpa.hibernate.ddl-auto=validate # 스키마 검증만
spring.jpa.hibernate.ddl-auto=none # 아무것도 안함
# SQL 로깅
spring.jpa.show-sql=true # SQL 쿼리 출력
spring.jpa.properties.hibernate.format_sql=true # SQL 예쁘게 출력
logging.level.org.hibernate.SQL=DEBUG # SQL 로그 레벨
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE # 파라미터 값 출력
🌐 웹 서버 설정
# 포트 설정
server.port=8080
server.port=0 # 랜덤 포트
# 컨텍스트 패스
server.servlet.context-path=/api
# 세션 타임아웃
server.servlet.session.timeout=30m
# 최대 파일 업로드 크기
spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
🔧 Jackson (JSON) 설정
# 프로퍼티 네이밍 전략
spring.jackson.property-naming-strategy=SNAKE_CASE # camelCase → snake_case
spring.jackson.property-naming-strategy=KEBAB_CASE # camelCase → kebab-case
# 날짜 형식
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Seoul
# null 값 처리
spring.jackson.default-property-inclusion=NON_NULL # null 값 제외
📝 로깅 설정
# 로그 레벨
logging.level.root=INFO
logging.level.com.example.myapp=DEBUG
logging.level.org.springframework.web=DEBUG
# 로그 파일
logging.file.name=application.log
logging.file.path=/var/log
# 로그 패턴
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
프로파일별 설정
📁 파일 구조
src/main/resources/
├── application.properties # 공통 설정
├── application-dev.properties # 개발 환경
├── application-prod.properties # 운영 환경
└── application-test.properties # 테스트 환경
🎯 프로파일 활성화
# application.properties
spring.profiles.active=dev # dev 프로파일 활성화
또는 실행 시 지정:
java -jar myapp.jar --spring.profiles.active=prod
📋 프로파일별 설정 예시
application-dev.properties (개발환경)
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
logging.level.com.example=DEBUG
application-prod.properties (운영환경)
spring.datasource.url=jdbc:mysql://prod-server:3306/mydb
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=false
logging.level.root=WARN
YAML vs Properties 비교
Properties 형식
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
YAML 형식
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 1234
jpa:
hibernate:
ddl-auto: update
환경변수 사용
# 환경변수 참조
spring.datasource.url=${DB_URL:jdbc:h2:mem:testdb}
spring.datasource.username=${DB_USER:sa}
spring.datasource.password=${DB_PASSWORD:}
환경변수 설정:
export DB_URL=jdbc:mysql://localhost:3306/mydb
export DB_USER=root
export DB_PASSWORD=1234
커스텀 설정
# 내가 만든 설정
my.app.name=MyApplication
my.app.version=1.0.0
my.app.admin.email=admin@example.com
Java에서 사용:
@Value("${my.app.name}")
private String appName;
@ConfigurationProperties(prefix = "my.app")
@Component
public class AppProperties {
private String name;
private String version;
// getter, setter...
}
'Spring' 카테고리의 다른 글
🚨 Spring Boot 컴포넌트 스캔 범위 문제 트러블 슈팅 (2) | 2025.06.26 |
---|---|
스프링 부트 SQLite DB 연결 (0) | 2025.06.24 |
스프링에서 받을 데이터는 '명시적'이어야 한다. (0) | 2025.06.13 |
스프링 빈의 종류 : 스코프 (1) | 2025.06.10 |
인스턴스 생명 주기와 애너테이션 : 한눈에 보기 - 콜백 (1) | 2025.06.09 |