웹에서 브라우저와 서버 간의 통신은 HTTP(하이퍼텍스트 전송 프로토콜)를 통해 이루어진다. 이 과정에서 클라이언트(주로 브라우저)가 서버에 특정 요청(Request)을 보내고 서버는 해당 요청을 처리한 후 응답(Response)을 클라이언트에게 반환하는 방식으로 동작한다. 이 흐름은 웹 애플리케이션의 기본 작동 원리로 사용자가 URL을 입력하거나 버튼을 클릭할 때마다 발생한다.
요청(Request) 과정
URL 해석 : 브라우저는 사용자가 입력한 URL(Uniform Resource Locator)을 해석하여 요청할 자원의 위치를 파악한다. URL은 다음과 같은 요소들로 구성되어 있다.
- 프로토콜(예: http, https) : 통신 규칙을 정의
- 도메인(예: www.example.com) : 서버의 위치를 가리킴
- 포트(예: 80, 443) : 특정 서비스로의 접근을 돕는 번호
- 경로(예: /index.html) : 서버 내의 특정 자원을 가리킴
- 쿼리 스트링(예: ?id=10) : 추가적인 데이터 전달
HTTP 메서드 : 요청은 HTTP 메서드를 사용하여 서버에 특정 작업을 요청한다. 대표적인 HTTP 메서드는 다음과 같다.
- GET : 서버로부터 데이터를 조회할 때 사용
- POST : 서버에 데이터를 생성하거나 제출할 때 사용
- PUT : 서버의 데이터를 업데이트할 때 사용
- DELETE : 서버에서 데이터를 삭제할 때 사용
헤더(Header) : 요청에는 메타데이터가 포함된 HTTP 헤더가 전송된다. 여기에는 클라이언트 정보, 인증 토큰, 쿠키, 데이터 타입 등의 정보가 포함될 수 있다. 헤더는 서버가 요청을 처리하는 데 필요한 추가 정보를 제공한다.
서버에서 요청 처리
서버는 클라이언트로부터 받은 요청을 분석하여 그에 맞는 작업을 수행한다. 예를 들어, 클라이언트가 HTML 문서를 요청하면 서버는 그 문서를 찾아 응답으로 반환한다. 서버는 요청받은 URL과 요청 방식(GET, POST 등)에 따라 어떤 자원을 제공할지 결정한다.
상태 코드(Status Code) : 서버는 요청에 대한 처리 결과를 상태 코드로 응답한다. 주요 상태 코드의 예시는 다음과 같다.
- 200 OK: 요청이 성공적으로 처리되었음을 의미
- 404 Not Found: 요청한 리소스를 찾을 수 없음을 의미
- 500 Internal Server Error: 서버 내부에서 오류가 발생했음을 의미
응답(Response) 과정
응답 본문(Body) : 서버가 클라이언트에게 제공하는 데이터가 응답 본문에 포함된다. 이는 요청에 대한 결과로 HTML, JSON, 이미지 파일 등 다양한 형식으로 제공될 수 있다.
Content-Type 헤더 : 응답 본문이 어떤 형식인지 나타내는 헤더이다. 이 정보를 통해 브라우저는 응답 본문을 어떻게 해석해야 하는지 알 수 있다.
예)
- text/html: HTML 문서
- application/json: JSON 데이터
만약 응답의 Content-Type이 잘못 설정된다면, 브라우저는 해당 응답을 잘못된 형식으로 처리하거나 제대로 표시하지 못할 수 있다.
브라우저의 역할
요청 후 응답 처리 : 브라우저는 서버로부터 받은 응답을 처리하여 사용자가 볼 수 있는 웹페이지로 변환한다. 이때 브라우저는 응답 본문을 해석하고 Content-Type에 따라 적절한 방식으로 문서를 렌더링한다.
렌더링(Rendering) : 브라우저가 HTML 문서를 받은 경우 이를 기반으로 웹페이지를 렌더링하여 사용자가 시각적으로 볼 수 있는 형태로 변환한다. 만약 다른 형식의 데이터가 응답된다면 해당 데이터를 처리하는 방식이 달라진다.
도메인과 URL, URI의 차이
도메인 : 도메인은 인터넷에서 특정 웹사이트를 찾기 위한 주소 체계의 일부이다. 예를 들어 www.example.com과 같은 형태로 이는 특정 서버로의 접근을 가능하게 한다.
URL (Uniform Resource Locator) : URL은 자원의 위치를 가리키는 표준화된 주소 체계이다. HTTP, HTTPS 프로토콜을 통해 서버의 자원에 접근할 수 있게 하며 자원의 위치뿐 아니라 해당 자원에 접근하는 방법까지 포함한다.
URI (Uniform Resource Identifier) : URI는 자원을 고유하게 식별하는 더 넓은 개념이다. URL은 URI의 하위 개념으로 URL은 특정 자원의 위치를 나타내고 URN(Uniform Resource Name)은 자원의 고유 이름을 나타낸다.
결론
HTTP 요청과 응답의 흐름을 이해하는 것은 웹 애플리케이션 개발의 필수 요소이다. 브라우저가 요청을 보내는 과정, 서버가 그 요청을 처리하고 응답하는 방식, 그리고 그 응답을 클라이언트가 어떻게 처리하는지에 대한 전반적인 이해가 중요하다. 또한 도메인, URL, URI와 같은 인터넷 자원 식별 개념을 이해하는 것도 필수적이다.
'Web' 카테고리의 다른 글
TLS(Transport Layer Security) (1) | 2024.09.19 |
---|---|
Forward Proxy와 Reverse Proxy의 차이 (0) | 2024.09.19 |
API vs Library vs Framework (0) | 2024.09.09 |
TCP와 UDP (0) | 2024.09.06 |
OAuth 2.0의 개념과 동작방식 (0) | 2024.09.04 |