갑자기 posts, projects 들어가도 글들이 하나도 조회되지 않는다.
DB 문제처럼 보였지만, 실제 원인은 서버 실행 방식(cluster)이 구조에 안 맞아서 생긴 포트 충돌이었다.
🧩 문제 요약
증상: 블로그에서 글 조회 API(/api/posts)가 갑자기 동작 안 함
확인: curl localhost:3000 연결 실패 → 백엔드 서버가 실제로 포트에 안 떠 있음
로그: Astro 쪽에서 EADDRINUSE :4321 에러 발생
🔍 원인 분석 과정 (사고 흐름)
“DB 문제일까?” →
API 자체에 연결이 안 되므로 DB 이전에 서버 문제라고 판단
포트 확인 (ss) →
3000 포트에 아무 프로세스도 없음 → 백엔드가 안 뜬 상태
PM2 상태 확인 →
둘 다 cluster 모드로 실행 중
로그에서 힌트 발견 →
EADDRINUSE = 같은 포트를 여러 프로세스가 동시에 바인딩 시도
👉 결론:
PM2 cluster 모드가 Astro SSR/Express 구조와 안 맞아서
서버가 여러 개 뜨며 포트 충돌 → 유령처럼 “online”이지만 실제론 서비스 불가
🛠 해결 과정
PM2 전체 프로세스 삭제
ecosystem.config.js에서
exec_mode: fork
instances: 1 로 수정
다시 PM2로 기동
포트(3000, 4321) 실제 listen 확인
curl localhost:3000/api/posts로 API 정상 응답 확인
✅ 결과
backend API 정상 복구
프론트에서 글 조회 다시 동작
EADDRINUSE 에러 사라짐
서버 구조가 서비스 성격에 맞게 안정화됨
🧠 핵심 배운 점
“안 된다” → DB부터 의심 ❌ → 포트/프로세스부터 확인 ⭕
PM2 cluster는 stateless API용
Astro SSR + 개인 블로그는 fork + 1 인스턴스가 정답
“online”이라고 진짜 살아 있는 건 아니다 → 항상 포트로 검증
한 줄로 요약하면:
DB 문제처럼 보였지만, 실제 원인은 서버 실행 방식(cluster)이 구조에 안 맞아서 생긴 포트 충돌이었다.