네트워크 프로토콜 입문을 읽고 - 검증 환경 구축하기

네트워크 프로토콜 입문을 읽고 - 검증 환경 구축하기

네트워크 프로토콜 입문을 읽으면서 공부한 내용을 정리해보고자 한다.

WSL2 (Window Subsystme for Linux version 2)

  • 윈도우 OS 안에서 리눅스 OS를 구동하는 도구
  • WSL2를 뒷받침하는 것은 하이퍼바이저 방식의 가상화 기술

가상화

컴퓨터는 운영체제(OS)위에서 돌아간다. 한 대의 물리적인 컴퓨터에서 Window, MacOS, Linux와 같은 여러 운영체제를 동시에 돌리고 싶을 수 있다. 이럴 때는 어떻게 해야할까? 이것을 가능하게 해주는 것이 바로 가상화이다.

하이퍼바이저

물리적인 컴퓨터 자원(CPU, 메모리, 디스크 등)을 여러 개의 가상 컴퓨터(가상 머신, VM)에게 나눠주는 관리자 프로그램이다. 즉 하이퍼바이저 덕분에 하나의 컴퓨터에서 여러 개의 가상 머신을 두고 각각의 VM은 독립적으로 자신의 운영체제를 설치해서 돌릴 수 있다.

하이버바이저에 구현방법은 두 가지가 있다.

  • 타입1(베어메탈 하이퍼바이저): OS가 없는 하드웨어에 하이퍼바이저를 설치하고, 이 위에 VM을 설치 / Host OS가 없기 때문에 더 빠르다.
    • 하드웨어 -> 하이퍼바이저 -> VM
  • 타입2(호스트 기반 하이퍼아바이저): 기존 OS 위에 하이퍼바이저를 설치하고, 이 위에 VM을 설치 / 이미 하드웨어에 OS가 있기 때문에 더 쉽게 사용할 수 있다.
    • 하드웨어 -> 호스트 OS -> 하이퍼바이저 -> VM

가상화, 하이퍼바이저 이야기를 하면 컨테이너 이야기가 꼭 나오기 때문에 컨테이너에 대해서도 정리해보고자 한다.

컨테이너

하이퍼바이저는 VM을 만들고 VM은 자기자신만의 OS가 필요하다. 그런데 OS를 관리한다는 것은 너무 번거롭기 때문에 정말 필요한 것만 뽑아서 가상화할 수는 없을까? 라는 물음에서부터 컨테이너가 시작했다.

즉 컨테이너는 OS 없이 실행에 필요한 라이브러리/설정만을 묶어서 독립적으로 실행할 수 있게 해주는 것을 말한다.

도커 (Docker)

  • 도커 사가 제공하는 오픈소스인 컨테이너형 가상화 도구
  • 도커를 사용하면 하나의 리눅스 OS 위에서 마치 여러 개의 리눅스 OS가 동작하는 것처럼 보이게할 수 있다.
  • 도커엔진, 이미지, 컨테이너의 세 가지로 구성되어 있다.

도커엔진

컨테이너를 만들고 실행할 수 있게 해주는 프로그램이다. 도커엔진은 세 부분으로 나뉘어진다.

  • Docker Daemon (dockerd): 백그라운드에서 실행되면서 컨테이너 관리 담당, “컨테이너/이미지 만들어줘” 같은 요청을 처리한다.
  • Docker CLI: docker run, docker ps 같은 명령어로 도커에게 지시할 수 있는 도구
  • REST API: 다른 프로그램이 도커 엔진을 제어할 수 있게 해주는 인터페이스

이미지

사실상 컨테이너는 “실행 중인 프로그램"이고 , 이미지는 그 프로그램을 실행하기 위한 모든 것(코드, 라이브러리, 환경설정 등)을 묶어둔 파일이다. 이미지를 실행하면 컨테이너가 만들어진다.

참고로 이미지는 도커 허브(Docker Hub)라는 도커 사가 운영하는 웹사이트에서 이미지를 다운로드 받을 수 있다. ex) MySQL이 설치된 이미지

PC에 도구 설치하기

MacOS에서 Ubuntu VM을 실행하기 위해 multipass를 설치했다.

1
multipass launch 22.04 --cpus 2 --name UBUNTU --mount /Users/yumin/tinet:/mnt/c/tinet
  • multipass launch 22.04: Ubuntu 22.04 LTS 이미지를 내려받아서 VM을 띄운다.
  • –cpus 2: Mac CPU 코어 2개를 할당, VM이 실행되면 2개의 가상 CPU를 사용할 수 있게 된다.
  • –mount /Users/yumin/tinet:/mnt/c/tinet: Mac OS Host 디렉토리와 Unbuntu VM 디렉토리를 연결하는 옵션, /Users/yumin/tinet 폴더에 있는 파일들은 VM 안에서는 /mnt/c/tinet 경로에 보이는 것이다!

집에서 웹사이트를 본다.

집에서 웹사이트를 본다는 것은 다음과 같은 순서로 진행된다.

Image
  1. PC에서 요청 시작 -> L2 스위치

집에서 쓰는 PC가 인터넷에 접속하려면 먼저 물리적/무선 연결이 필요하다.

  • LAN 케이블: 흔히 말하는 유선 Ethernet 케이블
  • 전파(Wi-Fi): 무선으로 데이터를 주고받는 방식

이때 L2 스위치가 집 안 LAN에서 데이터를 올바른 장치로 전달해주는 역할을 한다.

  1. L2 스위치 -> 광대역 라우터

PC의 요청은 L2 스위치를 통해 광대역 라우터로 전달된다. 라우터는 집과 외부 인테넛을 연결해주는 문과 같은 역할을 한다.

  1. 광대역 라우터 -> 인터넷 라우터 -> 방화벽

라우터를 지나면 외부 서버로 가기 전에 방화벽이 요청을 검사한다.

  1. 방화벽 -> 부하 분산 장치

서버 사이트에 도착하면 부하 분산 장치가 어떤 서버로 요청을 보낼지 결정한다. 웹 사이트에 여러 대의 서버가 있을 경우 부하를 나누어 처리 속도를 높이고 안정성을 유지할 수 있다.