develop서버용 환경 구성하기.

luckygamza·2022년 1월 9일

로컬서버용 환경과 개발서버용 환경을 다르게 구성해야할 부분이 생겼다.
로컬은 현재 h2 DB로 연결되어 있는데, 개발서버는 mysql db에 연결되도록 구성하기로 하였다. 이를 위해 develop 서버에 mysql을 띄워놓고 develop서버용 설정프로파일을 만들었다.

1단계: develop서버에 docker 컨테이너로 mysql 띄워놓기.

docker로 띄우는 이유는 개발환경에서 쓰는 mysql이 실제 운영환경에 영향을 못 끼치도록 하기 위함이다.
mysql 8.0 이미지를 썼는데, 8버젼부터 mysql 5.x대 버젼보다 IO성능이 2배정도 개선되었다고 한다.
docker로 띄울때, 앞으로 관리하기 편하게 mysql용 docker-compose.yml을 만들어놓고 사용했다.

version: "3"
services:
  db:
    image: mysql:8.0
    container_name: dev-mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: {DB이름}
      MYSQL_ROOT_PASSWORD: {루트비밀번호}
      MYSQL_USER: {유저이름}
      MYSQL_PASSWORD: {유저비밀번호}
      TZ: "Asia/Seoul"
    command:
      - --character-set-server=utf8mb4  ## 한글 데이터가 들어올 수 있게 설정
      - --collation-server=utf8mb4_unicode_ci ## 한글 데이터가 들어올 수 있게 설정

이 docker-compose.yml 파일이 있는 곳에서
docker-compose up -d 을 커맨드라인에서 입력하면 백그라운드(daemon)로 yml에 기록되있는 서비스들을 도커 컨테이너로 올리게 된다.

2단계: develop서버 전용 프로파일 yml 생성하기.

현재 로컬서버에서 서버를 돌릴 때는h2 인메모리 DB를 사용하고 있다.
실제 운영서버에서는 mysql DB를 사용할 예정이므로,
로컬서버,개발서버,운영서버마다 설정(db정보등)들을 다르게 해주기 위해 설정정보들을 서버마다 별도로 관리해주는 yml이 필요하다.
즉, 서버별로 다르게 구성된 프로파일.yml 을 만들어주는게 필요하다.
이때 프로파일yml 이름을 application-{프로파일이름}.yml 과 같은 형식으로 지으면, spring에서 profile들을 관리할때 용이하다.
나는 application-dev.yml이라고 만들었다.

spring:
  config:
    activate:
      on-profile: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/{db이름}?serverTimezone=Asia/Seoul
    username: {유저이름}
    password: {비밀번호}
  jpa:
    hibernate:
      ddl-auto: update
    database-platform: org.hibernate.dialect.MySQL8Dialect 
logging:
  level:
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE
swagger:
  host: dev-api.gist-petition.com
  protocol: http

다른 설정들은 로컬서버용 프로파일이랑 똑같고,
datasource부분을 mysql로 구성한 것이 다르다.
jpa database-platform은 mysql 8.0 버젼을 쓰므로 mysql8Dialect를 사용한다.

3단계: github action으로 CD가 진행될 때 이 dev프로파일로 jar 파일을 실행하기.

현재 우리는 github action으로 CI/CD를 진행하고 있는데,
CD가 진행되면서 jar 파일을 실행할때 dev프로파일로 실행하도록 옵션을 준다.
java -jar -Dspring.profiles.active=dev -Duser.timezone=Asia/Seoul $JAR_NAME

문제점

현재 개발서버에 application-dev.yml 파일들 두고 이 설정을 jar파일을 실행할때 주입해주는 식으로 동작하고 있다.
이렇게 되면 application-dev.yml 파일이 github으로 관리가 되지않아 버젼관리, 형상관리가 어렵다는 단점이 있다.
이를 앞으로 해결해보도록 하려고 한다.

0개의 댓글