0. HTTP란?

HTTP(하이퍼텍스트 전송 프로토콜, Hypertext Transfer Protocol)는 웹에서 브라우저와 서버 간의 데이터를 주고받기 위한 규칙을 정의한 통신 프로토콜이다.
즉, 인터넷 상에서 웹 페이지를 주고받는 데 사용되는 프로토콜로, 클라이언트(주로 웹 브라우저)와 서버 간의 요청과 응답을 처리하는 데 사용된다.

HTTP는 웹의 기본 기술로, 우리가 웹 사이트에 접속할 때 사용되는 브라우저(Chrome, Firefox, Safari 등)가 서버에 요청을 보내고, 서버가 해당 요청에 응답하여 웹 페이지를 반환하는 과정을 관리한다.

HTTP의 주요 개념

  1. 클라이언트-서버 모델:

    • 클라이언트는 주로 사용자의 웹 브라우저로, 요청(Request)을 보낸다.
    • 서버는 클라이언트의 요청에 따라 웹 페이지나 데이터를 제공하는 시스템이다.
  2. 요청(Request)와 응답(Response):

    • HTTP 요청:
      클라이언트가 서버에 자원(페이지나 데이터)을 요청하는 행위이다. 요청 메시지는 여러 정보를 포함하고 있으며, 요청 라인(HTTP 메서드, URL, 프로토콜 버전), 헤더, 바디로 구성됩니다.
    • HTTP 응답:
      서버가 요청에 대한 결과를 클라이언트에게 보내는 메시지이다. 응답 메시지도 상태 코드, 헤더, 바디로 구성된다.
  3. 상태 코드:

    • 서버가 클라이언트의 요청에 어떻게 응답했는지를 나타내는 코드이다. 상태 코드는 3자리 숫자로 구성되며, 각각의 범위는 다음과 같다:
      • 1xx: 정보성 응답 (처리가 진행 중)
      • 2xx: 성공 (예: 200 OK)
      • 3xx: 리다이렉션 (다른 URL로 이동)
      • 4xx: 클라이언트 오류 (예: 404 Not Found)
      • 5xx: 서버 오류 (예: 500 Internal Server Error)

HTTP의 주요 특징

  1. 비상태성 (Statelessness):
    HTTP는 비상태성 프로토콜입니다.
    즉, 서버는 클라이언트의 상태를 저장하지 않으며, 각 요청은 독립적으로 처리된다. 이로 인해 서버는 클라이언트의 이전 요청에 대해 기억하지 않는다. 따라서 웹 애플리케이션에서 클라이언트의 상태(예: 로그인 정보)를 유지하려면 쿠키(Cookies)나 세션(Sessions) 같은 방법을 사용해야 한다.

  2. 텍스트 기반:
    HTTP는 텍스트 기반 프로토콜로, 요청과 응답 모두 사람이 읽을 수 있는 형태로 이루어진다. 이를 통해 디버깅이나 문제 해결이 상대적으로 쉽다.

  3. 무연결성 (Connectionless):
    HTTP는 기본적으로 클라이언트가 요청을 보내고, 서버가 응답을 보낸 후 연결을 끊는다.
    즉, 한 번의 요청-응답 사이클이 완료되면 연결이 종료되며, 새 요청을 할 때는 새로운 연결을 설정해야 한다. 이 점을 보완하기 위해 HTTP/1.1부터는 Persistent Connection(지속 연결)이라는 기능이 도입되어, 여러 요청을 동일한 연결에서 처리할 수 있다.

HTTP를 사용하는 상황

HTTP는 다음과 같은 경우에 주로 사용됩니다:

  1. 웹 브라우징:
    웹 사이트에 접속할 때 브라우저는 HTTP 요청을 통해 서버로부터 HTML, CSS, JavaScript 파일, 이미지 등을 받아온다. 이를 통해 사용자가 웹 페이지를 볼 수 있게 된다.

  2. API 통신:
    RESTful API나 GraphQL API 같은 웹 API를 호출할 때도 HTTP를 통해 데이터를 주고받는다.
    예를 들어, 클라이언트 애플리케이션이 서버로 데이터를 보내거나 서버로부터 데이터를 받을 때 HTTP 프로토콜을 사용한다.

  3. 파일 다운로드:
    HTTP는 파일을 다운로드하는 데도 사용된다. 서버에서 파일을 가져와 클라이언트가 로컬에 저장하는 과정에서 HTTP 요청과 응답이 활용된다.

  4. 서버 간 통신:
    마이크로서비스 아키텍처나 분산 시스템에서는 여러 서버가 서로 데이터를 주고받을 때 HTTP를 통해 통신할 수 있다.

결론

HTTP는 클라이언트(주로 웹 브라우저)와 서버 간에 데이터를 주고받을 때 사용하는 기본 통신 프로토콜이다.
우리는 웹에서 정보를 검색하거나 웹 애플리케이션을 사용할 때, 대부분 HTTP를 통해 통신하고 있다. HTTP의 요청-응답 모델, 상태 코드, 메서드 등의 개념을 잘 이해하면 웹 개발이나 서버 간 통신을 효과적으로 구현할 수 있다.


1. HTTP 메서드란?

Spring MVC에서 HTTP 요청을 처리할 때, 각 메서드는 특정 HTTP 메서드에 따라 다르게 작동할 수 있다.
RESTful API를 구현할 때 이 메서드들은 중요하며, 각 메서드는 특정한 작업을 수행하는 데 사용된다.

주요 HTTP 메서드는 다음과 같다:

  • GET:
    서버에서 데이터를 읽어오는 데 사용된다.
    예를 들어, 데이터베이스에서 값을 가져오는 작업을 처리한다.
  • POST:
    서버에 새로운 데이터를 생성하는 데 사용된다. 보통 폼 제출이나 새로운 리소스를 서버에 추가할 때 사용된다.
  • PUT:
    서버에 이미 존재하는 리소스를 수정하는 데 사용된다. 리소스의 전체를 교체하거나 업데이트할 때 사용된다.
  • PATCH:
    서버에 존재하는 리소스의 일부를 수정하는 데 사용된다. PUT과 달리 전체 리소스를 업데이트하지 않고, 일부분만 변경한다.
  • DELETE:
    서버에서 리소스를 삭제하는 데 사용된다.
  • HEAD:
    GET과 유사하지만, 응답에 본문(body)은 포함하지 않고, HTTP 헤더 정보만 반환한다. 상태 코드 등을 확인할 때 사용된다.
  • OPTIONS:
    서버에서 지원하는 HTTP 메서드를 확인하는 데 사용된다.

2. RESTful API란?

REST(Representational State Transfer)는 네트워크 상에서 자원(resource)을 정의하고 자원에 대한 주소(URI)를 통해 자원을 주고받는 방식을 기반으로 한 아키텍처 스타일이다. RESTful API는 REST 아키텍처 스타일을 따르는 웹 API를 말한다. RESTful API는 다음과 같은 특징을 가지고 있다:

  • 자원 기반 설계:
    모든 리소스는 URI(Uniform Resource Identifier)로 식별된다.
    예를 들어 /users는 모든 사용자를 가져오는 URI, /users/1은 특정 사용자(예: ID가 1인 사용자)를 가져오는 URI입니다.
  • HTTP 메서드 사용:
    앞서 설명한 HTTP 메서드를 통해 자원에 대한 다양한 작업을 정의한다. GET은 리소스를 가져오고, POST는 새로운 리소스를 생성하며, PUT은 리소스를 업데이트하고, DELETE는 리소스를 삭제한다.
  • 상태 없음:
    서버는 클라이언트의 상태를 저장하지 않고, 각 요청은 독립적으로 처리된다. 즉, 서버는 이전 요청에 대한 정보를 기억하지 않으므로 각 요청은 필요한 모든 정보를 포함해야 한다.
  • 표현(Representation):
    클라이언트와 서버 간의 자원은 JSON, XML 등의 형식으로 표현되며 전송된다.

3. API란?

API(Application Programming Interface)는 응용 프로그램 간의 상호작용을 정의하는 명령어나 함수의 집합이다. 일반적으로 프로그램들이 서로 데이터를 주고받고 통신할 수 있도록 돕는 도구이다. API는 소프트웨어, 하드웨어, 또는 프로세스 간의 통신을 위해 사용됩니다.

RESTful API는 API의 한 종류로, REST 원칙을 기반으로 클라이언트와 서버 간에 통신하는 API입니다. API는 특정 서비스나 프로그램에 접근할 수 있도록 만들어진 인터페이스이고, RESTful API는 그 중에서도 웹 서비스에 대한 접근을 단순화하고 구조화한 방식이다.


이러한 기본 개념들을 바탕으로 RESTful API를 설계할 때, 각 HTTP 메서드가 어떤 역할을 수행하는지 명확하게 이해하고 사용해야 한다. API를 설계할 때는 자원(Resource)을 중심으로 URI를 설계하고, 각각의 HTTP 메서드를 적절히 사용하는 것이 중요하다.

0개의 댓글