← 전체 글로 돌아가기

웹 개발

배포 후 포트 설정 때문에 데이터를 못 찾을 때

포트 매핑 문제로 배포 후 데이터에 접근하지 못할 때 확인해야 할 것들을 정리했다.

배포한 후 갑자기 데이터에 접근할 수 없다는 오류가 생기면, 먼저 의심해볼 부분이 포트 설정이다. 로컬에서는 잘 되는데 서버에서만 안 되는 경우가 많다.

포트가 제대로 열려 있는지 확인

서버에서 실제로 앱이 원하는 포트에서 실행 중인지 본다:

# 서버에 접속해서
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_URLlocalhost 또는 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" 같은 연결 실패 메시지
  • 실제 요청이 들어오는지

배포 후 확인 체크리스트

  1. 포트가 열려있고 앱이 실행 중인가
  2. 방화벽/네트워크에서 해당 포트를 허용하는가
  3. 환경 변수(DATABASE_URL, 포트 번호 등)가 배포 환경에 맞게 설정되었는가
  4. 데이터베이스가 실행 중이고, 접근할 수 있는가

이 순서대로 확인하면 대부분의 포트 관련 문제를 해결할 수 있다.