문제 상황
Oracle Cloud Infrastructure(OCI) 프리티어 인스턴스에서 Node.js 기반 API 서버를 실행하고 있었고, 내부에서는 정상적으로 localhost:3000
또는 10.0.0.x:3000
접근이 가능했지만 외부에서는 퍼블릭IP:3000
접속이 되지 않는 문제가 있었습니다.
접속 불가 현상 예시
curl http://[퍼블릭IP]:3000
curl: (7) Failed to connect to [퍼블릭IP] port 3000: Couldn't connect to server
점검한 사항들
- 보안 목록(Security List): 3000번 포트 인바운드 TCP 허용
- UFW: 3000/tcp 포트 허용
- iptables: ACCEPT 규칙 등록
- Node.js Listen 상태:
0.0.0.0:3000
으로 정상 리스닝 - 경로 테이블:
0.0.0.0/0 → 인터넷 게이트웨이
정상 설정
최종 원인 및 해결 방법
- 기존 퍼블릭 IP가 VNIC에 연결되어 있음에도 불구하고 실제 라우팅이 되지 않음
- OCI 콘솔에서 해당 퍼블릭 IP를 해제하고, 새 퍼블릭 IP를 생성 및 연결
- Node.js 애플리케이션이 의도치 않게 중단되어 있었음 (PM2로 재시작)
- 포트 리스닝 상태를 다시 확인한 후
0.0.0.0:3000
으로 떠 있는지 재확인
최종 테스트 결과
curl http://[신규 퍼블릭 IP]:3000/api-docs
→ Swagger UI 정상 출력 확인
추가 팁
- Node.js listen host: 반드시
'0.0.0.0'
으로 설정 - PM2 확인:
pm2 list
/pm2 restart [앱이름]
- VNIC 퍼블릭 IP 연결 후
curl http://169.254.169.254/opc/v1/vnics/
명령으로 상태 확인
결론
OCI 프리티어에서 외부 포트 접속이 되지 않는 문제는 네트워크 설정뿐만 아니라 퍼블릭 IP의 실제 연결 상태 및 애플리케이션의 리스닝 상태에 따라 발생할 수 있습니다. 위 사례처럼 퍼블릭 IP를 새로 연결하고 Node.js 앱을 재기동하는 것으로 외부 접속이 가능해졌으며, Swagger 문서 페이지도 외부에서 정상 확인되었습니다.