인생을 코딩하다.

[Spring] Profile 본문

Spring

[Spring] Profile

Hyung1 2021. 6. 9. 04:00
728x90
반응형

application.yml에 아래 로직을 다 구현했다고 가정해봅시다.

// application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql: 
    username: 
    password:

  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        format_sql: true

logging.level:
  org.hibernate.SQL: debug

default Profile만 쓰면 어떤 문제점이 있을까요??

아무런 테스트 없이 바로 개발서버, 실서버에 서비스를 배포하게 된다면 예기치 못한 장애와 버그들이 생길 수 있습니다.

 

예상치 못한 실수 등의 예를 하나 들자면, create-drop등의 옵션 등을 실수로 삭제하지 않아서 다시 생성되면 안되는 시점에 다시 생성되서 기존 데이터가 전부 날라가는 일등의 일이 일어날 수 있겠죠.

 

위의 문제점 말고도 여러분이 설정한 것들에 따라 여러 실수들이 발생할 수도 있습니다.

 

위와 같은 문제를 해결하기 위해

// application.yml

# default profiles
spring:
  profiles:
    active: local

// 개발 단계라면 active: dev
// application-local.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql: 
    username: 
    password:

  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        format_sql: true

logging.level:
  org.hibernate.SQL: debug

위와 같이 Profile 분리해 줍니다.

 

실제 서비스를 만들때는 보통 로컬 - 개발 - 운용의 단계를 갖습니다.

 

그래서 profile을 

  • 로컬에서 개발하는 profile
  • 실제 서비스가 운용되는 실서비스 전 개발 서버에 배포를 하기위한 profile
  • 실제 서비스가 돌아가는 운용 profile

로 분리하여 로컬 단계가 아닌 개발 단계에서는 개발 profile로 바꾸어 사용히여 위에서 말한 예기치 못한 장애와 버그가 생기는 문제점들을 예방할 수 있습니다.

 

추가로 각 환경에 따라 default profile을 번거롭게 수정하는 일 없이 각 환경의 profile 부품화하여 갈아낄 수 있는 다형성이 적용되기 때문에 유지보수하는 비용이 절감되는 장점도 있습니다.

 

현재 위의 분리해놓은 Profile에서는 local이라는 명시적인 네이밍을 사용하고 local 환경만의 DB나 환경설정들을 사용하고 있습니다.

 

현재는 local로 설정해두고 추 후 다른 개발, 운용 단계가 되었을때, 로컬 환경에서와 다른 DB나 환경설정이 필요하다면 미리 profile로 정의해두고 각 환경에 맞게 갈아낄 예정입니다.

 

 

 

 

728x90
반응형
Comments