[ AWS ] 누구나 쉽게 따라할 수 있는 CI/CD 구축하여 프로젝트 배포 자동화하기 #4

해당 게시글의 코드 내용은 아래의 링크에서 보실 수 있습니다.

Git Repository : https://github.com/seungm2n/opendata

안녕하세요, 오늘은 AWS CI/CD 구축하는 방법에 대해서 글을 작성하려고 합니다.
JAVA와 SPRING BOOT를 Github Action으로 AWS에서 제공하는 EC2와 S3, CodeDeploy를 통하여 구축하는 방법에 대해서 설명하려고합니다.

이번 게시글에서는 지난 게시글에 이어 AWS RDS설정, RDS-Github 연결 방법 및 Database 정보 숨기는 방법까지 설명을 드리고자 합니다.

** 앞서 설정하지 않았던 부분들이 있다면 이전 게시글을 참고하시기 바랍니다.

AWS RDS 설정

AWS RDS는 우리가 알듯이 Database를 말합니다. 여기서 지원하는 Database는 MySQL, PostgreSQL, MariaDB, Oracle, Microsoft SQL Server, IBM Db2를 지원하고 있습니다.

[참고] 해당 게시글에서는 MySQL로 진행합니다. 다른 데이터 베이스와 기본 설정에 대한 방법은 차이가 없으며, 나중에 Spring Boot쪽에서 application.yml 혹은 application.properties에서만 차이가 있습니다.

  1. AWS 상단 검색창에 RDS라고 검색합니다.
  2. RDS를 선택합니다.
    AWS_RDS
  3. Amazon RDS > 대시보드 > 데이터베이스 생성 > 데이터베이스 생성으로 이동합니다.
    RDS_데이터베이스 생성
  4. 데이터베이스 생성 폼이 출력이 되어지는데 여기서 데이터베이스 생성 방식 선택 > 표준생성엔진 옵션 > MySQL을 선택합니다.
    데이터베이스생성_MySQL
  5. 아래로 스크롤을 조금 내리면 엔진 버전 선택하는 곳이 있는데 여기서 원하는 버전을 선택하고, 템플릿은 프리티어를 선택합니다.
    엔진옵션설정_템플릿설정
  6. 스크롤을 내려 설정 폼으로 갑니다.
  7. 설정 폼으로 가서 DB 인스턴스 식별자 / 마스터 사용자 이름 / 마스터 암호를 설정합니다. 해당 폼에 입력하는 데이터는 꼭 기억해두시길 바랍니다. 아시다시피 DB 연결 정보입니다.
    DB식별자_비밀번호설정
  8. 다음은 인스턴스 구성입니다. 여기서 저는 db.t2.micro를 선택하였지만, 원하시는 버전이 있다면 선택하셔도 상관없습니다.
    RDS_인스턴스구성
  9. 바로 밑에 있는 스토리지 설정입니다. 저는 기본값으로 두었습니다.
    RDS 스토리지 설정
  10. 연결 폼으로 갑니다. 연결 폼에서 아래의 이미지와 같이 선택을 합니다.
    RDS_연결
  11. 계속 이어 연결 폼 설정인데 VPC 보안 그룹 > 새로 생성 선택을 선택하고, 새 VPC 보안 그룹 이름에서 이름을 지정해줍니다. 그 후에 데이터베이스 인증 > 암호인증을 선택해줍니다.
    RDS_VPC보안그룹
  12. 스크롤을 조금씩 내리다보면 추가 구성 폼이 있습니다. 추가 구성 폼에서 데이터베이스 옵션에서 초기 데이터베이스 이름을 지정하고 제일 하단에 데이터베이스 생성을 클릭합니다.
    RDS_추가구성_데이터베이스옵션

데이터베이스 생성확인

  1. AWS RDS > 데이터베이스 로 접근합니다.
  2. 여기서 방금 생성한 DB를 선택합니다.
    데이터베이스 생성확인 1
  3. 이렇게 선택하고 나면 아래와 같은 창이 출력이 되어지는데 여기서 연결 및 보안 > 엔드포인트 및 포트에서 엔드포인트를 확인하고 복사합니다.
    데이터베이스 생성확인 2
  4. 복사한 엔드포인트를 가지고 DB 툴을 엽니다. 저는 인텔리제이(Intellij)를 이용했습니다.
  5. intellij에서 우측 사이드 메뉴바에 있는 데이터 베이스를 클릭합니다.
  6. 여기서 + 버튼 > 데이터 소스 > MySQL 을 선택합니다.
    [주의] MySQL로 생성하지 않았다면, 생성할 때 선택하였던 DB에 맞춰서 선택.
    데이터베이스 생성확인 3
  7. 위의 MySQL을 클릭하고 나면 아래와 같은 창이 뜨는데 다음과 같이 작성하여 넣어줍니다.
    1) [엔드포인트] => [호스트]
    2) [마스터 사용자 이름] => [사용자]
    3) [마스터 암호] => [비밀번호]

    * 마스터 사용자 이름과 암호는 기억해두라고 했던 내용입니다.
    그 후 확인 버튼을 클릭합니다.
    데이터베이스 생성확인 4
  8. 위처럼 하였으면 아래와 같이 데이터베이스가 연결된 것을 확인할 수 있습니다.
    mymysql 테이블 외에는 기본적으로 RDS 설정에 따라 생성되는 테이블입니다.
    데이터베이스 생성확인 5

Github에 RDS 연결하는 방법

  1. 다음과 같이 우선 application.yml을 작성해줍니다.
    또한, 기존 프로젝트에 있던 application.yml은 모두 주석처리를 하거나 삭제를 해야합니다.
application.yml

spring:
  datasource:
    url: jdbc:mysql://{엔드포인트}/{DB명}?useUnicode=true&serverTimezone=Asia/Seoul
    username: {마스터 사용자 이름}
    password: {마스터 암호}

[주의]
{~} : 개개인이 가지고 있는 정보를 입력해야 함.

2. 이렇게 application.yml 파일을 작성하였다면, 연결하고자 하는 Github Repository로 이동합니다.

3. Settings > Secrets and variables > Actions로 이동하여 New repository secret을 클릭합니다.

4. Name과 Secret에 각각 맞게 작성하고, Name값을 기억해주시기 바랍니다.

5. 다음은 연결하고자하는 Git Repository의 메인에서 .github/workflows/main.yml로 이동합니다.

6. main.yml에 우측상단에 있는 연필 모양을 클릭하여 수정모드로 진입합니다.

7. 아래의 코드를 복사합니다.

    - uses: actions/checkout@v2
    - run: touch ./src/main/resources/application.yml
    - run: echo "${{secrets.APPLICATION}}" > ./src/main/resources/application.yml
    - uses: actions/upload-artifact@v2
      with:
        name: application.yml
        path: ./src/main/resources/application.yml

8. 위에서 복사한 코드를 아래의 이미지와 같은 위치에 삽입합니다. ‘jobs > JDK 설치’ 부분과 ‘jobs > gradlew에 실행권한 부여’ 부분 사이에 삽입합니다.

위의 코드는 build가 되어질 때 Secret에 있는 APPLICATION을 읽어와 application.yml을 작성하는 코드입니다.

차마 이번에 이 게시글을 작성하며, 미쳐 설명드리지 못한 부분이 있어 첨언하도록 하겠습니다.

Settings > Secrets and variables > Actions에서 작성한 내용들은 한번 작성한 후에 다시 들어가면 값이 보이지 않습니다. 이 부분 참고하시어 개발하심이 좋다고 생각합니다. 해당 내용을 잊어버렸을 경우, 수정작업이 까다로우니 위의 경로로 접근하여 작성하는 Secret 내용들은 어딘가에는 백업을 해두는 것이 좋습니다. 감사합니다.