EC2 프리 티어를 사용해서 프로젝트 파일을 빌드하다 보면 서버가 멈출 때가 많다. 그 이유는 프리 티어로 제공하는 t2.micro의 메모리 용량이 너무 낮기 때문인데, Virtual Memory인 스왑 메모리를 사용하면 디스크를 메모리 처럼 사용하여 메모리 부족 문제를 해결할 수 있다. 사용 방법은 AWS 공식 홈페이지에 자세히 나와있다. 짧게 요약하자면 다음과 같다. RAM 2GB 이하에서는 스왑 공간은 최소 32MB 이상이며 RAM 용량의 1배 크기로 잡는 것을 권장한다. 2~32GB에서는 4GB + (RAM - 2GB), 32GB 이상에서는 RAM 용량의 1배 t2.micro는 1GB이기 때문에 아래와 같이 2GB로 잡으면 된다. 1. 128MB를 16번 사용하여 2GB 정도의 용량을 사용한다. ..
Intro 지금까지 CICD를 활용해 자동화된 통합과 배포에 대해 공부했다. 자동화에는 성공했지만 여전히 배포 과정에서 서버가 다운된다는 문제가 남아있기 때문에 서버 중단없이 배포하는 방법이 필요하다. 무중단 배포 방식에는 AWS Blue-Green, 도커를 이용한 무중단 배포 등 여러 가지가 있다. 그 중에서 NginX를 활용한 방법이 가장 비용이 적고 쉽기 때문에 NginX를 사용할 것이다. Nginx 무중단 배포 과정 Nginx는 프록시 서버이기 때문에 여러 개의 서버를 실행하고 Nginx가 서버들로 요청을 전달한다. 이때 서버가 업데이트 된다면 먼저 하나의 서버를 먼저 업데이트한다. 이때 다른 서버가 실행 중이므로 클라이언트들을 여전히 구버전의 서비스를 이용할 수 있다. 서버 업데이트가 끝나면 업..
Continuous Integration IAM 사용자 추가 + 보안 자격 증명에서 엑세스 키 발급 후 csv 파일 저장 WorkFlow 작성 name: freelec-springboot2-webservice on: push: branches: - main # (1) 브랜치 지정 workflow_dispatch: # (2) 수동 실행 env: S3_BUCKET_NAME: "freelec-deploy" PROJECT_NAME: "freelec-springboot2-webservice" jobs: build: runs-on: ubuntu-latest # (3) steps: - name: Checkout uses: actions/checkout@v2 # (4) - name: Set up JDK 11 uses:..
배포 먼저 EC2에 접속한 다음 github에 업로드한 프로젝트를 clone한다. git clone 저장소 주소 받은 프로젝트 Build Test ./gradlew build 만약 permission 에러가 발생하면 아래 명령으로 권한을 추가해준다. chmod +x ./gradlew 이후 git pull 명령을 실행해서 pull이 잘 되는지도 확인한다. 쉘 스크립트 git 폴더가 아닌 다른 폴더에 스크립트 파일을 생성한다. vim ~/app/git/deploy.sh 내용 작성 #!/bin/bash REPOSITORY=/home/ec2-user/app/step1 PROJECT_NAME=freelec-springboot2-webservice PROJECT_FILENAME=SpringPractice-0.0.1..
인스턴스 생성 및 보안그룹, 탄력적 IP 설정은 생략.. pem 키를 ~/.ssh로 복사 cp pem키를 내려받은 위치 ~/.ssh pem 키 권한 부여 chmod 600 ~/.ssh/pem키 이름 config 파일에 아래 내용 작성 vim ~/.ssh/config #주석 Host 본인이 원하는 서비스명 HostName ec2의 탄력적 IP User ec2-user IdentityFile ~/.ssh/pem키 이름 config 파일 권한 부여 chmod 700 ~/.ssh/config ec2 ssh 접속 ssh 서비스명 자바 설치 sudo yum install -y 본인이 원하는 자바 버전을 입력(java + tab을 누르면 리스트가 나옴) 아래 명령을 통해 자바 버전을 설정한다 (리스트에 나온 선택 번..