Network_11 : 공인 IP, 사설 IP, NAT

이준익·2026년 5월 21일

내 컴퓨터에도 IP 주소가 있고, 스마트폰에도 IP 주소가 있고, 집에 있는 태블릿에도 IP 주소가 있다.
그럼 이 장비들이 전부 인터넷에서 직접 사용할 수 있는 고유한 IP 주소를 하나씩 가지고 있는 걸까?

결론부터 말하면 그렇지 않다.

우리가 집이나 회사에서 사용하는 대부분의 장비는 인터넷에서 직접 보이는 IP 주소가 아니라, 내부 네트워크에서만 사용하는 IP 주소를 가진다. 이때 등장하는 개념이 공인 IP, 사설 IP, 그리고 NAT다.

공인 IP는 인터넷에서 사용하는 주소다

공인 IP는 인터넷에서 직접 사용할 수 있는 IP 주소다.

웹 서버, 클라우드 서버, 공유기, 회사의 외부망 장비처럼 인터넷과 직접 통신해야 하는 장비는 공인 IP를 사용한다.

비유하자면 공인 IP는 실제 우편 주소에 가깝다.

누군가 인터넷을 통해 특정 서버에 접속하려면, 결국 그 서버를 찾아갈 수 있는 주소가 필요하다.
이 주소가 인터넷에서 유일하게 식별되어야 한다.
그래야 여러 네트워크를 거쳐도 “아, 이 목적지는 저쪽으로 보내야 하는구나” 하고 라우터들이 판단할 수 있다.

예를 들어 어떤 서버가 공인 IP 203.0.113.10을 가지고 있다고 해보자.

클라이언트가 이 서버로 요청을 보내면, 인터넷의 라우터들은 목적지 IP를 보고 패킷을 전달한다.

“203.0.113.10으로 가야 하네.”
“그럼 다음 라우터는 이쪽이야.”
“이 네트워크까지 왔으니 이제 해당 서버로 넘기면 되겠네.”

이런 식으로 공인 IP는 인터넷 전체에서 목적지를 찾기 위한 주소로 사용된다.

사설 IP는 내부 네트워크에서 사용하는 주소다

반면 사설 IP는 내부 네트워크에서만 사용하는 IP 주소다.

집에서 와이파이에 연결된 내 노트북의 IP를 확인해보면 보통 이런 주소가 나온다.

192.168.0.10
192.168.1.15
10.0.0.5
172.16.0.20

이런 주소들은 인터넷 전체에서 유일한 주소가 아니다.
다른 집, 다른 회사, 다른 카페에서도 똑같은 192.168.0.10을 사용할 수 있다.

처음에는 이게 이상하게 느껴졌다.

“IP 주소는 장비를 구분하는 주소라면서, 중복되어도 되는 건가?”

여기서 중요한 건 사설 IP는 내부 네트워크 안에서만 의미가 있다는 점이다.

우리 집 안에서 192.168.0.10은 내 노트북일 수 있다.
하지만 옆집의 192.168.0.10은 전혀 다른 사람의 스마트폰일 수 있다.

마치 아파트 안에서 “101호”라는 번호가 여러 건물에 존재할 수 있는 것과 비슷하다.
A아파트 101호와 B아파트 101호는 같은 101호지만, 서로 다른 공간 안에 있기 때문에 충돌하지 않는다.

사설 IP도 마찬가지다.

내부 네트워크라는 범위 안에서만 유효하기 때문에 여러 곳에서 같은 사설 IP를 사용해도 문제가 되지 않는다.

왜 사설 IP가 필요할까?

가장 큰 이유는 IPv4 주소가 부족하기 때문이다.

IPv4 주소는 32비트로 구성되어 있고, 이론적으로 약 43억 개 정도를 만들 수 있다.
처음에는 이 정도면 충분해 보였을 수도 있다.

하지만 지금은 컴퓨터, 스마트폰, 태블릿, 서버, IoT 기기, 네트워크 장비까지 너무 많은 장비가 인터넷에 연결된다.

모든 장비에 공인 IPv4 주소를 하나씩 나눠주기에는 주소가 부족하다.

그래서 나온 방식이 이렇다.

내부 네트워크에서는 사설 IP를 사용한다.
인터넷으로 나갈 때만 공인 IP를 사용한다.

즉, 집 안에서는 노트북, 스마트폰, 태블릿이 각각 사설 IP를 가진다.

노트북: 192.168.0.10
스마트폰: 192.168.0.11
태블릿: 192.168.0.12

하지만 인터넷 입장에서 보면 이 장비들이 직접 보이는 것이 아니라, 보통 공유기의 공인 IP 하나만 보인다.

공유기 공인 IP: 203.0.113.5

내부에서는 여러 장비가 존재하지만, 외부 인터넷과 통신할 때는 하나의 공인 IP를 함께 사용하는 구조가 되는 것이다.

NAT는 사설 IP를 공인 IP로 바꿔주는 기술이다

NAT는 Network Address Translation의 약자다.
말 그대로 네트워크 주소를 변환하는 기술이다.

보통은 내부 네트워크의 사설 IP를 외부 인터넷에서 사용할 공인 IP로 변환할 때 사용한다.

예를 들어 내 노트북의 IP가 192.168.0.10이고, 공유기의 공인 IP가 203.0.113.5라고 해보자.

내 노트북이 웹 서버 93.184.216.34에 접속하려고 한다.

처음 패킷은 이렇게 만들어질 수 있다.

출발지 IP: 192.168.0.10
목적지 IP: 93.184.216.34

그런데 이 패킷이 그대로 인터넷으로 나가면 문제가 생긴다.

192.168.0.10은 사설 IP이기 때문에 인터넷에서 직접 찾아갈 수 없는 주소다.
외부 서버가 응답을 보내려고 해도 192.168.0.10이 어디에 있는지 알 수 없다.

그래서 공유기가 중간에서 출발지 IP를 바꾼다.

변환 전
출발지 IP: 192.168.0.10
목적지 IP: 93.184.216.34

변환 후
출발지 IP: 203.0.113.5
목적지 IP: 93.184.216.34

외부 서버 입장에서는 요청이 203.0.113.5에서 온 것처럼 보인다.
서버는 이 공인 IP로 응답을 보낸다.

응답이 다시 공유기로 돌아오면, 공유기는 기억해둔 정보를 보고 판단한다.

“아까 192.168.0.10이 이 서버에 요청을 보냈었지.”
“그러면 이 응답은 다시 192.168.0.10에게 전달해야겠다.”

이렇게 NAT는 내부 사설 IP와 외부 공인 IP 사이에서 주소를 바꿔주는 역할을 한다.

그런데 내부 장비가 여러 대라면?

여기서 한 번 더 생각해볼 문제가 있다.

집 안에 노트북만 있는 것이 아니라 스마트폰, 태블릿도 있다고 해보자.

노트북: 192.168.0.10
스마트폰: 192.168.0.11
태블릿: 192.168.0.12

이 세 장비가 동시에 같은 웹 서버에 접속하면 어떻게 될까?

외부 서버 입장에서는 세 요청이 모두 같은 공인 IP에서 온 것처럼 보일 수 있다.

공유기 공인 IP: 203.0.113.5

그러면 응답이 돌아왔을 때 공유기는 어떻게 구분할까?

“이 응답은 노트북에게 가야 하나?”
“스마트폰에게 가야 하나?”
“태블릿에게 가야 하나?”

단순히 IP 주소만 바꾸는 NAT만으로는 부족해진다.
그래서 함께 사용되는 것이 포트 기반 NAT, 또는 NAPT다.

NAPT는 IP와 포트를 함께 변환한다

NAPT는 Network Address Port Translation의 약자다.
IP 주소뿐만 아니라 포트 번호까지 함께 변환하는 방식이다.

우리가 흔히 말하는 NAT 환경에서는 실제로 NAPT가 사용되는 경우가 많다.

예를 들어 내부 장비들이 각각 웹 서버에 요청을 보낸다고 해보자.

노트북
192.168.0.10:50001 → 93.184.216.34:443

스마트폰
192.168.0.11:50002 → 93.184.216.34:443

태블릿
192.168.0.12:50003 → 93.184.216.34:443

공유기는 이 요청들을 외부로 내보내면서 출발지 IP를 자신의 공인 IP로 바꾼다.
그리고 필요하다면 포트 번호도 바꾼다.

203.0.113.5:61001 → 93.184.216.34:443
203.0.113.5:61002 → 93.184.216.34:443
203.0.113.5:61003 → 93.184.216.34:443

외부 서버 입장에서는 모두 203.0.113.5에서 온 요청으로 보이지만, 포트 번호가 다르다.

공유기는 내부적으로 이런 변환 테이블을 기억한다.

203.0.113.5:61001 ↔ 192.168.0.10:50001
203.0.113.5:61002 ↔ 192.168.0.11:50002
203.0.113.5:61003 ↔ 192.168.0.12:50003

이제 응답이 돌아오면 공유기는 목적지 포트를 보고 판단할 수 있다.

“목적지 포트가 61001이네. 이건 노트북으로 보내야겠다.”
“61002면 스마트폰이었지.”
“61003은 태블릿으로 보내면 되겠네.”

여기서 중요한 건, 여러 내부 장비가 하나의 공인 IP를 공유할 수 있는 이유가 포트 번호를 함께 사용하기 때문이라는 점이다.

공인 IP 하나만 보면 모두 같은 집에서 나간 요청처럼 보인다.
하지만 공유기 입장에서는 포트 번호까지 함께 보면 각각의 요청을 구분할 수 있다.

NAT는 일종의 안내 데스크처럼 동작한다

NAT를 안내 데스크에 비유하면 이해하기 쉽다.

회사 건물 안에는 여러 직원이 있다.

개발팀 민수
디자인팀 지연
인프라팀 현우

하지만 외부 사람은 이 직원들의 자리 번호를 직접 알지 못한다.
외부에 공개된 대표 번호만 알고 있다.

회사 대표 번호: 02-1234-5678

직원이 외부에 전화를 걸면, 외부 사람에게는 회사 대표 번호가 보인다.
나중에 외부에서 응답 전화가 오면 안내 데스크가 기억하고 있다가 해당 직원에게 연결해준다.

“아까 이 번호로 전화한 건 개발팀 민수였어.”
“그러면 이 응답 전화는 민수에게 돌려주자.”

NAT도 비슷하다.

내부 장비의 사설 IP는 외부에 직접 노출되지 않는다.
대신 공유기의 공인 IP로 바뀌어 나간다.
그리고 돌아오는 응답은 NAT 테이블을 보고 원래 내부 장비로 전달된다.

NAT를 거치면 내부 장비는 직접 보이지 않는다

NAT를 사용하면 내부 장비들은 외부 인터넷에 직접 노출되지 않는다.

외부에서 보면 내 노트북의 192.168.0.10이 보이는 것이 아니라, 공유기의 공인 IP만 보인다.

이 점은 보안적으로도 어느 정도 장점이 있다.
외부에서 내부 장비로 바로 접근하기 어렵기 때문이다.

하지만 이것이 방화벽을 완전히 대체한다는 뜻은 아니다.
NAT는 기본적으로 주소 변환 기술이다.
보안 장비라기보다는, 내부 주소와 외부 주소 사이를 변환하면서 결과적으로 내부 장비가 직접 드러나지 않는 효과가 생긴다고 보는 편이 좋다.

또 하나 중요한 점은 NAT 환경에서는 외부에서 내부 장비로 먼저 접속하기가 어렵다는 것이다.

내부 장비가 먼저 요청을 보낸 경우에는 공유기가 변환 테이블을 만들기 때문에 응답을 돌려줄 수 있다.
하지만 외부에서 갑자기 203.0.113.5로 접속한다고 해서 공유기가 그 요청을 내부의 어떤 장비로 보내야 할지 알 수는 없다.

이럴 때는 포트 포워딩 같은 설정이 필요하다.
특정 포트로 들어온 요청은 내부의 특정 장비로 보내라고 미리 정해두는 방식이다.

예를 들면 이런 식이다.

공인 IP 203.0.113.5:8080으로 들어온 요청
→ 내부 192.168.0.10:80으로 전달

이렇게 하면 외부에서 공유기의 특정 포트로 접근했을 때 내부 서버로 연결할 수 있다.

개발할 때 NAT를 왜 알아야 할까?

개발을 하다 보면 “내 컴퓨터에서는 되는데 외부에서는 안 된다”는 상황을 자주 만난다.

로컬에서 서버를 띄우면 보통 이런 주소로 접속한다.

localhost:3000
192.168.0.10:3000

내 컴퓨터 안에서는 잘 된다.
같은 와이파이에 연결된 다른 장비에서도 192.168.0.10:3000으로 접속할 수 있을 수 있다.

하지만 외부 인터넷에서는 이 주소로 접속할 수 없다.

왜냐하면 192.168.0.10은 사설 IP이기 때문이다.
인터넷에서는 이 주소를 목적지로 찾아올 수 없다.

외부에서 접근하려면 공인 IP가 필요하고, 공유기나 방화벽에서 해당 요청을 내부 서버로 전달하도록 설정해야 한다.

클라우드 환경에서도 비슷한 개념이 계속 등장한다.

서버 인스턴스가 사설 IP만 가지고 있으면 인터넷에서 직접 접근할 수 없다.
외부에서 접속해야 한다면 공인 IP를 붙이거나, 로드밸런서나 NAT Gateway 같은 장비를 거쳐야 한다.

반대로 내부 서버가 외부 인터넷으로 패키지를 다운로드하거나 API 요청을 보내야 할 때도 NAT가 필요할 수 있다.
서버 자체는 사설 IP만 가지고 있지만, NAT Gateway를 통해 외부 인터넷으로 나갈 수 있는 구조를 만드는 것이다.

즉 NAT는 단순히 집 공유기에서만 쓰는 개념이 아니다.
개발 환경, 배포 환경, 클라우드 네트워크 구조를 이해할 때도 계속 등장한다.

공인 IP, 사설 IP, NAT를 하나의 흐름으로 보면

내 컴퓨터가 인터넷의 웹 서버에 접속하는 흐름을 다시 보면 이렇다.

먼저 내 컴퓨터는 내부 네트워크에서 사설 IP를 가지고 있다.

내 컴퓨터: 192.168.0.10

웹 서버는 인터넷에서 접근 가능한 공인 IP를 가지고 있다.

웹 서버: 93.184.216.34

내 컴퓨터가 웹 서버로 요청을 보내면, 패킷은 공유기를 지나간다.

공유기는 NAT를 수행한다.

192.168.0.10:50001
→ 203.0.113.5:61001

웹 서버는 203.0.113.5:61001로 응답을 보낸다.

공유기는 NAT 테이블을 보고 다시 내부 장비를 찾는다.

203.0.113.5:61001
→ 192.168.0.10:50001

결국 내 컴퓨터는 사설 IP를 사용하고 있지만, 인터넷과 통신할 수 있다.
그 사이에서 공유기가 공인 IP와 포트 번호를 이용해 요청과 응답을 이어주고 있기 때문이다.

여기서 중요한 건 NAT가 단순히 “IP를 바꾼다”에서 끝나는 개념이 아니라는 점이다.

NAT는 내부 네트워크와 외부 인터넷 사이의 경계에서 동작한다.
내부 장비들이 사설 IP를 사용하면서도 인터넷과 통신할 수 있게 해준다.
그리고 여러 장비가 하나의 공인 IP를 공유할 수 있도록 포트 번호까지 함께 활용한다.

그래서 공인 IP, 사설 IP, NAT를 이해하면 “내 컴퓨터는 분명 IP가 있는데 왜 외부에서 접속이 안 되지?”, “클라우드 서버는 왜 공인 IP가 있어야 하지?”, “NAT Gateway는 왜 필요하지?” 같은 질문들이 조금씩 연결되기 시작한다.

profile
밥 잘 먹고 잠 잘 잡니다

0개의 댓글