Web 통신 방식 (HTTP, Socket)

jwww·2023년 6월 24일

통신

목록 보기
4/5

클라이언트란 요청을 보내는 쪽을 의미하며 브라우저
서버란 요청을 받는 쪽의 의미하며 데이터를 보내주는 원격지의 컴퓨터

크게 2가지 통신 방식이 있다.

1. HTTP 통신

1-1. HTTP 통신이란?

Hypertext Transfer Protocol
웹 서버와 웹 브라우저가 통신하기 위해 주로 사용되는 통신 프로토콜.

프로토콜이란 네트워크에서 데이터를 송수신하기 위한 양식과 규칙.

초기에는 HTML 파일을 전송하려는 목적으로 만들어졌으나 현재는 JSON, Image 파일 등 다양한 파일을 전송받을 수 있다.

1-2. HTTP 특징

  • 단방향 통신 : 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신이다.

  • 비연결성 (Connection) : 서버로부터 응답을 받은 후 연결이 바로 종료되어 연결상태를 유지하지 않는다.

  • 무상태 (Stateless) : 연결상태를 유지하지 않는다 = 서버는 응답 메시지를 반환한 후 클라이언트의 상태를 저장하지 않는다.

상태를 기억하기 위해서 쿠키와 세션이 등장했다.

  • 쿠키 : 브라우저단에서 쿠키를 저장. 브라우저에 저장되므로 위변조가 쉬워 보안이 취약하다.
  • 세션 : 서버단에서 사용자 정보를 저장. 쿠키보다는 안전할 수 있지만 중간에 탈취당할 수 있으므로 보안상의 위험이 여전히 존재하며 서버의 메모리를 차지하여 동시 접속자가 많을 경우 서버 과부하의 원인이 된다.

1-3. HTTP 요청

URL은 서버에 리소스를 요청하기 위해 입력하는 영문 주소로 이를 통해서 서버에 특정 데이터를 요청할 수 있다.

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식으로,
설정파일, API 혹은 다른 기타 인터페이스에 의해 가공되어 제공된다.

(1) HTTP Request 메시지 구조

HTTP 요청 메시지 (HTTP Request Message) 는 공백을 제외하고 3가지 부분으로 나누어진다.

  1. Start Line
    요청 메시지의 시작라인으로 요청라인 혹은 상태라인이라고도 한다.
    HTTP 메서드 (요청 목적) , Request tartget (HTTP 요청이 전송되는 목표 주소), HTTP version으로 구성.

    GET /test.html HTTP/1.1
    [HTTP Method] [Request target] [HTTP version]
  2. Header
    해당 요청에 대한 추가 정보를 담는 부분으로 key: value 형태로 이루어져있다.
    생략이 가능하다.

    Host: google.com
    Accept: text/html
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
  3. Body
    HTTP Request가 전송하는 데이터를 담고있는 부분.
    전송하는 데이터가 없다면 body 부분은 비워져 있다.
    보통 post 요청일 경우 HTML 폼 데이터가 포함되어 있다.

(2) HTTP Methods

클라이언트가 서버로 요청할 때, 어떠한 목적의 요청인지 HTTP 메서드에 명시한다.

  • GET : (조회) 리소스를 조회할 때 사용.
  • POST : (추가) 신규 리소스를 등록하거나 메시지 바디를 통해 요청 데이터를 처리할 때 사용.
  • PATCH : 리소스의 일부, 한 가지 값을 변경할 때 사용.
  • PUT : (수정) 리소스의 두 가지 이상의 값을 변경하거나 해당 리소스가 없으면 생성할 때 사용.
  • DELETE : (삭제) 리소스를 삭제할 때 사용.

기타 메서드

  • HEAD : GET과 동일하지만 상태줄과 헤더만 반환.
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명.
  • CONNECTION : 대상 리소스로 식별되는 서버에 대한 터널을 설정.

1-4. HTTP 응답

(1) HTTP Response 메시지 구조

  1. Start Line
    HTTP version, Status Code (응답 상태를 나타내는 코드), Status Text (응답 상태를 간략하게 텍스트로 설명) 로 구성

(2) Status Code

서버에서 응답으로 HTTP 상태 코드를 보내준다.
상태 코드는 크게 2가지로 200(성공) 과 404(실패) 이다.

2XX : 성공

200번대 상태코드는 대부분 성공을 의미한다.

  • 200 : GET 요청에 대한 성공.
  • 204 : 성공했으나 응답 본문에 데이터 없음.
  • 205 : 성공했으나 클라이언트 화면을 새로고침하도록 권고.

3XX : 리다이렉션

300번대 상태코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URP로 리다이렉트를 유도하는 경우이다.

4XX : 클라이언트 에러

400번대 상태코드는 대부분 클라이언트의 코드가 잘못된 경우이다.

  • 400 : 잘못된 요청
  • 401 : 권한 없이 요청, 헤더가 잘못된 경우
  • 403 : 서버에서 해당 자원에 대해 접근 금지.
  • 404 : 사용자가 존재하지 않는 URL을 탐색한 경우.
  • 405 : 허용되지 않은 메서드.
  • 409 : 최신 자원이 아닌데 업데이트 하는 경우

5XX : 서버 에러

500번대 상태코드는 서버 쪽에서 오류가 난 경우이다.

  • 501 : 요청한 동작에 대해 서버가 수행할 수 없는 경우.
  • 503 : 서버 과부하 혹은 유지 보수로 내려간 경우.

2. Socket 통신

2-1. Socket 통신이란?

서버와 클라이언트가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식.

HTTP는 단방향 통신이기 때문에 서버가 클라이언트에게 메세지를 보낼 수 없다.
실시간 채팅 기능을 구현하렴변 서버도 클라이언트에게 요청을 보낼 수 있는 소켓통신이 필요하다.

소켓이란 두 프로그램이 서로 데이터를 주고 받을 수 있도록 양 쪽에 생성되는 통신 단자.

2-2. Socket 특징

  • 양방향 통신 : 서버와 클라이언트가 서로에게 데이터를 전달할 수 있다.
  • 연결지향 (Connection-oriented) : 서버와 클라이언트가 계속 연결을 유지한다.
  • 상태성 (Stateful) : 연결이 끊어지기 전까지 상태가 유지된다.

참고문서

HTTP - MDN Web Docs
[네트워크/HTTP] HTTP란?

profile
퍼블리셔 공부 블로그 입니다

0개의 댓글