
HTTP(하이퍼텍스트 전송 프로토콜, Hypertext Transfer Protocol)는 웹에서 브라우저와 서버 간의 데이터를 주고받기 위한 규칙을 정의한 통신 프로토콜이다.
즉, 인터넷 상에서 웹 페이지를 주고받는 데 사용되는 프로토콜로, 클라이언트(주로 웹 브라우저)와 서버 간의 요청과 응답을 처리하는 데 사용된다.
HTTP는 웹의 기본 기술로, 우리가 웹 사이트에 접속할 때 사용되는 브라우저(Chrome, Firefox, Safari 등)가 서버에 요청을 보내고, 서버가 해당 요청에 응답하여 웹 페이지를 반환하는 과정을 관리한다.
클라이언트-서버 모델:
요청(Request)와 응답(Response):
상태 코드:
비상태성 (Statelessness):
HTTP는 비상태성 프로토콜입니다.
즉, 서버는 클라이언트의 상태를 저장하지 않으며, 각 요청은 독립적으로 처리된다. 이로 인해 서버는 클라이언트의 이전 요청에 대해 기억하지 않는다. 따라서 웹 애플리케이션에서 클라이언트의 상태(예: 로그인 정보)를 유지하려면 쿠키(Cookies)나 세션(Sessions) 같은 방법을 사용해야 한다.
텍스트 기반:
HTTP는 텍스트 기반 프로토콜로, 요청과 응답 모두 사람이 읽을 수 있는 형태로 이루어진다. 이를 통해 디버깅이나 문제 해결이 상대적으로 쉽다.
무연결성 (Connectionless):
HTTP는 기본적으로 클라이언트가 요청을 보내고, 서버가 응답을 보낸 후 연결을 끊는다.
즉, 한 번의 요청-응답 사이클이 완료되면 연결이 종료되며, 새 요청을 할 때는 새로운 연결을 설정해야 한다. 이 점을 보완하기 위해 HTTP/1.1부터는 Persistent Connection(지속 연결)이라는 기능이 도입되어, 여러 요청을 동일한 연결에서 처리할 수 있다.
HTTP는 다음과 같은 경우에 주로 사용됩니다:
웹 브라우징:
웹 사이트에 접속할 때 브라우저는 HTTP 요청을 통해 서버로부터 HTML, CSS, JavaScript 파일, 이미지 등을 받아온다. 이를 통해 사용자가 웹 페이지를 볼 수 있게 된다.
API 통신:
RESTful API나 GraphQL API 같은 웹 API를 호출할 때도 HTTP를 통해 데이터를 주고받는다.
예를 들어, 클라이언트 애플리케이션이 서버로 데이터를 보내거나 서버로부터 데이터를 받을 때 HTTP 프로토콜을 사용한다.
파일 다운로드:
HTTP는 파일을 다운로드하는 데도 사용된다. 서버에서 파일을 가져와 클라이언트가 로컬에 저장하는 과정에서 HTTP 요청과 응답이 활용된다.
서버 간 통신:
마이크로서비스 아키텍처나 분산 시스템에서는 여러 서버가 서로 데이터를 주고받을 때 HTTP를 통해 통신할 수 있다.
HTTP는 클라이언트(주로 웹 브라우저)와 서버 간에 데이터를 주고받을 때 사용하는 기본 통신 프로토콜이다.
우리는 웹에서 정보를 검색하거나 웹 애플리케이션을 사용할 때, 대부분 HTTP를 통해 통신하고 있다. HTTP의 요청-응답 모델, 상태 코드, 메서드 등의 개념을 잘 이해하면 웹 개발이나 서버 간 통신을 효과적으로 구현할 수 있다.
Spring MVC에서 HTTP 요청을 처리할 때, 각 메서드는 특정 HTTP 메서드에 따라 다르게 작동할 수 있다.
RESTful API를 구현할 때 이 메서드들은 중요하며, 각 메서드는 특정한 작업을 수행하는 데 사용된다.
주요 HTTP 메서드는 다음과 같다:
REST(Representational State Transfer)는 네트워크 상에서 자원(resource)을 정의하고 자원에 대한 주소(URI)를 통해 자원을 주고받는 방식을 기반으로 한 아키텍처 스타일이다. RESTful API는 REST 아키텍처 스타일을 따르는 웹 API를 말한다. RESTful API는 다음과 같은 특징을 가지고 있다:
/users는 모든 사용자를 가져오는 URI, /users/1은 특정 사용자(예: ID가 1인 사용자)를 가져오는 URI입니다.API(Application Programming Interface)는 응용 프로그램 간의 상호작용을 정의하는 명령어나 함수의 집합이다. 일반적으로 프로그램들이 서로 데이터를 주고받고 통신할 수 있도록 돕는 도구이다. API는 소프트웨어, 하드웨어, 또는 프로세스 간의 통신을 위해 사용됩니다.
이러한 기본 개념들을 바탕으로 RESTful API를 설계할 때, 각 HTTP 메서드가 어떤 역할을 수행하는지 명확하게 이해하고 사용해야 한다. API를 설계할 때는 자원(Resource)을 중심으로 URI를 설계하고, 각각의 HTTP 메서드를 적절히 사용하는 것이 중요하다.
