사용자가 웹사이트에 접속하기 위해 브라우저에 URL을 입력하거나 링크를 클릭하는 순간부터 화면에 콘텐츠가 나타나기까지, 웹 브라우저와 웹 서버 사이에서는 복잡하지만 정형화된 일련의 통신 과정이 발생합니다. 이 과정을 HTTP(HyperText Transfer Protocol) 요청과 응답이라고 부릅니다.
1. 주소 해석 및 연결 (DNS & TCP/IP)
- URL 해석: 사용자가 브라우저에 URL(Uniform Resource Locator), 예를 들어
https://www.google.com을 입력하면, 브라우저는 이 주소를 해석하여 프로토콜(https), 호스트명(www.google.com), 경로 등을 파악합니다. - IP 주소 획득 (DNS Lookup): 컴퓨터는 숫자로 된 IP 주소만 이해할 수 있습니다. 브라우저는 DNS(Domain Name System) 서버에 호스트명을 문의하여 실제 서버의 IP 주소를 알아냅니다.
- 연결 수립 (TCP Handshake): 브라우저(클라이언트)는 찾아낸 IP 주소를 가진 서버와 안정적인 통신을 위해 TCP(Transmission Control Protocol) 3-Way Handshake 과정을 거쳐 연결을 수립합니다. 이 과정이 성공해야 데이터 전송이 가능해집니다.
2. 요청 전송 (HTTP Request)
연결이 수립되면 브라우저는 서버에게 필요한 데이터를 달라는 **HTTP 요청(Request)**을 전송합니다. 이 요청은 다음과 같은 내용으로 구성됩니다.
- 요청 방식 (Method): 서버에게 어떤 작업을 원하는지 알려줍니다.
- GET: 정보를 달라고 요청 (가장 일반적)
- POST: 데이터를 서버로 전송 (로그인, 게시글 작성 등)
- 경로 (Path): 서버의 어떤 자원(파일, 페이지)을 원하는지 명시합니다. (예:
/index.html또는/posts/1) - 헤더 (Header): 요청에 대한 추가 정보입니다. 브라우저 종류, 선호하는 언어, 인증 정보 등을 담습니다.
3. 서버의 처리 (Server Side Processing)
요청을 받은 웹 서버는 다음과 같은 작업을 수행합니다.
- 요청 분석: 서버는 요청 방식을 확인하고, 요청된 경로를 찾습니다.
- 데이터 처리: 만약 정적인 HTML 파일이라면 바로 응답 준비를 하지만, **동적인 데이터(로그인, 검색 결과)**가 필요하다면 **WAS(Web Application Server)**나 데이터베이스와 연동하여 필요한 정보를 조회하거나 계산합니다. (예: PHP, Python, Java 등으로 작성된 백엔드 로직 실행)
- 응답 생성: 서버는 요청된 정보와 처리 결과를 담아 **HTTP 응답(Response)**을 생성합니다.
4. 응답 반환 및 렌더링 (HTTP Response & Rendering)
서버는 준비된 응답을 브라우저로 다시 보냅니다.
- 상태 코드 (Status Code): 요청이 성공했는지, 실패했는지 등을 숫자로 알려줍니다.
- 200 OK: 요청 성공 (가장 일반적)
- 404 Not Found: 요청한 페이지를 찾을 수 없음
- 500 Internal Server Error: 서버 내부 오류
- 응답 헤더: 서버 정보, 데이터 형식, 캐시 정책 등을 담습니다.
- 본문 (Body): 실제로 브라우저가 사용자에게 보여줄 데이터, 즉 HTML, CSS, JavaScript, 이미지 파일 등이 이 본문에 담겨 전송됩니다.
브라우저는 이 응답 데이터를 받아 HTML을 파싱하고 CSS 스타일을 적용하며 JavaScript를 실행하여 최종적으로 사용자의 화면에 웹페이지를 렌더링하여 보여줍니다.


