
Github Action, ECR, S3, CodeDeploy를 활용해 Blue/Green 방식의 무중단 배포를 해보려 합니다. 아래는 모든 과정이 끝난 후의 아키텍처입니다. 배포 시나리오 1. Github에 코드 push하면 Github Action 동작 2. ECR에 Docker image push 3. S3에 CodeDeploy script 업로드 4. CodeDeploy 실행해 EC2 배포 Github Action을 통해 2,3,4 과정이 실행됩니다. ECR에는 Spring Boot docker image를 push하고, S3에는 CodeDeploy에 필요한 스크립트를 압축해 업로드 합니다. CodeDeploy에서는 S3의 스크립트를 실행해 EC2 배포를 진행합니다. 스크립트에는 ECR로부터 do..

Elastic Load Balancer의 종류인 Application Load Balancer를 생성해 트래픽을 분산해보자. 첫번째로는, 대상 그룹을 생성 후 인스턴스 2개를 대상으로 지정해 트래픽을 분산해보려 한다. 두번째로는, Auto Scaling Group을 대상 그룹에 연결해 Auto Scaling에 의해 생성된 모든 인스턴스들에 트래픽을 분산해보려 한다. 최종 아키텍처는 아래와 같다. Load Balancer Hands-On 시작 템플릿 버전 수정 Auto Scaling Group 시작 템플릿 변경 Target Group 생성 Application Load Balancer 생성 Auto Scaling Group을 대상 그룹으로 설정 Load Balancer 트래픽 분산 테스트 1. 시작 템플릿..

저번 글에서 AWS Elastic Beanstalk, RDS 환경 세팅 및 인스턴스 연결을 해주었다. 이번 글에서는 Github Action yml 파일에 배포 스크립트를 추가하고, Github Action을 통한 AWS Elastic Beanstalk 배포 작업을 마무리해보자. 글은 다음과 같은 순서로 진행된다. docker-compose 파일 작성 IAM 인증키 발급받기 Github Action yml에 배포 스크립트 추가 1. docker-compose 파일 작성 Elastic beanstalk 배포를 위해 필요한 설정 파일인 docker-compose 파일을 작성해보자. docker-compose 파일을 이용해 Docker hub에 빌드되어 있는 이미지를 가져오고, 포트 맵핑, 환경변수 세팅 등을..

Docker + Github Action + Elastic beanstalk을 사용한 CI/CD를 구축하다 알 수 없는 오류가 발생해서 처음부터 차근차근해보고자 이 글을 쓰게 되었다. 그럼 Spring boot 프로젝트를 Elastic beanstalk에 수동 배포해보자. 1. Spring boot 프로젝트 생성 Spring boot 3.0.5 사용 Spring web 의존성만 추가해 프로젝트를 생성했다. implementation 'org.springframework.boot:spring-boot-starter-web' 2. Controller 작성 간단히 hello world를 반환하는 api를 작성했다. @RestController public class HelloController { @GetMa..

이번 글에서는 AWS Elastic Beanstalk과 RDS 환경을 세팅하고, 두 인스턴스를 연결해보자. 먼저 AWS Elastic BeanStalk, VPC, Security Group의 개념부터 알아보자. [ Elastic BeanStalk ] Elastic Beanstalk은 EC2 인스턴스, 데이터베이스, 로드밸런서 등 여러 서비스를 포함한 환경을 구성하며 소프트웨어를 업데이트할 때마다 자동으로 환경을 관리해준다. [ VPC ] Amazon Virtual Private Cloud(VPC)는 AWS 클라우드에서 논리적으로 격리된 공간을 제공하는 것이다. VPC를 통해 고객이 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있다. 아래와 같이 ElasticBeanstalk 인스턴스나 RDS 등을..

Github Action을 통해 Docker 환경을 Elastic Beanstalk에 배포해보자. 이번 글에서는 Github Action으로 CI 환경을 구축하고, Docker hub에 docker 이미지를 올리는 것까지 해보려 한다. 전체적인 구조는 아래와 같다. [ 아키텍처 ] [ CI/CD 과정 ] 1. Github 에 코드를 push 2. Github Action job 수행 2-1. Spring boot 코드 build 2-2. Dockerfile 빌드 2-3. Docker Hub에 이미지 push 2-3. AWS EB에 docker-compose 업로드 5. AWS EB는 docker-compose를 실행해 배포 [ 구현 과정 ] 1. Spring Boot 프로젝트 세팅 2. Dockerfil..

Ubuntu 환경에서 Docker-compose 사용해 Nginx, Spring Boot 컨테이너 두 대를 실행시키고, Nginx를 Reverse Proxy 로 구성해보자. [ Reverse Proxy ] 1. Proxy Proxy는 번역하면 대리라는 의미를 가진다. Proxy 서버는 클라이언트와 서버 사이에서 클라이언트 또는 서버를 대신해 기능을 수행하거나, 중계하는 역할을 한다. 2. Reverse Proxy 리버스 프록시는 클라이언트로부터 오는 요청을 대신 받아 내부 서버로 전달해주는 역할을 한다. 로드 밸런싱: 많은 요청을 처리하기 위해 여러대의 서버에 부하 분산 수행 가능 캐싱: 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수 있다. 보안: 내부 WAS의 존재를 숨길 수 있..

Docker Image는 여러 개의 레이어로 되어 있다. 도커 이미지는 빌드시 Dockerfile의 각 명령어들에 대한 레이어를 생성한다. Docker는 매번 모든 Layer를 생성하면 속도가 매우 느려질 수 있다. 따라서, Docker는 Docker Image 빌드 속도를 높이기 위해 Docker Cache를 사용한다. 첫 번째 이미지 빌드에서는 각 레이어별 Cache를 생성하고, 이후 동일한 명령어가 실행되면 기존의 레이어를 재사용한다. 만약 변경되는 단계가 있다면 레이어는 다시 만들어진다. 하지만, COPY같은 경우 jar 파일의 내용이 바뀌었으면, 같은 명령어라도 Cache를 적용할 수 없다. 직접 어플리케이션 코드 변경 후 Dockerfile을 재빌드해 문제를 파악하고, 해결방안을 알아보자. D..