[카테고리:] Uncategorized

  • Spring Boot application.properties – 핵심 설정 모음 가이드

    Spring Boot application.properties 완전 정복 — 실무 핵심 설정 모음

    Spring Boot로 프로젝트를 시작할 때, 가장 먼저 마주치는 파일이 바로 application.properties입니다. 설정 하나 잘못 건드렸다가 서버가 안 뜨거나, DB 연결이 끊기거나, 로그가 쏟아지는 경험 한 번쯤 해보셨죠? 이 글에서는 실무에서 자주 쓰는 핵심 설정들을 한 곳에 정리했습니다. 초보자도 바로 복사해서 쓸 수 있도록 예시 코드와 함께 설명해드릴게요.


    1. application.properties란 무엇인가요?

    application.properties는 Spring Boot 애플리케이션의 동작 방식을 제어하는 설정 파일입니다. 쉽게 말해, “이 앱은 몇 번 포트에서 실행할 건지”, “어떤 DB에 붙을 건지”, “로그는 얼마나 자세히 남길 건지” 같은 것들을 이 파일 하나로 조정할 수 있어요.

    Spring Boot는 이 파일을 프로젝트 시작 시점에 자동으로 읽어들이기 때문에, 코드를 수정하지 않고도 동작을 바꿀 수 있다는 게 가장 큰 장점입니다. 파일 위치는 보통 src/main/resources/application.properties입니다.

    비슷한 역할을 하는 application.yml도 있는데, 둘의 차이는 표기 형식입니다. .propertieskey=value 형식으로 단순하고 직관적이며, .yml은 들여쓰기 기반의 계층 구조로 복잡한 설정을 표현하기에 유리합니다. 이 글에서는 .properties 형식을 기준으로 설명합니다.


    2. 서버 기본 설정 — 포트와 컨텍스트 경로

    가장 자주 바꾸는 설정 중 하나가 바로 서버 포트입니다. Spring Boot는 기본적으로 8080 포트를 사용하지만, 다른 서비스와 충돌이 날 때는 포트를 바꿔야 하죠.

    properties

    # 서버 포트 설정
    server.port=8080
    
    # 컨텍스트 패스 설정 (예: http://localhost:8080/api)
    server.servlet.context-path=/api
    
    # 서버 연결 타임아웃 (밀리초 단위)
    server.connection-timeout=20000
    
    # Tomcat 최대 스레드 수
    server.tomcat.max-threads=200
    
    # HTTP 요청 최대 헤더 크기
    server.max-http-header-size=8KB

    포트를 0으로 설정하면 Spring Boot가 사용 가능한 포트를 자동으로 골라줍니다. 테스트 환경에서 포트 충돌을 피하고 싶을 때 유용한 팁이에요.

    컨텍스트 패스를 /api로 설정하면 모든 엔드포인트 앞에 /api가 붙게 됩니다. 예를 들어 기존에 http://localhost:8080/users이던 주소가 http://localhost:8080/api/users로 바뀝니다. API 서버를 구성할 때 자주 쓰는 패턴입니다.


    3. 데이터베이스 연결 설정 — MySQL, PostgreSQL, H2

    실무 프로젝트에서 DB 설정은 빠질 수 없습니다. application.properties에서 데이터소스를 설정하는 방법을 DB별로 정리해드릴게요.

    MySQL 연결 설정

    properties

    spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    spring.datasource.username=root
    spring.datasource.password=yourpassword
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

    PostgreSQL 연결 설정

    properties

    spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
    spring.datasource.username=postgres
    spring.datasource.password=yourpassword
    spring.datasource.driver-class-name=org.postgresql.Driver

    H2 인메모리 DB (개발/테스트용)

    properties

    spring.datasource.url=jdbc:h2:mem:testdb
    spring.datasource.driver-class-name=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    
    # H2 콘솔 활성화 (브라우저에서 DB 조회 가능)
    spring.h2.console.enabled=true
    spring.h2.console.path=/h2-console

    H2 콘솔을 활성화하면 브라우저에서 http://localhost:8080/h2-console에 접속해 SQL을 직접 실행해볼 수 있어서 개발 초기에 매우 편리합니다. 단, 운영 환경에서는 반드시 비활성화해야 합니다.


    4. JPA / Hibernate 설정 — DDL과 SQL 출력 옵션

    Spring Boot에서 JPA(Java Persistence API)를 쓴다면 아래 설정들이 핵심입니다.

    properties

    # DDL 자동 처리 전략
    # none | validate | update | create | create-drop
    spring.jpa.hibernate.ddl-auto=update
    
    # SQL 콘솔 출력 여부
    spring.jpa.show-sql=true
    
    # SQL 포맷팅 (들여쓰기 적용)
    spring.jpa.properties.hibernate.format_sql=true
    
    # Hibernate 방언 설정 (DB 종류에 맞게)
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
    
    # 지연 로딩 관련 (Open Session In View)
    spring.jpa.open-in-view=false

    ddl-auto 옵션은 매우 중요합니다. 각 값의 의미를 정확히 알고 써야 해요.

    옵션설명추천 환경
    none아무것도 하지 않음운영
    validate엔티티와 테이블 구조 검증만운영
    update변경된 부분만 반영개발
    create시작 시 테이블 새로 생성개발/테스트
    create-drop시작 시 생성, 종료 시 삭제테스트

    운영 환경에서 createcreate-drop을 쓰면 데이터가 전부 날아갑니다. 꼭 none 또는 validate를 사용하세요.

    spring.jpa.open-in-view=false로 설정하는 것도 권장됩니다. 기본값이 true인데, 트랜잭션 범위 밖에서 쿼리가 실행되는 문제를 막기 위해 false로 바꾸는 게 좋은 습관입니다.


    5. 로깅 설정 — 레벨과 파일 출력

    로그 설정은 디버깅의 핵심입니다. 너무 적으면 문제 파악이 안 되고, 너무 많으면 로그 파일이 터집니다. 적절히 조절하는 방법을 알아볼게요.

    properties

    # 전체 로그 레벨 설정
    logging.level.root=INFO
    
    # 특정 패키지만 DEBUG로 설정
    logging.level.com.example.myapp=DEBUG
    
    # Spring Security 로그 (인증 문제 디버깅 시)
    logging.level.org.springframework.security=DEBUG
    
    # SQL 파라미터 값 출력 (Hibernate)
    logging.level.org.hibernate.type.descriptor.sql=TRACE
    
    # 로그 파일 경로
    logging.file.name=logs/application.log
    
    # 로그 파일 최대 크기
    logging.logback.rollingpolicy.max-file-size=10MB
    
    # 로그 파일 보관 기간 (일)
    logging.logback.rollingpolicy.max-history=30

    로그 레벨은 TRACE → DEBUG → INFO → WARN → ERROR 순서로 점점 덜 자세해집니다. 개발 중에는 DEBUG, 운영 중에는 INFO 또는 WARN을 많이 씁니다.

    특정 패키지만 로그 레벨을 따로 지정할 수 있어서, 내가 만든 코드(com.example.myapp)는 DEBUG로, 스프링 내부 코드는 INFO로 설정하는 식으로 깔끔하게 관리할 수 있습니다.


    6. 프로파일 설정 — 개발/운영 환경 분리

    실무에서는 개발 환경(dev)과 운영 환경(prod)의 설정이 다를 때가 많습니다. Spring Boot는 프로파일(Profile) 기능으로 이를 깔끔하게 분리할 수 있어요.

    기본 설정 파일 구조

    src/main/resources/
    ├── application.properties        ← 공통 설정
    ├── application-dev.properties    ← 개발 환경 설정
    └── application-prod.properties   ← 운영 환경 설정

    application.properties (공통)

    properties

    spring.application.name=my-spring-app
    
    # 활성화할 프로파일 지정
    spring.profiles.active=dev

    application-dev.properties

    properties

    server.port=8080
    spring.datasource.url=jdbc:h2:mem:devdb
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.show-sql=true
    logging.level.root=DEBUG

    application-prod.properties

    properties

    server.port=80
    spring.datasource.url=jdbc:mysql://prod-server:3306/proddb
    spring.jpa.hibernate.ddl-auto=validate
    spring.jpa.show-sql=false
    logging.level.root=WARN

    운영 서버에 배포할 때는 spring.profiles.active=prod로 바꾸거나, 실행 명령어에 -Dspring.profiles.active=prod 옵션을 추가하면 됩니다. 민감한 운영 DB 비밀번호는 환경변수로 주입하는 방식도 함께 고려해보세요.


    7. 그 외 자주 쓰는 설정 모음

    마지막으로 실무에서 종종 필요한 기타 설정들을 정리했습니다.

    Spring MVC / 인코딩 설정

    properties

    # 응답 인코딩
    server.servlet.encoding.charset=UTF-8
    server.servlet.encoding.enabled=true
    server.servlet.encoding.force=true
    
    # 날짜 포맷 (JSON 응답)
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone=Asia/Seoul

    파일 업로드 설정

    properties

    # 파일 업로드 활성화
    spring.servlet.multipart.enabled=true
    
    # 단일 파일 최대 크기
    spring.servlet.multipart.max-file-size=10MB
    
    # 요청 전체 최대 크기
    spring.servlet.multipart.max-request-size=50MB

    Spring Actuator (모니터링)

    properties

    # 모든 엔드포인트 노출
    management.endpoints.web.exposure.include=*
    
    # 특정 엔드포인트만 노출 (권장)
    management.endpoints.web.exposure.include=health,info,metrics
    
    # Actuator 경로 변경
    management.endpoints.web.base-path=/actuator

    Thymeleaf 설정 (템플릿 엔진)

    properties

    # 캐시 비활성화 (개발 시 자동 반영)
    spring.thymeleaf.cache=false
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html

    결론 — application.properties, 이제 두렵지 않죠?

    application.properties는 Spring Boot 프로젝트의 심장부와 같습니다. 서버 포트, DB 연결, JPA 전략, 로깅 레벨, 프로파일 분리까지 — 이 파일 하나로 애플리케이션의 거의 모든 동작을 제어할 수 있어요.

    오늘 다룬 내용을 간단히 요약하면 이렇습니다.

    • 서버 설정: 포트, 컨텍스트 패스, Tomcat 튜닝
    • DB 설정: MySQL, PostgreSQL, H2 각각의 연결 방법
    • JPA 설정: ddl-auto 옵션을 환경에 맞게 신중하게 선택
    • 로깅 설정: 패키지별 레벨 조절과 파일 출력
    • 프로파일 분리: 개발과 운영 환경을 파일로 깔끔하게 나누기

    지금 당장 여러분의 application.properties 파일을 열어서, 불필요한 설정은 정리하고 빠진 설정은 채워보세요. 작은 설정 하나가 성능과 안정성에 큰 차이를 만들어냅니다.

  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!