왜 계층으로 나누는가
네트워크를 처음 배울 때 가장 먼저, 그리고 가장 자주 듣는 말이 '계층'입니다. OSI 7계층, TCP/IP 4계층 같은 말이 시험에도 면접에도 빠지지 않고 나옵니다. 그런데 정작 '왜 굳이 계층으로 나누는가'를 설명해 주는 경우는 드뭅니다. 이 질문에 답할 수 있어야 나머지가 머리에 들어옵니다.
우체국 비유
편지 한 통을 외국 친구에게 보낸다고 합시다. 여러분은 편지의 내용을 씁니다. 받는 사람의 언어로, 받는 사람이 이해할 내용을 적습니다. 이때 여러분은 그 편지가 비행기를 탈지 배를 탈지, 어느 우체국을 거칠지 전혀 신경 쓰지 않습니다.
봉투에 주소를 적어 우체통에 넣으면, 그다음부터는 우체국이 알아서 합니다. 우체국은 편지의 내용에는 관심이 없습니다. 오직 주소만 보고 다음 집배 센터로 넘깁니다. 비행기를 모는 조종사는 편지의 내용도, 받는 사람의 주소도 모릅니다. 그저 화물을 목적지 공항까지 안전하게 옮길 뿐입니다.
여기에 핵심이 있습니다. 편지를 쓰는 사람, 주소를 보고 분류하는 우체국, 화물을 운반하는 항공사는 각자 자기 일만 잘하면 됩니다. 그리고 서로의 일을 몰라도 됩니다. 편지 내용이 한국어든 영어든 우체국이 하는 일은 똑같고, 운반 수단이 비행기든 배든 편지 내용은 바뀌지 않습니다. 이렇게 책임을 층층이 나누고 서로의 속사정을 감추는 것이 바로 계층화입니다.
계층화가 주는 세 가지 선물
계층으로 나누면 무엇이 좋을까요. 크게 세 가지입니다.
첫째, 복잡함이 다스려집니다. '컴퓨터가 어떻게 통신하는가'라는 거대한 문제를 '신호를 보내는 법', '이웃에게 전달하는 법', '먼 곳까지 길을 찾는 법', '프로그램끼리 대화하는 법'처럼 작은 문제로 쪼갭니다. 작은 문제는 풀기 쉽습니다.
둘째, 한 층을 바꿔도 다른 층이 멀쩡합니다. 유선을 무선으로 바꿔도, 즉 가장 아래층의 운반 수단을 갈아 끼워도 그 위에서 도는 웹 브라우저는 코드 한 줄 바꿀 필요가 없습니다. WiFi가 보급될 때 모든 프로그램을 새로 짜지 않아도 되었던 이유가 바로 이것입니다.
셋째, 표준을 나눠 만들 수 있습니다. 각 층이 자기 위아래 층과 주고받는 약속만 지키면 되므로, 서로 다른 회사가 서로 다른 층을 만들어도 전체가 맞물려 돌아갑니다. 인텔이 만든 랜카드 위에서 마이크로소프트가 만든 운영체제가 돌고, 그 위에서 구글이 만든 브라우저가 도는 일이 가능한 것은 이 덕분입니다.
핵심 약속 — 같은 층끼리 대화한다
계층 모델에는 한 가지 우아한 약속이 있습니다. 내 컴퓨터의 어떤 층은, 상대 컴퓨터의 같은 층과 대화하는 것처럼 동작한다는 것입니다. 내 편지를 쓰는 나는 상대편에서 편지를 읽는 친구와 '대화'하고, 내 우체국은 상대편 우체국과 '대화'합니다. 실제 데이터는 아래층으로 내려갔다가 상대편에서 위층으로 올라오지만, 같은 층끼리는 마치 직접 이야기하는 것처럼 자기들만의 약속(프로토콜)을 공유합니다.
이 그림이 머릿속에 자리 잡으면 다음 절의 OSI 7계층과 TCP/IP 모델이 한결 친숙하게 느껴질 것입니다.