일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- nginx https 설정
- ssl 인증서 발급받기
- ec2 ssh unprotected private key file
- arbitrum sepolia eth
- git switch
- Logback
- javascript 정렬
- 아비트럼 새폴리아 이더 받는법
- Linux oh my zsh
- javascript scope
- linux foreground
- git 기본 에디터
- Linux 디렉터리 역할
- EC2 Apache2
- git branch
- EC2 oh my zsh
- Linux 디렉터리 구조
- Navigation Pattern
- EC2 zsh
- UNPROTECTED PRIVATE KEY FILE
- EC2 HTTP 호스팅
- HTTP Web Server
- git 계정 설정
- Linux apt
- linux background
- Linux apt-get
- 서버의 서비스 방식
- AWS EC2 서버 만들기
- Git 브랜치
- GIT
Archives
- Today
- Total
HyunJun 기술 블로그
스프링 프레임워크 Local, Dev, Prod 환경 구성하기 본문
728x90
1. Local, Dev, Prod 환경 구성하기
실제로 개발 및 서비스 중인 많은 서비스의 경우 아래와 같은 이유들로 인해, Local(내부 로컬 환경), Dev(개발 환경), Prod(운영 환경) 환경을 나누어서 개발을 하게 됩니다.
- 로컬에서 테스트를 하다가 실제 운영 중인 Database의 Table을 삭제하거나 Data의 Update가 일어난다면?
- Prod 환경 하나만을 사용하는 환경이라고 가정하고 CI/CD가 적용되어 있는데 Local 환경에서 실수로 푸쉬한 경우?
- 하나의 설정 파일만 가지고 사용한다면 Local, Dev, Prod 전환 시에 설정 파일을 계속 변경해 주어야 한다.
2. 분리 계획하기
- Local, Dev, Prod 간의 다르게 구성해야 할 점은 무엇일까?
- -> Database 정보(datasource), Port 번호 정도로 간단하게 있다고 가정해 보자.
- 그렇다면 스프링 프레임워크에서 위의 정보를 다르게 구성하려면 어떻게 해야 할까?
- -> properties 혹은 yml 파일로 컨트롤해 주면 된다.
3. 파일 구성하기
- 협업을 하는 과정이라고 가정하고 DB 정보는 개인만이 보관하고, application.yml, dev.yml, local.yml, prod.yml만을 공유하는 상황이라고 가정하겠습니다.
- 이렇게 가정할 경우 DB 정보를 개인이 관리할 수 있어 보안에 좋고, 실 서버가 아닌 단순 프로젝트인 경우 개개인의 데이터베이스 서버를 따로 운영할 수 있다는 장점이 있습니다.
- 또한 중요 정보를 dev, local, prod에서 숨길 수 있기 때문에 해당 3개 파일을 공유 가능합니다.
4. 구현하기
application.yml
# Local(로컬 환경, default), Dev(개발 환경), Prod(운영 환경)
# ex))))) java -jar test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# 기본값은 local 프로필으로 설정
spring:
profiles:
default: local
---
spring:
config:
activate:
on-profile: local, dev, prod
- default: local 빌드, 프로젝트 실행 시 프로필을 설정하지 않는다면 기본 local 프로필로 동작시킨다.
- on-profile: local, dev, prod로 application-local.yml.... 들을 프로필로 등록한다
- java -jar test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod와 같이 프로젝트 실행 시에 환경설정을 해줄 수 있다.
application-local.yml
server:
port: 8080
spring:
config:
import: classpath:application-db.yml
banner:
location: banner-local.txt
datasource:
url: ${local-db.url}
username: ${local-db.username}
password: ${local-db.password}
jpa:
hibernate:
ddl-auto: update
- port: 8080 local 환경의 port는 8080으로 설정한다.
- import: ${local-db.url}과 같은 db 정보를 참조하기 위해 import: classpath:application-db.yml을 입력한다.
- location: 프로젝트 실행 시 어느 환경인지 확인하기 위해 터미널에 텍스트 배너 파일을 띄워준다.
- datasource: import: classpath:application-db.yml의 datasource 정보를 참조하여 값을 가지고 온다.
application-dev.yml
server:
port: 8080
spring:
config:
import: classpath:application-db.yml
banner:
location: banner-dev.txt
datasource:
url: ${dev-db.url}
username: ${dev-db.username}
password: ${dev-db.password}
jpa:
hibernate:
ddl-auto: validate
application-prod.yml
server:
port: 8080
spring:
config:
import: classpath:application-db.yml
banner:
location: banner-prod.txt
datasource:
url: ${prod-db.url}
username: ${prod-db.username}
password: ${prod-db.password}
jpa:
hibernate:
ddl-auto: validate
마지막으로 개인이 보관할 db 정보가 담긴 application-db.yml 파일을 작성한다.
# 각 환경마다 사용할 Datasource 값 설정
local-db:
url: jdbc:mysql://비밀url:3306/test-local
username: admin
password: 비밀번호
dev-db:
url: jdbc:mysql://비밀url:3306/test-dev
username: admin
password: 비밀번호
prod-db:
url: jdbc:mysql://비밀url:3306/test-prod
username: admin
password: 비밀번호
5. 실행하기
728x90
Comments