개발 낙서장

[TIL] 내일배움캠프 54일차 - 설정 파일 분리 본문

Java/Sparta

[TIL] 내일배움캠프 54일차 - 설정 파일 분리

권승준 2024. 3. 14. 22:48

오늘의 학습 키워드📚

AWS EC2에 Spring 프로젝트 배포

https://velog.io/@s0nnyday/AWS-EC2-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%97%B0%EA%B2%B0#11-git-bash-%EB%A1%9C-ec2-%EC%97%B0%EA%B2%B0

 

[AWS-EC2] 배포-SSH프로토콜(1): Jar빌드 후 EC2로 복사, 실행

[AWS] [EC2 연결] [Spring Boot 프로젝트] [jar빌드]

velog.io

https://dhun.tistory.com/8

 

[Spring Boot] AWS에 프로젝트 배포하기(EC2, FileZilla)

1. AWS EC2에 들어가서 인스턴스 시작 클릭 2. 인스턴스 이름 입력하고, OS는 Ubuntu 18.04 버전으로 선택 3. 인스턴스 유형은 t2.micro이고, 새 키 페어 생성 후 인스턴스 시작 4. 인스턴스 클릭해서 보안

dhun.tistory.com

해당 글들을 참고해 jar 파일을 만들어 파일질라로 Ec2 환경에 jar을 업로드하는 것까진 성공했다.

문제는 그 다음이다

AWS DB 설정

DB 설정도 따로 해줘야 한다는 것을 몰랐다...
기존엔 로컬에 DB를 만들고 거기에서 작업을 했었는데 서버에 배포를 하면 서버 DB가 따로 필요했다.
다행히도 AWS에 RDS를 관리하는 기능이 있어서 여기서 DB를 만들었다.

배포 환경과 개발 환경 properties 분리

문제는 여기서 발생했다. 개발 환경 DB와 배포 환경 DB가 달라야 하기에 설정을 바꿔줘야 했는데
해당 설정은 application.properties에서 관리하고 있었다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/todo
spring.datasource.username=???
spring.datasource.password=???

spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true

jwt.secret.key=???

근데 서버 DB와 로컬 DB는 엔드포인트도 다르고 username, password 다 다르기 때문에 구분해줘야 했다.

방법은 application-???.properties 파일을 만들어 각 환경마다 설정을 달리 해주면 되는 것이었다.
aws 배포 환경에서 설정을 해줘야 하므로 application-aws.properties 라고 명명했다.

spring.datasource.url=jdbc:mysql://todo.???.com:3306/todo
spring.datasource.username=???
spring.datasource.password=???

관련 기본 설정을 해주고 메인 application.properties에서 키워드? 설정을 해주어야 한다.

spring.profiles.active=aws # AWS 환경일 경우

만약 다른 여러 파일이 생긴다면 저 aws 부분을 수정해 빌드하면 된다.

이후 빌드한 jar 파일을 업로드하고 서비스를 시작해주면 되는데 해당 프로파일을 지정해 시작해야 한다.

java -jar MyTodo-0.0.1-SNAPSHOT.jar --spring.profiles.active=aws

이렇게 하면 application.properties의 공통 설정을 로드하는데 해당 옵션에 따라 application-aws.properties의 설정도 로드하면서 겹치는 부분은 aws 값으로 덮어쓰기 된다.

이렇게 하면 개발 환경과 배포 환경을 확실히 구분할 수 있으면서 매번 설정 값을 바꾸는 번거로움이 없다.

참고로 application.properties에 username이나 엔드포인트, jwt.secret.key 등의 정보들까지도 전부 로컬과 배포 등 여러 환경으로 나누고 싶다면 application-local.properties 파일에 설정 값을 넣고

./gradlew bootRun --args='--spring.profiles.active=local'

터미널에 해당 명령어로 실행하면 설정에 따라 서버가 구동된다.


오늘의 회고💬

배포는 처음이어서 정말 많이 헤맨 것 같다. 힘들었는데 그래도 배포에 성공해서 기쁘다!

 

내일의 계획📜

진짜 마지막 리팩토링을 하고 우선 개인 과제를 마무리해야겠다.

Comments