Skip to content

웹 서버 포트 문제 해결 #8

@Tae4an

Description

@Tae4an

🌐 네트워크 흐름 이해하기

외부에서 내 웹 서버로의 접근 흐름:

외부 사용자 → 공인 IP (xxx.xxx.xx.xx:80) → 공유기 → 내부 IP (your.internal.ip:80) → 도커 컨테이너 (80:80)

1️⃣ 외부 요청

  • 사용자가 http://xxx.xxx.xx.xx 또는 Cloudflare DNS에 등록된 도메인으로 접속
  • 요청이 포트 80을 통해 공유기에 도달

2️⃣ 공유기 포트 포워딩

  • 공유기가 포트 80으로 들어오는 요청을 내부 IP의 포트 80으로 전달
  • 설정: 외부 포트 80 → 내부 IP(your.internal.ip):80

3️⃣ 도커 컨테이너

  • 호스트 머신의 포트 80이 도커 컨테이너의 포트 80과 연결됨
  • 설정: -p 80:80 (호스트 포트:컨테이너 포트)

4️⃣ 스프링부트 서버

  • 도커 컨테이너 내에서 스프링부트 서버가 포트 80으로 실행
  • 설정: server.port=80

🚨 발생했던 문제들

❌ 포트 불일치 문제

처음에는 포트 설정이 일치하지 않아 문제 발생:

  • 공유기: 외부 80 → 내부 8080
  • 스프링부트: 포트 80
  • 도커: 8080:8080

🔄 해결: 모든 포트를 80으로 통일

  • 공유기: 외부 80 → 내부 80
  • 스프링부트: 포트 80
  • 도커: 80:80

❌ 데이터베이스 연결 문제

도커 컨테이너에서 MySQL 접근 시 문제 발생:

  • 컨테이너 내부에서 localhost 또는 127.0.0.1로 접근 시도
  • 컨테이너는 독립된 네트워크 환경을 가지므로 호스트의 MySQL에 접근 불가

🔄 해결: 호스트 머신의 내부 IP 주소 사용

  • spring.datasource.url=jdbc:mysql://your.internal.ip:3306/mydatabase

💡 배운 교훈

  1. 포트 일관성의 중요성

    • 모든 계층(공유기, 호스트, 도커, 애플리케이션)에서 포트 설정이 일치해야 함
    • 포트 불일치는 연결 문제의 주요 원인
  2. 도커 네트워크 이해

    • 도커 컨테이너는 독립된 네트워크 환경을 가짐
    • localhost는 컨테이너 자신을 가리키므로, 호스트 서비스에 접근할 때는 호스트 IP 필요
  3. 데이터베이스 연결 설정

    • MySQL이 호스트에서 실행 중일 때, 컨테이너에서는 호스트 IP로 접근해야 함
    • 내부 네트워크에서는 3306 포트가 열려 있어야 함 (외부에서는 필요 없음)
  4. 보안 고려사항

    • Cloudflare DNS 등록으로 원본 서버 IP 보호 가능
    • 불필요한 포트는 외부에 노출하지 않는 것이 좋음

🛠️ 최종 설정

공유기 설정

  • 외부 포트: 80
  • 내부 IP: your.internal.ip
  • 내부 포트: 80

도커 컨테이너 설정

docker run -p 80:80 my-web-server-image

스프링부트 설정

server.port=80
spring.datasource.url=jdbc:mysql://your.internal.ip:3306/mydatabase

Cloudflare DNS 설정

  • A 레코드: 도메인 → 공인 IP
  • 프록시 활성화로 원본 IP 보호

이제 외부에서 도메인을 통해 웹 서버에 안전하게 접근할 수 있습니다! 🎉

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions