
내부 IP(사설 IP)와 외부 IP(공인 IP)를 서로 바꿔주는 인터넷 공유기의 기술
➡️ 즉, 집안 컴퓨터(사설 IP)가 인터넷(공인 IP)으로 나갈 수 있도록
인터넷 공유기(라우터)가 주소를 바꿔주는 역할을 한다.
☑️ 내가 집에서 웹 서버를 만들었다고 가정:
- 내부 IP:
192.168.x.x- 웹 서버는 잘 돌아가고 있다. ( localhost에 접속하면 잘 보임 )
⚠️ 그런데, 다른 사람이 인터넷에서
http://나의공인IP로 접속하려고 하면 접속이 안된다..!
➡️ NAT(공유기)는 외부에서 들어오는 요청을 누구한테 전달해야 할지 모른다.
➡️ 외부 요청을 내부 IP로 자동으로 전달하지 않기 때문.❓내가 구글 접속하기 위해 구글로부터 응답을 받아오는 것은 외부요청을 내부IP로 자동으로 전달받았기 때문에 구글접속이 가능한거 아니야??!
➡️ 정정하자면, 내가 말한 "구글 접속"은 외부에서 들어오는 요청이 아니라, 내부에서 나가는 요청이다.
↳ 내가 구글에 접속할 때: 나 → 공유기(NAT) → 구글서버(외부망)
↳ 그 다음 구글에서 응답을 보낼 때: 구글서버 → 공유기(NAT) → 내 컴퓨터
👉 이건 내부→외부→내부흐름이다.
👉 NAT가 이미 누가 요청했는지 알고 있으니까 응답도 정확히 돌려주기가 가능( 전체 구조 설명 )
📤 내가 요청을 보낼 때
1. 내 컴퓨터(사설 IP:192.168.x.x)가 구글 접속 요청
2. NAT가 요청을 공인 IP로 바꿔서 구글에 보냄
3. 이때 포트 번호(세션 정보)를 기록해둔다. (이 요청이 누구(내부IP)로부터 왔는지 기억해둠)
↳ 예)192.168.x.x:12345 → 1.2.3.4:80이 요청을123.123.123.123:54321 → 1.2.3.4:80으로 바꿔서 보냄
(공인 IP =123.123.123.123)
(구글 서버 IP예시 =1.2.3.4)
(내 컴퓨터 임시포트 =12345,54321(클라이언트가 요청할 때 랜덤으로 정해짐))
📥 구글이 응답할 때
1. 구글이 공인 IP(123.123.123.123)의 포트 54321로 응답을 보냄
2. 공유기(NAT)는 이건 방금192.168.x.x가 보낸거구나 하고 기억해둔 세션 정보를 기반으로 나에게 정확히 응답을 돌려줌
🚫 그런데 외부에서 먼저 "들어오는 요청"이라면?
( 상황 가정 )
• 나는 집에서 웹 서버를 띄워놓은 상태
• 내 공유기의 공인 IP는123.123.123.123
• 웹 서버는 포트80에서 대기중
(내 친구가 외부에서 접속하려면?)
• 브라우저에 입력 →http://123.123.123.123:80
↳ 이건 인터넷에 있는 나의 공인 IP의 80번 포트(웹서버)에 접속하라는 뜻
↳ 즉, 나의 집 공유기로 요청이 들어는 상황이 됨
(= 외부에서 나의 IP로 접속함)
(외부에서 들어오는 요청은 거절한다)
• NAT(공유기)는 기본적으로 외부에서 들어오는 요청을 차단!
• 그래서123.123.123.123:80요청이 들어와도 누구에게 전달해야 하는지를 모르기때문에 버려버림.
❓외부에서 먼저 NAT에게 접속 요청을 보내더라도,
NAT은 그 외부 IP를 알 수 있으니까 응답을 돌려주면 되는거 아닌가??
• 논리적으로 맞아 보이지만, NAT의 동작 원리상 불가능하다
• ( NAT 작동과정 )
↳ 내부 → 외부로 나가는 요청이 발생하면, NAT는 아래 정보를 NAT테이블에 저장.
↳ 이렇게 저장해둔 상태여야 나중에 응답이 왔을 때, 누구의 요청에 대한 응답인지 파악 가능
• ( 그런데, 외부에서 먼저 요청이 오면 )
8.8.8.8:45678 → 123.123.123.123:80
이건 NAT가 전혀 알지 못하는 연결이다.
NAT 테이블에 이 연결 정보가 없기 때문에
어디로 보내야할지 몰라서 버려버림.
➡️ 결론: NAT는 "기억하고 있는 연결"에만 응답을 전달할 수 있고, 처음 보는 외부 요청은 처리하지 않는다.
🎯해결방법: 공유기 설정에서 포트포워딩 해주면
→ "80번 포트로 들어오는 요청은 192.168.0.5로 보내줘!"라고 지정할 수 있다.
📛 NAT 환경의 핵심 문제점
- 사설 IP
↳ 외부에서는 절대 직접 접근 불가- NAT 공유기
↳ 외부 요청을 내부 서버로 전달하지 않음 (특별한 설정 없이는)- 포트 포워딩
↳ 필요하지만, 설정이 어렵고 보안문제 有- ISP 제한
↳ 대부분의 인터넷 회사는 개인 회선에 서버 운영을 막고 있다.
🆗 결론
웹 서버를 외부 사람도 접속 가능하게 하려면,
항상 켜져 있고, 공인 IP를 가진 서버가 필요!
☑️ 그래서 AWS, 구름, 카페24 같은 "인터넷망에 있는 서버"를 빌려야 한다.
→ 클라우드 서버에 웹 서버를 설치해두면, 그 서버가 계속 켜져 있으니까, 사람들이 언제든지 접속가능한 웹사이트가 된다!
📌 클라우드를 서버를 쓰면 좋은 점
- 24시간 실행
↳ 클라우드 서버는 계속 켜져 있어서, 내가 컴퓨터를 꺼도 웹 서버가 살아있다.- 공인 IP 보유
↳ 클라우드 서버는 외부에서 접근 가능한 IP를 가짐 (NAT문제X)- 안정성
↳ 서버 전용 환경이라 접근 속도나 성능이 안정적- 접근 가능
↳ 누구든 인터넷만 있으면 웹 페이지에 접속 가능- 확장성
↳ 서버 성능이 부족하면 쉽게 CPU, RAM, 저장 공간 확장 가능