JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Spring

Spring Boot 설정 시스템 application.properties, application-dev.yml

lamarcK 2025. 6. 24. 21:14

📁 설정 파일

  • 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...
}