일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Collection
- thread
- Stack
- mysql
- Stream
- K8s
- Java
- Real MySQL
- 스트림
- spring
- redis
- jvm
- 자바 ORM 표준 JPA 프로그래밍
- 보조스트림
- gradle
- JPA
- 자바
- 토비의 스프링
- 스프링
- GC
- 토비의 스프링 정리
- 쿠버네티스
- IntellJ
- OS
- list
- 백준
- MSA
- SpringBoot
- Kotlin
- 이스티오
- Today
- Total
인생을 코딩하다.
[Spring] Profile 본문
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로 정의해두고 각 환경에 맞게 갈아낄 예정입니다.
'Spring' 카테고리의 다른 글
[Spring] 세션 불일치 문제가 발생하는 이유와 세션 불일치를 해결하는 법 (8) | 2021.06.16 |
---|---|
[Spring] log4j, Lockback, log4j2 프로젝트에 무엇을 적용하는게 좋을까? (0) | 2021.06.13 |
[토비의 스프링 3장 정리] 템플릿 (0) | 2021.06.04 |
[토비의 스프링 2장 정리] 테스트 (0) | 2021.06.04 |
[토비의 스프링 1장 정리] 오브젝트와 의존관계 (0) | 2021.06.04 |