AWS EC2를 이용해 배포해보자 (4) - 배포를 위한 프로젝트 세팅

Suntory·2022년 4월 11일
10

AWS로 배포하기

목록 보기
4/6

지난 글에서 MySQL을 실행했으니, Springboot 프로젝트를 띄울 준비를 하겠습니다.


프로필 설정

프로젝트를 실행하기 전에 로컬 개발 환경과 배포 환경을 구분해줘야 합니다. 개발 환경에서 실제 운영 DB를 연동하여 테스트할수는 없기 때문입니다. 저는 springboot에서 제공하는 profile과 환경변수를 이용하여 분리해보겠습니다.

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:tcp://localhost/~/todo
    username: sa
    password:
  h2:
    console:
      path: /h2-console
      enabled: true
  sql:
    init:
      data-locations: classpath:sql/schema.sql
      mode: always

위는 기존의 application.yml 입니다. 현재는 h2 데이터베이스를 통해 테스트중인데, 이걸 직접 고쳐버리면 개발 환경과 배포 환경이 달라져 관리가 불편해집니다. 또한 운영 환경에 database 정보 등 민감한 정보를 담아야 합니다. 저도 늘 그런식으로 관리했었는데 리뷰를 통해 profile이라는 기능을 소개받아 적용해본 결과 괜찮아서 적어봅니다.

먼저, 개발 환경과 배포 환경에서 달라져야 할 datasource 부분을 분리하여 application-develop.yml을 작성해봅니다.

# application-develop.yml
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test
    username: sa
    password:
  h2:
    console:
      path: /h2-console
      enabled: true

그리고 기존 application.yml에는 profile을 명기해줍니다.

spring:
  profiles:
    active: ${profile}

이 때, profile 값을 환경변수로 설정하였는데, 각 환경에서 설정된 환경변수에 따라 프로필이 정해지게 됩니다.

그럼 이 profile 값이 로컬 개발환경에서 develop으로 정해지려면 IntelliJ에서 설정이 필요합니다.
실행 창을 누르면 이렇게 [Edit Configurations]가 나오는데, 여기서 환경변수를 설정해줍니다.

[Environment variables]에 profile=develop 을 선언해줍니다.

이러면 인텔리제이 상에서 실행하면 profile=develop으로 설정되어 개발 환경의 프로파일로 실행됩니다.

그리고 이제 운영 환경에 쓰여야 할 설정이 담긴 application-prod.yml 을 생성합니다.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${MYSQL_DATABASE_URL}
    username: ${MYSQL_DATABASE_USERNAME}
    password: ${MYSQL_DATABASE_PASSWORD}
  sql:
    init:
      schema-locations: classpath:schema.sql

여기에도 환경 변수로 db 설정 정보를 적어둡니다. 이 정보들은 github에 올라가면 안되기 때문에 gitignore 처리를 해줄 수도 있지만, 환경변수로 숨겨놓고 서버 내의 환경변수를 받아서 처리합니다.

서버에 환경 변수 설정하기

그럼 이제 ec2에 필요한 환경변수를 세팅합니다.
아래 명령어를 통하면 환경변수를 세팅해줄 수 있습니다.

$ export profile=prod

하지만 이 방법으로는 서버가 재시작되면 환경변수가 모두 초기화되는 단점이 있습니다.
그래서 .bashrc 파일에 필요한 환경변수를 선언하여 shell이 시작될 때마다 실행되도록 하는 방법을 사용합니다.

먼저 해당 파일을 엽니다.

$ vi ~/.bashrc

그리고 해당 파일의 맨 아래에 필요한 환경변수를 선언합니다.

export profile=prod
export MYSQL_DATABASE_URL={db 주소}
export MYSQL_DATABASE_USERNAME={username}
export MYSQL_DATABASE_PASSWORD={password}

그리고 환경변수를 적용하기 위해 아래 명령어를 실행합니다.

$ source ~/.bashrc
$ echo $profile

echo를 통해서 profile 값이 잘 등록되었는지 확인합니다.
이 상태에서 프로젝트를 실행시키면 yml에 아까 적어둔 환경 변수가 들어갑니다.


이제 배포 환경에서 springboot를 실행할 준비를 마쳤습니다. 이제 배포용 코드를 빌드하여 Springboot를 실행하기만 하면 됩니다. 하지만 ec2의 저사양 문제로 난관을 한번 거쳤는데 다음에 그 과정을 적어보도록 하겠습니다.

배포 시 참고용으로 작성된 글입니다. 잘못된 내용이나 보완이 필요한 내용은 언제든지 댓글 부탁드립니다 :)

profile
천천히, 하지만 꾸준히 그리고 열심히

3개의 댓글

comment-user-thumbnail
2022년 4월 12일

앗 선생님... 다음 편은 언제 나오나요??

1개의 답글
comment-user-thumbnail
2022년 4월 12일

산선생님 서버에 환경변수 설정하는거 찾아보고 있었는데 깔끔한 정리 감사합니다 ㅎㅎ

답글 달기