- SpringBoot2로 Rest api 만들기(1) – Intellij Community 프로젝트생성
- SpringBoot2로 Rest api 만들기(2) – HelloWorld
- SpringBoot2로 Rest api 만들기(3) – H2 Database 연동
- SpringBoot2로 Rest api 만들기(4) – Swagger API 문서 자동화
- SpringBoot2로 Rest api 만들기(5) – API 인터페이스 및 결과 데이터 구조 설계
- SpringBoot2로 Rest api 만들기(6) – ControllerAdvice를 이용한 Exception처리
- SpringBoot2로 Rest api 만들기(7) – MessageSource를 이용한 Exception 처리
- SpringBoot2로 Rest api 만들기(8) – SpringSecurity 를 이용한 인증 및 권한부여
- SpringBoot2로 Rest api 만들기(9) – Spring Starter Unit Test
- SpringBoot2로 Rest api 만들기(10) – Social Login kakao
- SpringBoot2로 Rest api 만들기(11) – profile을 이용한 환경별 설정 분리
- SpringBoot2로 Rest api 만들기(12) – Deploy & Nginx 연동 & 무중단 배포 하기
- SpringBoot2로 Rest api 만들기(13) – Jenkins 배포(Deploy) + Git Tag Rollback
- SpringBoot2로 Rest api 만들기(14) – 간단한 JPA 게시판(board) 만들기
- SpringBoot2로 Rest api 만들기(15) – Redis로 api 결과 캐싱(Caching)처리
- SpringBoot2로 Rest api 만들기(16) – AOP와 Custom Annotation을 이용한 금칙어(Forbidden Word) 처리
이번장에서는 기존에 단일 파일로 관리되던 스프링 설정을 서버 환경에 따라 다르게 적용되도록 개선해보겠습니다.
환경별 application.yml의 분리
/resources 아래에 application.yml을 복사하여 application-alpha.yml, application-local.yml 두개를 더 만듭니다. 개발 환경에 따라 beta, service등이 더 있을수 있지만, 실습에서는 2개의 환경만 만들도록 하겠습니다.
스프링에서는 이렇게 파일을 분리하고 서버 실행 옵션에 profile을 설정하면 지정된 환경으로 서버를 시작할 수 있습니다.
기존의 application.yml에는 모든 환경에 공통으로 들어가는 설정을 넣습니다. 유심히 볼점은 spring.profiles.active: local 인데 스프링 서버 실행시 profile을 지정하지 않으면 application-local.yml을 기본 설정으로 서버가 실행됩니다.
# application.yml spring: profiles: active: local # 디폴트 환경 messages: basename: i18n/exception encoding: UTF-8 social: kakao: client_id: XXXXXXXXXXXXXXXXXXXXXXXXXX # 앱생성시 받은 REST API 키 redirect: /social/login/kakao url: login: https://kauth.kakao.com/oauth/authorize token: https://kauth.kakao.com/oauth/token profile: https://kapi.kakao.com/v2/user/me jwt: secret: govlepel@$&
아래는 로컬 환경의 설정 파일입니다.
logging을 추가하여 com.rest.api package 하위의 로그는 debug level 이상일때 출력되도록 합니다. 나머지에 위치한 로그들은 warn level 이상이어야 출력됩니다. spring.profiles:local은 해당 yml이 local 환경임을 표시합니다. 다른 설정은 기존과 동일합니다.
# application-local.yml logging: level: root: warn com.rest.api: debug spring: profiles: local datasource: url: jdbc:h2:tcp://localhost/~/test driver-class-name: org.h2.Driver username: sa jpa: database-platform: org.hibernate.dialect.H2Dialect properties.hibernate: hbm2ddl.auto: update format_sql: true showSql: true generate-ddl: true url: base: http://localhost:8080
아래는 알파 환경의 설정 파일입니다.
logging을 추가하여 com.rest.api package 하위의 로그는 info level 이상일때 출력되도록 합니다. 나머지 로그들은 warn level 이상이어야 출력됩니다.
또한 path를 지정하여 로그 파일(spring.log)이 /home/ec2-user/api/log 아래에 생성되도록 합니다. max-history를 지정하면 최근 로그 파일만 남고 과거 로그는 자동으로 지워집니다.
spring.profiles:alpha는 해당 yml이 alpha 환경임을 표시합니다. local 환경과는 달리 alpha에서는 mysql db를 사용하도록 세팅 한 것을 볼 수 있습니다. 또한 DDL을 허용하지 않도록 설정하여, 임의로 테이블이 생성되거나 변경되지 않도록 합니다.
# application-alpha.yml logging: level: root: warn com.rest.api: info path: /home/ec2-user/api/log file: max-history: 7 spring: profiles: alpha datasource: url: jdbc:mysql://127.0.0.1:33060/daddyprogrammer?useUnicode=true&autoReconnect=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false driver-class-name: com.mysql.cj.jdbc.Driver username: happydaddy password: daddy!@#1004 jpa: database-platform: org.hibernate.dialect.MySQL5InnoDBDialect properties.hibernate: hbm2ddl.auto: none format_sql: true showSql: true generate-ddl: false url: base: http://alpha.daddyprogrammer.org
Intellij에서 서버 실행시 환경 적용
다음과 같이 Edit Configuraion을 눌러 서버 설정 화면으로 들어갑니다.
하단의 Active profiles라는 항목에 local이나 alpha를 적고 서버를 실행하면 해당 profile에 해당하는 환경설정 yml이 적용됩니다.
Configurations 화면이 아래와 같을경우엔 VM options 항목에 -Dspring.profiles.active={환경}으로 profile을 지정하면 됩니다.
서버 실행시 환경 적용
실제 서버에서는 tomcat의 JVM 옵션 설정하는 부분이나 executable jar 실행시 옵션에 profile을 설정하면 됩니다. jar로 바로 실행하는 경우는 다음과 같이 -Dspring.profiles.active로 환경을 지정 하면 됩니다.
$ java -jar -Dspring.profiles.active=alpha api-0.0.1-SNAPSHOT.jar
최신 소스는 GitHub 사이트를 참고해 주세요.
https://github.com/codej99/SpringRestApi/tree/feature/seperate-profile
GitHub Repository를 import하여 Intellij 프로젝트를 구성하는 방법은 다음 포스팅을 참고해주세요.
Docker로 개발 환경을 빠르게 구축하는 것도 가능합니다. 다음 블로그 내용을 읽어보세요!
스프링 api 서버를 이용하여 웹사이트를 만들어보고 싶으시면 아래 포스팅을 참고해 주세요.