드디어 이번 프로젝트의 목표인 무중단 배포를 할것입니다.
엘라스틱빈톡 & DB & CI/CD 배포를 해보겠습니다.
이전에는 jar 파일을직접 업로드 하였지만 이제는 jar파일마저 CI/CD를 통해 자동으로 배포하겠습니다.
기존 배포방식의 위험한점
테스트 환경과 실행 환경이 다르다
앞서 엘라스틱빈스톡으로 배포를 했습니다.
하지만 배포를 했다고 무조건 배포에 성공한다고 보장할 수 없습니다.
프로젝트는 로컬 컴퓨터에서 테스트했지만,
실제 배포는 리눅스 환경이기 때문입니다.
즉, 테스트와 실행환경이 다릅니다.
CI/CD
CI : 지속적 통합
CI를 성공적으로 구현할경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합 되므로 여러명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.
CD : 지속적 배포
파이프라인의 추가 단계에 대한 자동화를뜻합니다.
얼마나 많은 자동화가이루어지고 있는지를설명하기 위해 별도로 사용되기도 합니다.
배포 구성
- build gradlew을 로컬에서 하여 jar파일을 만들지 않고 프로젝트를 Github에 배포합니다.
- Github가 코드의 변경을 감지하여 CI (continuous Integration 지속적 통합) 서버를만든 뒤 프로젝트 전달.
- CI서버에서 테스트하고 빌드하여 jar파일생성
- 핵심은 CI서버가 AWS 환경(리눅스)과 동일해야 합니다.
- CI서버에서 AWS로 배포한 뒤 실행
- CI서버에서 테스트를 성공 했으면 실제 환경에서 무조건 실행에 성공합니다.
- CI서버는 AWS에서의 실행 성공을 보장합니다.
- 환경이 동일하기 때문입니다.
- CI서버에서 실행파일(jar)생성 후 드래그하여 배포하지 않고, CD(Contunuous Delivery : 지속적 제공, 배포)를 합니다.
- 즉, 자동배포를하는것입니다.
- 총 2번 : CD가 실행 되는 시점
1. 2번과정인 Github가 변경감지하여 CI서버로 배포할때- 4번과정 성공 후 5번과정인 실행파일(jar)을 AWS로 배포할떄
주의할점
IAM
우리는 AWS로 배포할때 웹사이트에서 로그인되어있는 상태로 배포를 하였습니다.
하지만 CI/CD를 도입하면 CI서버에서 AWS에 접근하여 배포할때 CD를하기위해 Access Key가 필요합니다.
접근키를 만들기 위해 AWS의 LAM이라는 개념을 알아야 합니다.
Polling vs Webhook
폴링 : 지속적으로 request 요청으로 코드가 변경되었는지 확인합니다.
- while문으로 동작하기 때문에 서버에 많은 부하가 있습니다.
- Travis가 대표적입니다.
훅 : 코드가 변경되면 자동으로 변경되었다고 알려줍니다.
- 변경시에만 동작하기에 서버에부하가 적습니다.
- Jenkins가 대표적입니다.
개념은 전체적으로 알아보았으니 다음 블로그에서 배포를 진행해 보겠습니다.
'AWS' 카테고리의 다른 글
AWS에서 내 돈을 훔쳐간다?? (RDS backup storage 비용) (0) | 2024.01.06 |
---|---|
엘라스틱빈톡 & DB & CI/CD 배포하기 2 (CI/CD, Webhock - GitAction) (0) | 2023.11.13 |
엘라스틱빈스톡 RDS 결합 배포 (VPC) (0) | 2023.11.12 |
엘라스틱 빈스톡 SSH 접속 후 nginx, spring 동작 및설정 확인하기 (0) | 2023.11.12 |
AWS 엘라스틱 빈스톡 내부 구성 이해하기 (0) | 2023.11.12 |