이번 주에는 네트워크의 핵심 개념들을 배워요. AWS에서 VPC를 설계하고, Security Group을 설정하고, Kubernetes에서 Service 네트워킹을 이해하려면 이번 주 내용이 기반이 됩니다.

목표는 OSI 7계층 같은 복잡한 내용들을 외우는 게 아니에요. “왜 내 서버에 접속이 안 되지?“를 스스로 디버깅할 수 있는 능력을 키우는 게 목표입니다.

이번 주차부터는 인터넷 등에서 여러 정보를 찾아보셔야 할 것입니다. 이왕이면 영어로 검색하시고, 네이버 블로그나 티스토리 등 개인 블로그들은 정보의 질이 그다지 좋지 않으니 거르세요. 최대한 원문을 찾아보시고, 읽기 힘들다면 번역기나 AI에게 번역을 요청하는걸 추천드립니다. 이 문서에서 제시된 모든 자료를 다 읽을 필요는 없습니다. 직접 찾아보는 경험이 더 도움이 될 거예요!

공부할 내용

아래 주제들을 공부하세요. 각 주제별로 참고 자료를 달아뒀지만, 자료가 안 맞으면 직접 검색해서 자기에게 맞는 걸 찾아도 좋아요.

1. IP 주소와 서브넷 (CIDR)

이 부분이 이번 주에서 가장 중요해요. AWS VPC 설계가 문자 그대로 “CIDR 범위 위에 서브넷을 나누는 것"이기 때문이에요.

아래 질문에 답할 수 있을 때까지 공부하세요:

  • IP 주소에서 네트워크 부분과 호스트 부분은 어떻게 구분하나?
  • /24는 IP 몇 개를 담을 수 있나? /26은? 일반화하면?
  • 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16은 뭐가 특별한가? 왜 존재하나?

참고 자료

2. DNS

브라우저에 google.com을 입력하면 어떤 일이 일어나는지 추적해보세요. 로컬 캐시부터 루트 서버까지 전체 흐름을 이해하는 게 목표입니다.

알아야 할 것: A 레코드, CNAME 레코드, TTL의 의미.

참고 자료

3. 포트와 소켓

하나의 서버에서 SSH, HTTP, Node.js가 동시에 돌아갈 수 있는 이유가 뭔지 알아보세요.

특히 아래 차이를 반드시 이해하세요. 이걸 모르면 Docker와 Kubernetes에서 반드시 문제를 만나요:

  • 127.0.0.1에 bind한 서버 vs 0.0.0.0에 bind한 서버 — Session 1 실험에서 127.0.0.1로 bind했을 때 외부 접속이 안 됐던 이유가 이거예요!

참고 자료

4. HTTPS와 TLS (개념만)

HTTP와 HTTPS의 차이, TLS 인증서가 하는 역할을 이해하면 충분해요.

참고 자료

더 깊이 공부하고 싶다면

네트워크 전체 흐름을 처음부터 끝까지 이해하고 싶다면 아래 자료를 추천합니다.


프로젝트 실습

실습 A: 네트워크 탐색 (서버에서)

실습 서버에 SSH로 접속한 뒤, 아래 명령어들을 실행하고 결과를 이해해보세요.

# 내 서버의 네트워크 상태 파악
ip addr show
ip route show
cat /etc/resolv.conf
ss -tlnp

각 명령어의 결과를 보고 아래 질문에 답해보세요:

  1. 네트워크 인터페이스가 몇 개인가요? loeth0의 차이는?
  2. default gateway의 IP는 무엇이고, 이것이 하는 역할은?
  3. DNS 서버는 어디를 가리키고 있나요?
  4. Session 1에서 만든 서버가 보이나요? 어떤 주소에 bind되어 있나요?
# DNS 해석 과정을 직접 추적해보세요
dig google.com A
dig +trace google.com
  1. dig +trace의 결과에서 루트 서버 → TLD 서버 → 권한 서버로 이어지는 흐름이 보이나요?
# 외부까지 몇 개의 네트워크 장비를 거치는지 확인
traceroute google.com

실습 B: CIDR 계산 연습

계산기 없이 먼저 풀어보고, CIDR Calculator로 검증해보세요.

  1. 10.0.0.0/24에는 몇 개의 IP가 들어가나요?
  2. 10.0.1.5010.0.1.0/26 범위 안에 있나요?
  3. 10.0.1.10010.0.1.0/26 범위 안에 있나요?
  4. 10.0.0.0/16 범위를 /24 서브넷으로 나누면 몇 개의 서브넷이 만들어지나요?
  5. AWS VPC를 10.0.0.0/16으로 만들고, Public Subnet 2개 + Private Subnet 2개를 만들려고 해요. 각 서브넷에 256개의 IP를 담으려면 CIDR을 어떻게 잡아야 할까요? 직접 설계해보세요.

실습 C: 포트와 바인딩 실험

Session 1에서 만든 Node.js 서버의 listen 주소를 바꿔가면서 실험해보세요.

  1. 0.0.0.0:3000으로 실행한 뒤, localhost, 127.0.0.1, 서버의 실제 IP 각각으로 curl을 보내보세요.
  2. 127.0.0.1:3000으로 바꿔서 같은 테스트를 해보세요. 어떤 것이 안 되나요? 왜?
  3. ss -tlnp로 두 경우의 차이를 확인해보세요.

심화: 방화벽 (ufw) 실습 (선택)

방화벽의 핵심 개념 네 가지를 이해하세요: 인바운드 vs 아웃바운드, Stateful vs Stateless.

이 구분이 중요한 이유: AWS에서 Security Group(Stateful)과 NACL(Stateless)이 다르게 동작해요. Stateful이 뭔지 모르면 “응답이 왜 안 오지?“로 한 시간을 날릴 수 있어요.

참고 자료

직접 실험해볼 것:

  1. ufw를 활성화하고 3000번 포트만 열어보세요.
  2. 외부에서 3000번과 8080번으로 각각 접속해보세요. 차이가 나나요?
  3. 3000번 규칙을 삭제하면 어떻게 되나요?
  4. 끝나면 원상복구하세요.