스프링부트에서 개발 환경에 따라 properties를 사용하는 방법입니다.
우선 properties란 무엇인지 알아보겠습니다.
.properties는 설정 파일입니다.
자바 응용프로그램 내에서 사용되는 설정과 관련된 변수들을 파일에다가 쓰고, 읽어오는 방식에 사용되는 파일입니다.
이 설정 파일은 외부에서 파일을 넣을 수도 있고, 프로젝트 내부적으로도 넣어서 사용할 수 있습니다.
위에서 말한 설정과 관련된 변수들은 문자열로 저장됩니다.
각 줄은 일반적으로 하나의 프로퍼티를 저장하며, 한 문자열은 key, value 쌍으로 저장됩니다.
줄의 맨 앞에 # 또는 ! 를 사용하여 주석처리를 할 수 있습니다.
위에 보이는 파일은 가장 기본이 되는 application.properties 파일로 스프링부트가 어플리케이션을 구동할 때 자동으로 로딩하는 파일입니다.
그렇다면 개발환경에 따라 properties를 다르게 사용하는 이유와 사용하는 방법은 어떻게 될까요?
실제 배포를 위한 프로젝트를 작업하며 application.properties, application-local.properties, application-dev.properties, application-prod.properties 등 여러게의 프로퍼티를 사용하였습니다.
개발을 하며 로컬 서버에서 구동할 때와 개발서버에서 구동할 때, 실 서버에서 구동할 경우 설정 변수 값이 다르게 적용되는 경우가 많은데, 이럴 때 개발환경에 따라 각각의 프로퍼티를 사용하면 다르게 사용되는 값들을 하나하나 다 바꿔주는 번거로운 일을 하지 않을 수 있습니다.
* 주의할 점으로는 새로 생성하는 properties는 application-{이름}.properties 라는 규칙을 따라야 한다는 점입니다.
가장 많이 접하게 되는 예시로는 로컬에서 테스트하는 database 접속 정보와 실서버에 이용하는 database 접속 정보가 다를 때입니다.
그 외에도 다른 api에 접근하는 경우 해당 api 역시 테스트 서버와 개발 서버, 실서버가 따로 있다면 해당되는 설정 변수 값이 다를 것입니다. 이럴 때 각각의 properties를 사용하게 됩니다.
프로퍼티는 다양한 사용 방법이 있지만 그중에서 제가 사용하는 @Value 어노테이션을 통해 사용하는 방법을 보겠습니다.
@Value 어노테이션은 org.springframework.beans.factory.annotation 패키지에 속해있습니다.
사용 방법은 @Value("${key}") 아래에 인스턴스를 정의하면 됩니다.
* 간혹 lombok의 @Value 어노테이션이 적용되어 해당 기능이 사용되지 않는 경우도 있습니다.
그렇다면 로컬, 개발, 실서버 각각의 환경에서 환경에 맞는 properties를 불러와서 사용하는 방법을 보겠습니다.
Intellij 내부에서 어플리케이션을 가동하는 경우 Edit Configurations에서 적용하여 사용할 수 있습니다.
active: local, oauth properties를 사용하여 어플리케이션이 구동되는 것을 볼 수 있습니다.
(기본 구동을 application-local.properties 로 구동하였고, application-oauth.properties 는 소셜 로그인 관련 설정 파일인데 include 하여 실행하도록 하였습니다. 해당 코드는 맨 위 이미지를 보면 확인할 수 있습니다.)
터미널을 통해 실행하는 방법입니다.
기본적으로 터미널을 통해 어플리케이션을 구동하는 명령어는 java -jar (어플리케이션 파일명).jar 입니다.
이때는 기본적으로 적용되는 application.properties 파일이 적용될 것입니다.
dev 또는 prod 프로퍼티를 사용하고 싶다면
java -jar -Dspring.profiles.active=prod (어플리케이션 파일명).jar 명령어를 통해 실행할 수 있습니다.
* java에서 사용되는 설정 파일은 properties 외에 보기에 편한 yml이라는 설정 파일도 많이 사용된다고 하니 다양한 사용방법을 알아두는 것도 좋을 것 같습니다.
'Programming > Spring Boot' 카테고리의 다른 글
IntelliJ Community version Spring Boot Project 생성하는 방법 (0) | 2021.08.10 |
---|---|
Spring MVC 프론트에서 컨트롤러로 input name 으로 값 여러개 전달하기 Ajax (0) | 2021.08.08 |
No auto configuration classes found in META-INF/spring.factories 오류 해결 (0) | 2021.07.27 |
Swagger 사용하여 RESTful API 문서 자동화하기 (SpringBoot) (0) | 2021.07.17 |
IntelliJ Spring Boot Project 배포를 위한 jar 파일 생성 (Maven) (4) | 2021.07.15 |