웹 개발
배포 후 포트 설정 때문에 데이터를 못 찾을 때
포트 매핑 문제로 배포 후 데이터에 접근하지 못할 때 확인해야 할 것들을 정리했다.
배포한 후 갑자기 데이터에 접근할 수 없다는 오류가 생기면, 먼저 의심해볼 부분이 포트 설정이다. 로컬에서는 잘 되는데 서버에서만 안 되는 경우가 많다.
포트가 제대로 열려 있는지 확인
서버에서 실제로 앱이 원하는 포트에서 실행 중인지 본다:
# 서버에 접속해서
ssh user@server
# 포트가 열려있는지 확인
sudo ss -lntp | grep 3000 # 만약 앱이 3000 포트를 사용한다면
응답이 나오면 포트가 열려있다. 만약 아무것도 안 보이면 앱이 이 포트에서 실행되지 않은 것이다. 다음을 확인한다:
- 환경 변수에서 포트 설정이 맞는지
- 앱이 실제로 시작했는지
- 시작 로그에 에러가 없는지
네트워크 요청이 제대로 가는지 확인
앱이 포트에서 실행 중이어도, 외부에서 접근할 수 없을 수 있다. 방화벽 설정을 확인한다:
# 로컬에서 테스트
curl -v http://server_ip:3000/api/health
# 또는 서버 내부에서
curl -v http://localhost:3000/api/health
local에서는 응답이 오는데 외부에서는 안 온다면 방화벽이 문제다. Nginx나 Traefik 같은 리버스 프록시가 포트를 제대로 매핑하는지 확인한다.
데이터베이스 포트 확인
앱 자체는 잘 실행되는데 데이터베이스에 접근 못할 때도 있다. 보통 데이터베이스는 다른 포트(5432 for PostgreSQL, 3306 for MySQL 등)에서 실행된다:
# 데이터베이스가 실행 중인지 확인
sudo ss -lntp | grep 5432
# DATABASE_URL 환경 변수가 맞는지 확인
echo $DATABASE_URL
DATABASE_URL이 localhost 또는 127.0.0.1을 가리키고 있다면, Docker 컨테이너 안에서 실행되는 앱은 호스트의 데이터베이스에 접근하지 못한다. 컨테이너 내부 이름을 써야 한다(예: postgres 또는 db).
로그로 흐름 확인
앱 실행 로그를 본다:
# 최근 앱 로그를 본다
sudo journalctl -u app-service -n 50
# 또는 Docker 컨테이너라면
docker logs app-container --tail 50
로그에서 찾아야 할 것:
- "Started on port 3000" 같은 시작 메시지
- "Cannot connect to database" 같은 연결 실패 메시지
- 실제 요청이 들어오는지
배포 후 확인 체크리스트
- 포트가 열려있고 앱이 실행 중인가
- 방화벽/네트워크에서 해당 포트를 허용하는가
- 환경 변수(DATABASE_URL, 포트 번호 등)가 배포 환경에 맞게 설정되었는가
- 데이터베이스가 실행 중이고, 접근할 수 있는가
이 순서대로 확인하면 대부분의 포트 관련 문제를 해결할 수 있다.