Spring Boot에서 환경별 설정 분리와 SLF4J/Logback 로깅 시스템을 실무 기준으로 정리한다.
src/main/resources/
├── application.yml # 기본 + active 지정
├── application-local.yml # 로컬 개발
├── application-dev.yml # 개발 서버
└── application-prod.yml # 운영 서버 (gitignore)
spring:
profiles:
active: local # 기본 환경
jpa:
show-sql: true
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
logging:
level:
com.beyond: DEBUG
spring:
datasource:
url: jdbc:mysql://prod-db:3306/board_prod
username: ${DB_USER}
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: validate
logging:
level:
com.beyond: INFO
실행 방법
# local (기본)
mvn spring-boot:run
# prod
mvn spring-boot:run -Dspring.profiles.active=prod
내 실습 프로젝트의 경우 local과 prod로 분리하였다. (*prod는 반드시 gitignore 처리)
SLF4J (인터페이스) → Logback (구현체) → 콘솔/파일
@Slf4j
@Service
public class AuthorService {
public Author login(String email) {
log.debug("로그인 시도: {}", email);
log.info("로그인 성공");
return authorRepository.findByEmail(email);
}
}
local: DEBUG (개발용)
dev: INFO
prod: INFO/ERROR (운영 기본)
logging:
level:
root: DEBUG
com.beyond.basic: DEBUG
org.hibernate.SQL: TRACE # 쿼리 로그
pattern:
console: "%d{HH:mm:ss} [%thread] %-5level %logger{30} - %msg%n"
logging:
level:
root: INFO # INFO 이상만 출력
com.beyond: INFO
| 환경 | DB | DDL | 로그레벨 | Git |
|---|---|---|---|---|
| local | H2 | create-drop | DEBUG | O |
| dev | MySQL dev | validate | INFO | O |
| prod | MySQL prod | validate | INFO | X (gitignore) |
12:34:56 [http-nio-8080-exec-1] DEBUG c.b.b.author.AuthorService - 로그인 시도: admin@naver.com
12:34:56 [http-nio-8080-exec-1] TRACE o.h.SQL - select * from author where email=?
12:34:56 [http-nio-8080-exec-1] INFO c.b.b.author.AuthorService - 로그인 성공

12:34:56 [http-nio-8080-exec-1] INFO c.b.b.author.AuthorService - 로그인 성공

환경 분리
- application-{local/dev/prod}.yml
- active: local (기본값 설정)
- prod는 gitignore 필수
로그 관리
- @Slf4j → log.debug/info/error()
- local: DEBUG, prod: INFO 레벨
- {} 파라미터로 안전 출력
환경별 설정 + 로그 레벨 분리로 개발/운영 완벽 분리 완료.