- [ backend/aws ][aws] ec2 스왑 공간 할당하기 (OOM)2024-01-08 03:43:13프리티어가 프리티어인 이유는 개복치이기 때문이다 😇 프리티어를 지원하는 ec2 인스턴스를 생성하고, ssh로 원격 접속하여 도커 컨테이너를 실행하고자 했다. 근데 도커 컨테이너가 곧바로 꺼지는 문제가 발생했다. (황당..) 컨테이너의 exit code는 137로, OOM*으로 인한 종료를 의미했다. *OOM : (Out Of Memory) 인스턴스에서 사용할 수 있는 메모리가 모두 소진되어 더 이상 할당할 수 없는 상태 사양 높은 인스턴스를 쓰기엔 금전적인 수입이 없는 학생(?) 나부랭이라서 프리티어를 포기할 수 없었다. 다행히도 OOM 문제를 겪은 사람이 많아 이에 대한 해결책이 존재했다. swap이란? 스왑은 컴퓨터에서 주메모리가 부족할 때 사용할 수 있는 보조 저장 공간이다. 주메모리는 프로그램에 ..
- [ backend/ci•cd ][CD] 블루/그린 무중단 배포 구현하기 2편 (GitHub Actions/Shell Script)2024-01-08 00:02:16🔗 [CD] 블루/그린 무중단 배포 구현하기 1편 (NGINX/Docker Compose) 이번 포스팅에서는 1편에서 작성한 도커 컴포즈 파일을 바탕으로 블루/그린 무중단 배포를 구현할 것이다. GitHub Actions란? 깃헙 액션은 깃헙에서 제공하는 자동화 도구로, 빌드, 테스트, 배포 파이프라인을 자동화할 수 있다. 깃헙 액션은 특정 이벤트가 발생하면 액션을 자동으로 실행하게 되는데, 이를 활용하여 특정 브랜치에 코드가 push 되었을 때 어플리케이션을 배포할 수 있다. 이외에도 레포지토리에 이슈가 생성될 때마다 자동으로 적절한 라벨을 붙여주는 등의 워크플로우를 만들 수 있다. workflow 워크플로우는 하나 이상의 작업을 실행하는 자동화된 프로세스다. `.github/workflows` 디렉토..
- [ backend/ci•cd ][CD] 블루/그린 무중단 배포 구현하기 1편 (NGINX/Docker Compose)2024-01-07 18:20:00야 너두 무중단 배포 할 수 있어 🫵이 글은 도커, 엔진엑스, 깃헙 액션을 한 번도 써본 적 없고, 무중단 배포라는 용어도 처음 들어본 사람의 무모한 무중단 배포 도전기다. 제발 나처럼 고생하는 사람이 없길 바라며 삽질을 거름으로 완성한 블루/그린 무중단 배포 도전기를 풀어보겠다. 무중단 배포란?신규 버전의 어플리케이션을 새롭게 배포하는 과정을 가정해보자. 로컬에서는 신규 어플리케이션을 빌드하고, 서버에서는 현재 실행중인 버전을 종료한다. 기존 버전의 종료되면 빌드한 결과물을 서버에서 실행하고, 그 결과 신규 어플리케이션이 배포된다.하지만 해당 방법은 구버전이 종료되고 신규 버전이 실행되기 전까지 사용자가 서비스를 이용할 수 없다는 치명적인 단점이 있다. 이를 보완하고자 서비스의 중단없이 업데이트를 수..
- [ backend/aws ][aws] vpc 설정하기 (Connection timed out 이슈/네트워크 acl)2024-01-03 15:12:41# ssh -i ${PATH}${KEY_PAIR_NAME}.pem ${INSTANCE_USER_NAME}@${INSTANCE_PUBLIC_DNS_NAME}ssh -i ${KEY_PATH}.pem ubuntu@ec2-${PUBLIC_IP}.ap-northeast-2.compute.amazonaws.com위의 명령어를 이용하여 ec2에 접속하려는데 `Connection timed out` 에러가 발생했다. 보안 그룹의 인바운드 규칙에 ssh 인바운드 규칙을 추가했는데 뭐가 문제일까? (인스턴스 정보 확인하기)How do I troubleshoot Amazon EC2 instance connection timeout errors from the internet?ec2 인스턴스 보안 그룹 확인 : 내 ip 대역..
- [ backend/aws ][aws] ec2 인스턴스 만들기 (키 페어/보안 그룹)2024-01-01 17:02:47ec2 생성하기 이제 ec2를 이용하여 클라우드 환경에 서버를 띄울 것이다. ec2는 클라우드 컴퓨팅 서비스로 가상 서버를 실행하는 용도로 사용한다. ec2를 만들기 전에 주요 용어부터 살펴보자. AMI; amazon machine image AMI는 소프트웨어 설정 정보를 저장한 템플릿이다. AMI로 인스턴스를 시작할 수 있으며 하나의 AMI로 여러 인스턴스를 실행할 수 있다. instance 인스턴스는 클라우드의 가상 서버를 의미한다. 인스턴스의 유형에 따라 cpu, 메모리 등 인스턴스에 사용되는 하드웨어가 결정된다. 키 페어 생성하기 Create a key pair aws는 공개키 암호화를 사용하여 인스턴스에 안전하게 접근할 수 있도록 지원한다. ec2 인스턴스를 생성하기 전에 키 페어부터 만들어보..
- [ backend/aws ][aws] aws 시작하기 (region/AZ/IAM)2024-01-01 04:31:50aws란?aws는 Amazon Web Services의 약자로, 아마존에서 제공하는 클라우드 서비스*다. aws는 블랙프라이데이 때문에 증설한, 남아도는 컴퓨팅 자원을 파는 것에서 시작되었다.*클라우드 서비스 : 데이터 스토리지와 컴퓨팅 파워 같은 컴퓨터 자원을 제공하는 서비스클라우드 서비스의 장점가격 : 초기 비용이 적게 든다.탄력성과 확장성 : 서비스의 규모에 맞게 인프라를 확장/축소할 수 있다.가용성과 내구도 : 전 세계에 여러 데이터 센터를 보유하고 있기 때문에 데이터 센터 간에 데이터를 복제하여 장애가 전체 서비스에 영향을 미치지 않도록 보장한다.aws를 사용하기 전에 먼저 주요 용어를 살펴보자. region리전은 aws의 물리적으로 독립된 지역을 의미한다. 사용자와 가까운 지역에서 서비스를 제..
- [ backend/docker ][docker] 캐싱으로 이미지 빌드 속도 향상시키기 (Dockerfile/build/run)2023-12-29 23:40:07앞에서 알아본 도커 개념을 바탕으로 도커 컨테이너에 어플리케이션을 띄워볼 것이다. Dockerfile을 이용하여 이미지를 빌드하고 도커 CLI를 이용하여 컨테이너를 실행시켜보자. Dockerfile 작성하기Dockerfile이란?이미지를 빌드하기 위해서는 Dockerfile을 작성해야 한다. Dockerfile은 이미지를 빌드하기 위한 명령들이 포함된, 파일 확장자가 없는 텍스트 기반의 파일이다.FROM node:20RUN apt-get update && apt-get install -y tiniWORKDIR /app/wasCOPY was/package*.json ./RUN npm installCOPY was .RUN npm run buildCMD ["tini", "--", "npm", "run", "s..
- [ backend/docker ][docker] docker 시작하기 (아키텍처)2023-12-29 00:04:21docker를 공부하다보면 허브, 레지스트리 등 생소한 용어가 많이 등장한다. 허브는 뭐고, 레지스트리는 또 뭐야? docker architecture 도커는 클라이언트-서버 구조를 갖는다. 클라이언트*는 데몬*과 통신하여 도커 컨테이너를 구축하고 실행 및 배포할 수 있다. *docker client (=`docker`) : 도커 사용자가 도커와 상호작용하는 주요 방법이다. *docker daemon (=`dockerd`) : 도커 API 요청을 수신하고 이미지/컨테이너/네트워크/볼륨 같은 도커 개체들을 관리한다. docker registry 도커 레지스트리는 도커 이미지를 저장하고 관리하는 서비스다. 도커 허브가 레지스트리의 한 예로, 누구나 사용할 수 있는 퍼블릭 레지스트리다. 하지만 개인이나 조직이..