ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CI/CD
    개발로그/오늘뭐먹지 프로젝트 2022. 4. 6. 19:56

     이제까지 개발을 할 때 로컬 환경에서 개발 -> 깃허브에 푸쉬 -> EC2에서 빌드하는 방식으로 진행되었다. 그런데 이 과정에서 문제가 있었다. 로컬 환경은 HTTP 환경으로 돌아가고 있었고 EC2에서는 HTTPS에서 돌아가고 있어서 로컬 환경에서 개발한 파일이 EC2에서 맞지 않는 경우가 다반사였다. 이에 따라 수많은 버그가 발생되었고, 이를 근본적으로 해결해야겠다는 생각이 들었다.

     

     우선 해야 할 일들을 생각해봤다. 첫 번째로, 로컬 환경을 HTTPS 개발 환경으로 바꾸어 EC2에서의 배포 환경과 일치시켜야 할 필요성을 느꼈다. 두 번째로, 깃허브에 푸쉬를 하면 자동으로 개정된 내용에 맞게 배포가 되었으면 좋겠다는 생각이 들었다. 

     

     그래서 각각을 작업했고, 오늘에 와서야 해당 작업들이 마무리 되었다.


    로컬 개발 환경 HTTPS로 변환

     

    백앤드

     자바 환경의 경우 자바에서 제공해주는 keytool을 사용해 HTTPS 인증서를 받아와 개발 환경을 구축했다. 해당 블로그를 참고하며 개발했다. 잘 정리되어있어 비교적 간단하게 이슈를 해결 할 수 있었다.

    https://ayoteralab.tistory.com/entry/Spring-Boot-24-https-TLS-SSL-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

     

    [Spring Boot] 24. https TLS SSL 적용하기

    지금까지 만들어온 Spring Boot 프로젝트는 browser에서 http://localhost:port를 입력해서 접속을 했습니다. 이는 향후 정상적인 DNS를 적용해도 동일합니다. 오늘은 SSL을 적용한 https로 접근하도록 Spring Boo

    ayoteralab.tistory.com

     

     

    프론트앤드

    자바스크립트, 리액트 환경의 경우에는 웹팩에서 제공해주는 HTTPS를 사용했다. 단순히 실행 스크립트를 다음과 같이 설정하면 됐었다.

    package.json

     

    start에 set HTTPS=true를 해주는 것만으로도 웹팩의 개발 서버에서 HTTPS로 실행이 되었다. 물론 배포환경에서는 사용 할 수 없겠지만, 이미 배포 환경은 nginx와 AMS를 통해 https를 구축해두어서 괜찮다고 생각했다.  이런 방식으로 프론트앤드의 HTTPS를 설정했다. 

     

     또한 로컬환경과 개발 환경의 설정이 다르기에 발생하는 이슈들이 있었다(ex. 개발환경에서의 백앤드 서버 주소는 localhost:8080, 배포 환경에서는 도메인). 이런 것들을 해결하기 위해 설정 파일을 따로 두어 그쪽에서 값들을 받아와야 할 필요를 느꼈다. 이를 dotenv 라이브러리를 사용해 설정했고, 개발 환경과 배포 환경 둘 다 정상적으로 돌아갔다.

    dotenv 설정파일.

     

     

     

     

    CI/CD 구축

     이제까지는 개발을 진행하고 배포를 할 때 직접 EC2를 putty를 통해 들어가 배포할 명령어를 적어둔 쉘 스크립트를 클릭해서 배포를 진행했었다. 상당히 번거로운 과정이라 다른 방법이 뭐가 있나 찾아보니 CI(Continuous Integration - 지속적인 통합)/CD(Continuous Deployment)를 사용하면 깃허브에 푸시를 하면 자동으로 배포파일을 만들고 배포까지 진행해주는 방법이 있었다.

     

     Jenkins와 Travis CI중 고민을 했었다. Jenkins가 많이 쓰인다고 하여 쓸까 싶었지만, EC2를 하나 더 만들어야 한다고 하여 비용 문제 때문에 포기하고 Travis CI를 사용하기로 했다.

    https://travis-ci.org/

     

    Travis CI - Test and Deploy Your Code with Confidence

     

    travis-ci.org

     

     CI/CD는 빌드를 위한 .travis.yml과 appspec.yml을 설정하고, 파일 시스템인 AWS S3, 배포 시스템인 AWS code deploy를 설정하고 AWS IAM을 통해 권한을 설정해주는게 전부였다. 처음 접하다보니 Travis CI에서 Permission denied가 난다던지 사소한 오타때문에 에러가 난다던지 하는 문제는 있었지만 어찌어찌 CI/CD 시스템을 성공적으로 구축 할 수 있었다.

     

    Travis CI 구축 성공

     

     

    code deploy 구축 성공

     

     


     AWS 기능 정리

     

    AWS S3

     일종의 파일 서버로써 순수하게 파일을 저장하고 접근 권한을 관리, 검색등을 지원하는 파일 서버의 역할을 한다.  여기서는 배포 파일(Jar)을 관리하는 역할을 한다.

     

     

    AWS IAM

    권한을 관리해주는 매니저로써 두가지의 role을 둔다. 첫 번째로 역할이고 두 번째로 사용자이다. 내용은 다음과 같다.

     

    역할

    • AWS 서비스에서만 할당 할 수 있는 권한
    • EC2, CodeDeploy, SQS등

     

    사용자

    • AWS 서비스 외에 사용할 수 있는 권한
    • 로컬 PC, IDC 서버 등

     

    AWS CodeDeploy 

    • AWS의 배포서비스다. 오토 스케일링 그룹 배포, 블루 그린 배포, EC2 단독 배포 등 많은 기능을 지원한다.

     


     

    추후 예정

     

     CI/CD까지 완료했는데 배포 과정에 문제가 있다고 한다. 배포를 진행하는 도중에는 서비스에 접근을 할 수 없다는게 문제인데, 이를 해결하기 위해서 무중단 배포를 적용해야 할 필요성이 보인다. 열심히하자!

    '개발로그 > 오늘뭐먹지 프로젝트' 카테고리의 다른 글

    Selenium을 이용한 크롤링  (1) 2022.12.23
    구조 리팩토링 - 테스트 DB 분리, 메시지 분리  (2) 2022.10.19
    AWS 배포  (0) 2022.03.31
    메인 기능 구현 완료  (0) 2022.03.10
    MVC VS FLUX VS REDUX  (0) 2021.10.13

    댓글

Designed by Tistory.