티스토리 뷰
개발자가 개발한 기능들을 상용에 배포하기전에 개발 및 QA서버에서 테스트를 하고 정상적으로 문제가 없으면 상용에 배포하게된다.
이때 내가 개발한 코드들을 개발, QA, 상용서버에 배포할때 일일이 각 DB접속정보 및 외부데이터 (프로퍼티에 있는값)들을 서버마다 맞게 변경을 해야하는 번거로움이 있는데
Spring에서는 Profile이란걸 제공해주는데 이 Profile만 설정해두면 원하는 데이터를 원하는 환경에 맞게 배포할수 있게 해준다. 예제코드와 함께 알아보자.
환경별 프로퍼티 세팅
환경마다 다른값들은 (ex: DB정보, 파일경로 등) 프로퍼티 파일에 두고 JAVA에서 해당프로퍼티를 불러오게끔 쓰이는데
그중에 'spring.profiles' 라는 속성에 Profile을 각각 local, dev, prod로 해두자. 'spring.profiles.active' 속성은
해당 프로젝트의 default Profile이다.
참고로 Spring Boot 프로젝트를 생성하게되면 기본적으로 application.properties파일이 생성되는데 필자가 yml파일로 하게된 이유는 .propeties로 하게되면 환경별로 파일을 만들어줘야 하지만 yml같은경우 한 파일에 멀티환경구성이 가능하기 때문에 yml으로 했다.
application.properties 파일 우클릭 -> Convert .properties to .yml 을 클릭하면 yml파일로 변환된다.
application.yml 파일에 대한 사용법은 여기에선 다루지 않는다.
Profile 값 조회
정상적으로 조회가 되었다.
Spring에서는 또 하나의 기능을 제공해주는게 있는데 바로 Profile별로 Bean을 생성할 수 있다. 예제코드를 보자
ProfileManager interface 생성
개발환경별 ProfileManager 구현클래스 생성
local, dev, prod환경용 Bean들을 생성하였다. 프로젝트를 jar나 war로 배포하게 되면 각 환경별로 정의된
Bean 클래스가 동작한다. @Profile 어노테이션을 선언해주고 어노테이션 인자에 Profile 값을 넣어주면 된다.
ProfileManager 테스트
정상적으로 각 Profile별로 Bean들이 주입되는걸 확인할 수 있다.
배포
local, dev, prod 각 환경별로 동작되는지 확인되었다. 이제는 각 환경별로 배포를 진행해보자.
pom.xml상단에 < packaging >jar</ packaging > 추가하고 프로젝트 마우스 우클릭 -> Run as -> Maven build.. 클릭
Goals 입력란에 'clean package' 입력 ( maven compile전 한번 clean한 후 compile )
혹시 위와같은 에러가 발생한다면 pom.xml에 < scope > test </ scope > 인 부분을 모조리 제거후
Maven Compile 하는화면 중앙에 체크박스 리스트중 'Skip Tests' 를 클릭하고 compile 하자
정상적으로 해당프로젝트 build 하였다.
테스트를 위해 application.yml 파일에 'dev'와 'prod'에 각각 테스트용 디비접속정보를 세팅해두었다.
dev, prod디비에 테스트 데이터도 넣어두었다.
java -jar -Dspring.profiles.active=dev jar파일명.jar 명령어로 build된 jar파일을 실행해보자
그럼 profile이 dev로 실행된걸 확인할 수 있다.
정상적으로 dev에 배포되었다.
'Spring' 카테고리의 다른 글
[Spring] - Model 과 HttpSession에 데이터를 저장할 때 주의점 (6) | 2021.03.26 |
---|---|
[Spring] - DI (Dependency Injection) 동작원리 간단히 파헤치기 (7) | 2021.03.15 |
[Spring] - 게시판 목록의 No값(주로PK값)을 순번으로 나타내기 (0) | 2021.02.12 |
[Spring] - AccessDeniedHandler VS AuthenticationEntryPoint (0) | 2021.02.02 |
[Spring] - Spring Security의 Remember-me(자동로그인) 동작원리 및 구현시 주의사항 (0) | 2021.01.26 |