애플리케이션 설정 및 Security 구성 추가

뚜우웅이·2025년 3월 24일

캡스톤 디자인

목록 보기
3/35

프로젝트를 설정 시키기 위해서는 DB와 Security 등의 구성을 추가해야 한다.

DB 생성

H2


jdbc:h2:~/freemarket으로 초기 생성을 한 뒤 jdbc:h2:tcp://localhost/~/freemarket을 입력하여 접속해준다.

yml

application.yml

spring:
  profiles:
    active: dev # 기본적으로 dev 환경 사용 (개발 시)
    include: secret # secret 설정 포함

  # 공통 설정
  jpa:
    open-in-view: false
    properties:
      hibernate:
        format_sql: true

server:
  servlet:
    context-path: /
    encoding:
      charset: UTF-8
      force: true

logging:
  level:
    com.freemarket.freemarket: info
    
# JWT 설정 (시크릿 정보는 application-secret.yml에서 가져옴)
jwt:
  access-token-validity-in-seconds: 3600
  refresh-token-validity-in-seconds: 86400    
  • 기본적으로 개발(dev) 환경 프로필을 활성화한다. Spring Boot는 이 설정에 따라 application-dev.yml 파일의 설정을 우선적으로 적용한다.

  • open-in-view: false: OSIV(Open Session In View) 패턴을 비활성화한다. 성능 최적화를 위한 설정으로, 트랜잭션 범위 밖에서 지연 로딩이 발생하지 않도록 한다.

  • context-path: /: 애플리케이션의 기본 URL 경로를 루트('/')로 설정.

  • encoding: 서블릿 요청/응답의 인코딩 설정.

  • charset: UTF-8: 문자 인코딩을 UTF-8로 지정.
    force: true: 클라이언트가 다른 인코딩을 지정해도 UTF-8을 강제로 적용.

application-dev.yml

spring:
  config:
    activate:
      on-profile: dev

  # H2 데이터베이스 설정
  datasource:
    url: jdbc:h2:tcp://localhost/~/freemarket
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
        show_sql: true
    defer-datasource-initialization: true

  # H2 콘솔 활성화
  h2:
    console:
      enabled: true
      path: /h2-console # 콘솔 접근 URL 경로를 설정
      settings:
        web-allow-others: false # 로컬 머신에서만 콘솔에 접근할 수 있도록 제한

  # 개발 편의를 위한 DevTools 설정
  devtools:
    restart:
      enabled: true
    livereload:
      enabled: true

# 개발 환경 로깅 설정
logging:
  level:
    org.hibernate.SQL: debug
    org.hibernate.type.descriptor.sql.BasicBinder: trace
    com.example.shop: debug
    org.springframework.security: debug
  • 이 설정 파일은 dev 프로필이 활성화될 때만 적용된다.

application-prod.yml

spring:
  config:
    activate:
      on-profile: prod

  # MySQL 데이터베이스 설정 (시크릿 정보는 application-secret.yml에서 가져옴)
  datasource:
    url: jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database}?useSSL=true&serverTimezone=UTC&characterEncoding=UTF-8
    username: ${mysql.username}
    password: ${mysql.password}
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 10
      minimum-idle: 5
      connection-timeout: 30000

  jpa:
    hibernate:
      ddl-auto: validate  # 운영 환경에서는 validate 사용
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
        format_sql: false
        show_sql: false

  # 개발 도구 비활성화
  devtools:
    restart:
      enabled: false
    livereload:
      enabled: false

# 운영 환경 로깅 설정
logging:
  level:
    root: INFO
    com.example.shop: INFO

application-secret.yml

spring:
  config:
    activate:
      on-profile: secret

# MySQL 연결 정보 - 운영 환경용
mysql:
  host: localhost
  port: 3306
  database: name
  username: name
  password: password

# JWT 시크릿 키
jwt:
  secret: key

# 기타 민감한 정보들
api:
  payment:
    key: your_payment_gateway_api_key
    secret: your_payment_gateway_secret
  email:
    username: your_email_username
    password: your_email_password

secret 파일은 github에 올라가면 안 되는 민감 파일이기 때문에 ignore 설정을 해준다.

### Secret ###
/src/main/resources/application-secret.yml
profile
공부하는 초보 개발자

0개의 댓글