Loading Engineering Log...

[Network] NAT 완벽 정리: 사설 IP와 공인 IP ?

네트워크를 공부하다 보면 "공인 IP", "사설 IP"라는 말을 자주 듣게 됩니다. 내 컴퓨터의 IP(예: 192.168.0.5)를 확인해 보고, 네이버에 '내 IP 주소 확인'을 검색해서 나오는 IP(예: 203.248.x.x)를 비교해 보면 서로 완전히 다른 숫자가 나오는 경험, 다들 한 번쯤 있으실 겁니다.

왜 내 컴퓨터의 IP 주소는 두 개일까요? 그리고 이 두 주소는 어떻게 연결되는 걸까요? 이 마법 같은 과정을 가능하게 해주는 핵심 기술, NAT(Network Address Translation)에 대해 아주 쉬운 비유로 알아보겠습니다.

1. NAT가 등장한 이유: "전화번호가 부족해요!"

과거 IP 주소 체계(IPv4)를 처음 만들 때는 약 43억 개의 주소면 전 세계 컴퓨터를 다 연결하고도 남을 줄 알았습니다. 하지만 스마트폰, 태블릿, 각종 IoT 기기들이 폭발적으로 늘어나면서 IP 주소가 심각하게 부족해지는 사태가 발생했습니다.

그래서 똑똑한 엔지니어들은 이런 아이디어를 냅니다.

"모든 기기마다 진짜 IP(공인 IP)를 주지 말고, 공유기(라우터)에만 진짜 IP를 딱 1개 주자. 그리고 공유기에 연결된 기기들은 자기들끼리만 쓰는 가짜 IP(사설 IP)를 나눠 쓰게 만들면 어떨까?"

이 아이디어를 실현하기 위해, 가짜 IP(사설)를 진짜 IP(공인)로 변환해 주는 기술이 필요해졌는데, 이것이 바로 NAT(네트워크 주소 변환)입니다.

2. NAT의 원리: "회사 대표번호와 내선번호"

NAT의 작동 원리는 '회사의 전화 시스템'을 생각하면 완벽하게 일치합니다.

여러분이 다니는 회사에 직원이 100명 있다고 가정해 봅시다. 통신사에서 100개의 개별 전화번호를 모두 돈 주고 사려면 비용이 엄청납니다. 그래서 회사는 대표 전화번호(예: 02-1234-5678) 딱 하나만 개통합니다. 그리고 100명의 직원 책상에는 내선번호(예: 101번, 102번...)를 부여하죠.

  • 공인 IP (Public IP): 회사의 대표 전화번호. 전 세계(인터넷) 어디서든 이 번호로 전화를 걸 수 있습니다.
  • 사설 IP (Private IP): 직원의 내선번호 (192.168.x.x, 10.x.x.x 등). 회사 안에서만 통하고, 외부(인터넷)에서는 이 번호로 직접 전화를 걸 수 없습니다.
  • NAT 라우터 (공유기): 회사의 교환원(안내데스크) 역할입니다.

3. 통신은 어떻게 이루어질까? (NAT Table의 마법)

내선번호 101번(사설 IP 192.168.0.2)을 쓰는 신입사원이 외부 식당(인터넷)에 예약을 하려고 전화를 건다고 생각해 봅시다.

  1. [요청 출발] 101번 자리에서 밖으로 전화를 겁니다.
  2. [주소 변환] 이 전화는 반드시 안내데스크(라우터)를 거칩니다. 교환원(NAT)은 발신자를 101번에서 회사 대표번호(공인 IP)로 살짝 바꿔서 밖으로 내보냅니다.
  3. [기록 남기기] 동시에 교환원은 장부에 기록을 남깁니다. "지금 나간 대표번호 전화는 사실 101번 직원이 건 거야!" (이 장부를 NAT Table이라고 합니다.)
  4. [응답 수신] 식당에서 예약 확인을 위해 회사 대표번호로 회신을 줍니다.
  5. [주소 재변환] 교환원은 장부(NAT Table)를 보고, "아, 이 전화는 아까 101번 직원이 걸었던 전화에 대한 답장이구나!" 하고 파악한 뒤, 101번 자리로 전화를 돌려줍니다.

4. 예시로 보여드릴게

우리집의 컴퓨터와 어떻게 Web이 통신할 수 있는지 궁금하죠?

 

1. 사설 네트워크가 저희가 사용하는 컴퓨터 입니다 

 

2. 요청을 보내면 라우터에서 사설 IP를 공인 IP로 변경하여 서버가 알고있는 IP로 변경합니다

 

3. 서버의 응답을 받은 정보(데이터 패킷)는 라우터에서 다시 매핑 테이블에 기록해놓은 사설 IP로 변경하여 정보를 전달합니다

 

4. Dst! 목적지로 가기위해 사설 IP로 변경한걸 볼 수 있습니다.

5. 백엔드 개발자가 NAT를 알아야 하는 이유

"난 백엔드 개발자인데, 인프라 네트워크까지 알아야 할까?" 라고 생각하실 수 있습니다. 하지만 현대 백엔드 개발에서 필수인 Docker(도커)를 사용할 때 이 NAT가 핵심적인 역할을 합니다.

Docker 엔진을 설치하고 컨테이너를 띄우면, 컨테이너들은 호스트 PC와는 별개로 지들만의 가상 네트워크(기본적으로 172.17.x.x 대역의 사설 IP)를 할당받습니다. 즉, 컨테이너들끼리 작은 네트워크가 있는거죠.

이 컨테이너 내부의 애플리케이션(Spring Boot, Node.js 등)이 외부 인터넷과 통신하거나 API 요청을 보낼 때, 호스트 PC(서버)가 마치 공유기처럼 NAT 역할을 수행하여 컨테이너의 사설 IP를 호스트의 공인 IP로 변환해 외부로 내보냅니다.

따라서 컨테이너 간의 통신이 안 되거나 외부 API 호출에 실패할 때, 이 NAT 라우팅 구조를 머릿속에 그리고 있다면 트러블슈팅을 훨씬 더 빠르고 정확하게 가능합니다. (실제 경험담..)

💡 요약 및 마무리

  • 사설 IP (내선번호): 공유기 안에서 우리끼리만 쓰는 가짜 주소.
  • 공인 IP (대표번호): 인터넷 세상과 통신할 수 있는 유일한 진짜 주소.
  • NAT (교환원): 사설 IP가 인터넷으로 나갈 때 공인 IP로 변신시켜 주고, 응답이 오면 원래 사설 IP로 다시 돌려주는 기술. (흔히 사용하고 있는 공유기의 기능이기도 합니다.)
  • NAT 덕분에 우리는 IP 부족 문제를 해결할 수 있었고, 외부에서 내 컴퓨터(사설 IP)로 직접 접근할 수 없기 때문에 강력한 보안 효과도 얻고 있습니다.

Related Posts

질문이나 보충 의견이 있다면 댓글로 남겨주세요.

오류 제보, 추가 사례, 실무 경험 공유 모두 환영합니다.

📄 본문 💬 댓글