사내에서 비개발자가 직접 게시글을 작성하고 서비스에 배포할 수 있는 기능을 구현할 필요가 있었다.
이를 위해 어드민을 직접 개발하는 대신, Strapi라는 오픈소스를 도입하기로 결정했다.
Strapi는 Node.js 기반의 Headless CMS로, 기본적인 설치와 몇 가지 설정만으로 관리 대시보드와 백엔드 API를 자동으로 구축할 수 있는 강력한 오픈소스 솔루션이다.
서비스가 극초기 단계인 만큼, 운영 규모와 배포 빈도를 고려하여 가장 가볍고
유지보수가 용이한 배포 방식을 설계하는 데 중점을 두었다.
운영 데이터베이스: RDS Aurora MySQL과 연동하여 안정적인 데이터 관리 보장
배포 방식: 가볍고 효율적인 인프라 운영을 위해 AWS 기반으로 구성
Route 53: 도메인 네임 시스템(DNS) 관리
Application Load Balancer (ALB): 트래픽 분산 및 SSL/TLS 지원
EC2 (Strapi 배포): PM2를 이용한 프로세스 관리 및 자동 복구 설정
PM2를 활용한 자동화: Strapi 프로세스 상태 모니터링 및 장애 발생 시 자동 재시작

┌──────────────────────────┐
│ User Request │
│ (Browser) │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ Route 53 (DNS) │
│ - https://strapi.xxxx.xx/ │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ Application Load Balancer (ALB) │
│ - HTTP 80 / HTTPS 443 │
│ - Target Group (EC2 연결) │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ EC2 Instance │
│ - Strapi (Node.js) │
│ - Port: 1337 │
└──────────────────────────┘
역할: 사용자 요청을 EC2 인스턴스에 분산
포트: HTTP(80) / HTTPS(443) 리스너 설정
Target Group: EC2를 대상으로 설정하여 트래픽 전달
✅ ALB의 주요 기능
로드 밸런싱: 다수의 EC2 인스턴스를 관리할 경우 자동 분산
SSL/TLS 적용: AWS Certificate Manager(ACM)와 연동하여 HTTPS 지원
Auto Scaling 지원: 트래픽 증가 시 EC2 인스턴스 추가 가능
인바운드 규칙>1337 포트 가 alb에서 요청 받을 수 있도록 허용
비주기적 사용, ec2내부에서 pm2로 간단하게 유지보수 가능
사용해보면서 추후 Auto Recovery 등 고도화 필요할 경우 추가 대응
Strapi는 EC2에서 PM2 프로세스 관리 도구를 사용하여 실행됨
Strapi가 실행 중인지 확인하려면 다음 명령어를 사용
pm2 status
출력 예시:
bash
복사편집
┌──────┬────────┬──────┬──────┬───────────┬────────┬─────────┬───────────┐
│ id │ name │ mode │ status │ cpu │ memory │ uptime │ restart │
├──────┼────────┼──────┼──────┼───────────┼────────┼─────────┼───────────┤
│ 0 │ strapi │ fork │ online │ 0.1% │ 25.4mb │ 1h │ 0 │
└──────┴────────┴──────┴──────┴───────────┴────────┴─────────┴───────────┘
EC2가 재부팅되거나 Strapi 프로세스가 중단될 경우 자동으로 다시 실행하도록 PM2 영구 실행을 설정
Strapi를 PM2로 실행
pm2 start npm --name "strapi" -- start
서버 재부팅 시 자동 실행 설정
pm2 startup
명령어 실행 후 출력되는 명령을 복사하여 실행
PM2 상태 저장 (영구화)
pm2 save
다음 명령어를 활용하여 Strapi 상태를 확인
curl -I http://localhost:1337/admin
출력 예시:
HTTP/1.1 200
200 OK: 정상 실행 중500, 404, 503: 서비스 장애 가능성 있음아래 명령어를 실행하여 즉시 복구 가능
pm2 restart strapi
또는 실행되지 않은 경우:
pm2 start npm --name "strapi" -- start
Strapi의 실행 로그는 PM2 로그를 통해 확인
pm2 logs strapi
npm update를 실행하여 최신 버전 유지이번 설계에서는 운영의 단순성과 유지보수 편의성을 최우선으로 고려했다.
Kubernetes나 복잡한 CI/CD 파이프라인을 도입하지 않고,
EC2와 PM2 기반의 최소한의 인프라 구성을 통해 빠르게 배포하는것에 중점을 두었다.
향후 서비스가 성장함에 따라 배포 자동화 및 확장성 확보를 위한 추가적인 개선을 고려할 예정이다.