모던지 / 컴퓨터과학 / 네트워크와 인터넷 2강. 웹은 인터넷이 아닙니다

네트워크와 인터넷 2강. 웹은 인터넷이 아닙니다

웹은 인터넷 위에 얹힌 여러 서비스 중 하나일 뿐입니다. 한 물리학자가 사내 문서를 정리하려다 만든 서비스죠.

풀고 시작

문제 1. 웹과 인터넷의 관계를 가장 정확히 말한 것은 무엇일까요?
인터넷은 패킷을 실어 나르는 기반이고, 웹은 그 위에서 HTTP라는 규약으로 문서를 주고받는 응용 서비스입니다. 이메일이나 실시간 통화처럼 웹이 아닌 인터넷 서비스도 많으므로 둘을 같은 것으로 보면 안 됩니다.

모호하지만 흥미롭군

1989년 유럽입자물리연구소(CERN)의 젊은 연구원 팀 버너스리(Tim Berners-Lee)는 제안서 하나를 상사에게 올렸습니다. 연구소에는 수천 명이 오가며 각자 다른 컴퓨터에 문서를 쌓아 두는데, 누가 무엇을 어디에 뒀는지 아무도 몰랐죠. 상사가 문서 여백에 적은 평이 유명합니다. "모호하지만 흥미롭다." 그 모호한 제안이 오늘의 웹입니다.

버너스리가 만든 것은 세 가지였습니다. 문서마다 세상에서 유일한 이름을 주는 주소 체계 URL, 그 주소로 문서를 요청하고 받아 오는 대화 규약 HTTP, 문서 안에 다른 문서로 가는 링크를 심는 표기법 HTML입니다. 셋이 함께 있어야 웹입니다. 주소가 있어야 가리킬 수 있고, 규약이 있어야 가져올 수 있으며, 링크가 있어야 문서들이 그물이 되니까요. 결정적인 선택은 그다음이었습니다. 1993년 CERN은 웹 기술을 누구나 로열티 없이 쓸 수 있도록 공개했습니다. 사용료를 매겼다면 웹은 경쟁하던 여러 하이퍼텍스트 시스템 중 하나로 남았을 가능성이 큽니다.

요청 한 번, 응답 한 번

주소창에 주소를 넣고 엔터를 누르면 무슨 일이 벌어질까요. 브라우저는 먼저 URL을 조각냅니다. 어떤 규약을 쓸지, 어느 호스트인지, 그 안의 어떤 경로인지로 나누죠. 호스트 이름은 1강에서 본 DNS를 통해 IP 주소로 바뀌고, 그 주소로 TCP 연결이 열리며, 보통 그 위에 암호화 계층이 한 겹 더 씌워집니다. 그 통로로 브라우저가 보내는 것은 짧은 텍스트 한 덩어리입니다. 이 경로의 문서를 달라는 요청과 부가 정보 몇 줄이 전부죠.

서버는 상태 코드와 함께 응답합니다. 200은 잘 처리했다는 뜻이고, 404는 그런 문서가 없다는 뜻이며, 301은 주소가 영구히 옮겨졌다는 안내입니다. 여기서 중요한 성질이 하나 있습니다. HTTP는 상태 없는(stateless) 규약입니다. 서버는 방금 응답한 요청을 기본적으로 기억하지 않고, 다음 요청은 완전한 남남으로 도착합니다. 수많은 사용자를 감당해야 하는 서버 입장에서는 잊어버리는 편이 훨씬 가볍기 때문이죠.

파일을 읽어 주던 서버가 프로그램이 되기까지

초기 웹 서버가 한 일은 단순했습니다. 요청받은 경로의 파일을 디스크에서 찾아 그대로 돌려주는 것이었죠. 누가 요청하든 같은 파일이 나오는 정적 웹입니다. 오래가지 못했습니다. 게시판이나 검색 결과처럼 요청할 때마다 내용이 달라야 하는 것이 필요해졌으니까요. 그래서 서버는 파일을 읽는 대신 프로그램을 실행해 그 자리에서 HTML을 만들어 내보내기 시작합니다.

다음 전환은 실행 장소가 옮겨진 것입니다. 자바스크립트가 브라우저 안에서 돌면서, 서버가 보낸 문서를 브라우저가 직접 고쳐 쓸 수 있게 됐습니다. 오늘날 많은 서비스는 화면 전체를 다시 받는 대신 필요한 데이터만 조각으로 요청해 화면 일부만 갈아 끼웁니다. 문서를 보여 주던 웹이 프로그램을 실행하는 플랫폼이 된 셈이죠. 편해진 만큼 대가도 분명합니다. 첫 화면이 뜨기까지 내려받고 실행해야 할 코드가 늘었고, 자바스크립트가 돌지 않는 환경에서는 아무것도 보이지 않는 페이지가 생겼습니다.

브라우저는 생각보다 훨씬 많은 일을 합니다

브라우저를 문서 뷰어로만 생각하면 실제 하는 일을 크게 과소평가하는 것입니다. 받아 온 HTML을 해석해 요소들의 트리 구조인 DOM을 세우고, CSS를 읽어 각 요소에 적용될 스타일을 계산하고, 화면 크기에 맞춰 모든 요소의 위치와 크기를 정한 뒤, 그 결과를 픽셀로 그립니다. 동시에 자바스크립트 엔진이 코드를 실행하며 DOM을 바꾸고, 그 변경이 다시 배치와 그리기를 촉발하죠.

여기에 보안 장치가 겹칩니다. 브라우저는 웹 페이지의 코드를 샌드박스라 부르는 격리 공간에서 실행합니다. 페이지가 여러분의 파일을 마음대로 읽거나 다른 프로그램을 실행할 수 없는 이유입니다. 또 하나는 동일 출처 정책(same-origin policy)입니다. 한 사이트에서 온 코드는 원칙적으로 다른 출처의 데이터에 접근하지 못합니다. 이 규칙이 없으면 아무 광고 페이지의 코드가 옆 탭의 은행 페이지 내용을 읽어 갈 수 있겠죠.

잊어버리는 서버에 기억을 붙이는 법

상태 없는 규약에는 치명적인 불편이 있습니다. 로그인을 해도 다음 클릭에서 서버가 여러분을 못 알아본다면 장바구니도 로그인도 성립하지 않습니다. 1994년 넷스케이프에서 나온 해법이 쿠키(cookie)입니다. 서버가 응답에 작은 문자열을 실어 보내며 저장해 두라고 하면, 브라우저는 이후 같은 사이트로 가는 요청마다 그 문자열을 붙여 보냅니다. 서버는 그 값을 보고 지난번의 그 사람임을 알아보죠. 규약 자체는 여전히 잊어버리지만, 기억을 손님에게 들려 보내는 방식으로 우회한 것입니다.

이 우회에는 그늘이 있습니다. 페이지에 삽입된 제삼자의 코드가 자기 쿠키를 심으면 여러 사이트를 건너다니는 한 사람의 이동 경로를 이어 붙일 수 있습니다. 광고 추적의 기본 원리이고, 각국의 동의 규제와 브라우저의 제삼자 쿠키 제한이 겨냥하는 지점이죠. 그럼에도 웹이 특정 회사의 소유물이 되지 않은 것은 표준 덕분입니다. HTML과 관련 규격은 W3C와 WHATWG 같은 공개 조직에서 논의되고 문서로 공개되며, 누구든 그 규격을 읽고 자기 브라우저를 만들 수 있습니다. 1990년대 후반 브라우저 사업자들이 각자 다른 기능을 밀어붙이며 웹이 쪼개질 뻔했고, 표준 준수 운동이 그 흐름을 되돌렸습니다. 다음 강에서는 이 요청과 응답을 남이 읽지 못하게 만드는 방법을 다룹니다.

인출 문제

문제 1. 버너스리의 세 발명 중 문서에 세상에서 유일한 이름을 주는 역할은 무엇일까요?
셋은 역할이 다릅니다. URL이 대상을 지목하고 HTTP가 그것을 가져오며 HTML이 문서 안에 링크를 심습니다. DNS는 웹 이전부터 있던 인터넷의 이름 체계이므로 버너스리의 발명이 아닙니다.
문제 2. HTTP가 상태 없는 규약이라는 말의 의미는 무엇일까요?
상태 없음은 요청 사이에 서버가 맥락을 유지하지 않는다는 뜻이며, 덕분에 서버는 가벼워지지만 로그인 같은 연속성은 따로 만들어야 합니다. 상태 코드는 오히려 매 응답에 반드시 붙는 값이라 혼동하기 쉬운 오답입니다.
문제 3. 브라우저의 동일 출처 정책이 막아 주는 상황은 무엇일까요?
동일 출처 정책은 출처가 다른 자원 사이의 접근을 원칙적으로 차단해, 한 탭의 코드가 다른 사이트의 내용을 읽지 못하게 합니다. 접속 차단이나 트래픽 제한은 이 정책이 아니라 다른 장치가 담당하는 영역입니다.
문제 4. 쿠키가 해결한 문제와 그 대가는 각각 무엇일까요?
쿠키는 서버가 기억하는 대신 식별 문자열을 브라우저에 맡겨 연속성을 만든 장치입니다. 다만 제삼자가 심은 쿠키는 여러 사이트에 걸친 이동 경로를 이어 붙일 수 있어 추적 문제를 낳았고, 암호화와는 별개의 기능입니다.

생각해볼 질문 (정답 없음)

  • 웹의 개방성은 표준을 공개 조직이 관리한 덕분이었습니다. 그런데 그 표준을 구현하는 브라우저 엔진은 소수만 남았습니다. 개방성은 무엇으로 지켜질 수 있을까요.

이전: 네트워크와 인터넷 1강 · 다음: 네트워크와 인터넷 3강

모던지 · 궁금하면 모던지 GitHub · 2026-09-10