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 정도의 용량을 사용한다. ..
소스 코드 변경 시 자동 빌드하기 Chron Job: UNIX 기반 OS의 시간 기반 Job Scheduler이다. 아래 Chron Job 기반의 두 가지 방법으로 빌드 트리거 설정을 할 수 있다. Build Periodcally: 일정 시간 마다 빌드를 진행한다. PollSCM: 일정 시간 마다 검사 후 코드 업데이트 사항(commit)이 있다면 빌드를 진행한다. PollSCM schedule 설정 방법 Deploy SSH 설정 SSH plugin 설치 (Publish Over SSH) Jenkins 관리 -> system -> publish over ssh -> ssh sever 추가 Test Configuration을 클릭해서 좌측 하단에 success가 출력되면 성공이다. Jenkins Proje..
Docker에서 Jenkins 설치하기 Jenkins docker image pull (jenkins가 deprecated 되어 현재는 jenkins/jenkins 사용) docker pull jenkins/jenkins:원하는 버전 및 JDK 버전 Jenkins container 실행 (컨테이너가 삭제되어도 사용한 데이터를 남기기 위해 -v 옵션으로 저장할 경로를 볼륨 마운트한다.) docker run -d --name jenkins-server -p 8080:8080 -p 50000:50000 --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk17 Jenkins 접속 [호스트 주소 + 도커 실행 시 연결한 포트번..
개발 과정의 순간 순간을 기록하기 위해서 버전 관리 도구인 Git을 많이 사용한다. 이때 충돌을 방지하기 위해서 혹은 개발 과정의 구분을 위해 여러 분기로 나누어 작업하고, 작업한 내용을 병합하게 된다. 브랜치를 나누는 전략 중 Git Flow는 디테일하게 브랜치를 나누지만 그만큼 귀찮고, Github Flow는 덜 디테일하지만 과정이 더 간소하다. Github Flow main 브랜치와 feature 브랜치만을 가지는 간단한 방식이다. 각각의 기능마다 feature 브랜치를 생성해서 기능을 구현하고 main에 병합하면 된다. Git Flow Master(main) -> HotFix -> Release -> Develop -> Feature 5가지 브랜치로 구분하여 각각은 아래와 같은 기준으로 구분된다...
Intro 지금까지 CICD를 활용해 자동화된 통합과 배포에 대해 공부했다. 자동화에는 성공했지만 여전히 배포 과정에서 서버가 다운된다는 문제가 남아있기 때문에 서버 중단없이 배포하는 방법이 필요하다. 무중단 배포 방식에는 AWS Blue-Green, 도커를 이용한 무중단 배포 등 여러 가지가 있다. 그 중에서 NginX를 활용한 방법이 가장 비용이 적고 쉽기 때문에 NginX를 사용할 것이다. Nginx 무중단 배포 과정 Nginx는 프록시 서버이기 때문에 여러 개의 서버를 실행하고 Nginx가 서버들로 요청을 전달한다. 이때 서버가 업데이트 된다면 먼저 하나의 서버를 먼저 업데이트한다. 이때 다른 서버가 실행 중이므로 클라이언트들을 여전히 구버전의 서비스를 이용할 수 있다. 서버 업데이트가 끝나면 업..