CS/네트워크

HTTP의 특징(서버/ 클라이언트 구조, Stateless, Connectionless)

2023. 7. 29. 18:09
목차
  1. HTTP의 특징
  2. 서버/ 클라이언트 구조
  3. 무상태성(Stateless)
  4. 비연결성(Connectionless)
  5. 한계와 극복
  6. Persistent Connection
  7. Persistent Connection이 없는 경우?
  8. Persistent Connection이 있는 경우?

HTTP의 특징

http의 특징인 서버/클라이언트 구조, Stateless, Connectionless, http message 중

서버/클라이언트 구조와 Stateless, Connectionless에 대해서 정리해놓은 게시물입니다.

서버/ 클라이언트 구조

  • 클라이언트: 요청을 보내(고 응답 대기하는) 쪽
  • 서버: 요청에 대한 (결과를 만들어내서) 응답하는 쪽
  • 무조건 클라이언트가 먼저 요청을 해야 서버에서 응답하는 구조
  • 데이터의 전송이 필요 → 이때 TCP 프로토콜을 사용함

서버/ 클라이언트 구조의 의의 및 장점

  • 클라이언트와 서버의 분리
    • 리소스가 존재하는 곳(서버)와 리소스를 사용하는 곳(클라이언트)로 분리
    • 서버: 데이터와 비즈니스 로직
    • 클라이언트: UI 사용성
  • 독립적인 관리 가능
    • 사용성 향상이 필요할 때? 클라이언트 관리
    • 트래픽 증가에 대한 대응? 서버 관리
    •  

무상태성(Stateless)

우선 무상태성을 설명하기 전에 Stateless한 상태는 무엇일까?

Stateful

  • 서버가 클라이언트 상태를 보존하는지에 따라 나뉨
  • 특정 서버가 특정 클라이언트를 대응하면 Stateful, 자유자재로 확장 및 변경 할 수 있으면 Stateless

그림과 같이 위에 2개를 담당하고 있는 첫번째 서버가 다운이 될 경우 클라이언트 2개를 다른 서버들이 담당해주지 못한다.

그럼 반대로 Stateless는 어떤 것인지 느낌이 대충 올것이다.

Stateless

  • 상태를 보존하지 않음
  • 장점: 서버 확장성이 좋다 = 스케일 아웃이 용이하다
  • 서버 확장성이란? 한개의 클라이언트를 상대하기 위해 한개의 서버만을 이용하는 것이 아니라 여러개 서버를 번갈아 가면서 사용 가능하다는 의미
  • 단점: 클라이언트에서 추가로 데이터를 전송해야한다

Stateless 단점

- 고객 : 이 노트북은 얼마인가요?
- 점원A : 100만원 입니다.
- 고객 : 2개 주문할게요
- 점원B : 어떤 거 말씀이세요?
- 고객 : 신용카드로 하겠습니다.
- 점원C : 무슨 제품을 몇개 구매하시겠어요?

Stateless 장점

- 고객 : 이 노트북은 얼마인가요?
- 점원A : 100만원 입니다.
- 고객 : 노트북 2개 주문할게요
- 점원B : 200만원입니다. 신용카드, 현금 중에 어떻게 구매하시겠어요?
- 고객 : 노트북 2개를 신용카드로 하겠습니다.
- 점원C : 200만원 결제 완료되었습니다.
  • 즉 점원이 바뀌어도 괜찮다
  • 트래픽이 갑자기 늘어도(고객이 갑자기 많아져도) 점원만 충분히 고용하면 늘어난 고객에 대해 대응이 가능하다(응답서버를 마음대로 바꿀 수 있다)
  • 갑자기 점원 하나가 쓰러져도(서버가 뻗어도) 대응 가능하다

한계와 극복

  • 모든 것이 무상태일 수는 없다(ex. login 여부) → 데이터 유지가 필요할 때가 있음
  • 서버에서 관리해줘야 한다
  • 단순한 요청에 대한 데이터가 너무 많이 왔다갔다 한다.
  • 이를 해결하기 위해 쿠키(브라우저 : 클라이언트)와 세션(서버) 사용해서 stateful인 것 처럼 사용함.

해결 방안

  • 쿠키(브라우저 : 클라이언트)와 세션(서버) 사용

쿠키와 세션에 대해서도 자세히 다룰 예정이나 대략적인 느낌을 갖자면 다음과 같다.

 

쿠키와 세션)

처음 사이트에 들어갈 때  “쿠키허용을 해주시면 저희 사이트가 더 좋은 서비스를 제공할 수 있습니다.” 문구가 나옴 → 클라이언트의 웹 브라우저에 쿠키가 존재하므로 사용자에게 요청하는것

 

다른 일반 사이트에서 로그인 한 후 일정 시간 사용을 안하면 “세션이 만료되었습니다”라는 문구가 나옴 → 서버에서 일정시간 동안만 세션을 갖고 있기 때문에 서버가 사용자를 다시 확인해야함.

 

제로베이스 스쿨에 로그인 한 후 강의를 듣고 나서 일정시간 사용을 안하면

“인증 토큰이 만료되었습니다”라는 문구가 나옴 → 세션과 마찬가지로 서버가 클라이언트에게 주는 인증도구 ‘토큰’

비연결성(Connectionless)

  • 한 동작에 대한 요청을 주고 받을 때만 TCP를 연결하고 응답 후엔 바로 연결 끊음
  • ex. 1시간동안 수천명이 사용하는 서비스도 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 작음 (그러나 인기많은 티켓판매나 한꺼번에 많은 사람들이 동시에 처리하는 요청도 있음 )
  • 즉 서버 자원을 효율적으로 관리할 수 있음

한계와 극복

  • 요청이 있을 때마다 TCP 연결을 열어줘야하니 3way handshake 시간이 추가된다TCP 연결시 연결되는 방식
    1. SYN(접속 요청) “서버야 나 이런 데이터가 필요해 너 지금 자리에 있니?” : [클라이언트] -> [서버]
    2. SYN+ACK “응 나있어 요청해~”: [클라이언트] <- [서버]
    3. ACK(요청 수락) “나 A이미지랑 B동영상 좀 보여줘~”: [클라이언트] -> [서버]
    4. 데이터 전송(3번과 함께 수행 가능)
    • 즉 통신하기 전에 연결 과정이 추가로 필요하다
    • TCP 해제시 해제되는 방식은 4way handshakeTCP 연결시 연결되는 방식
      1. FIN(해제 요청) “서버야 나 TCP 해제하려고 해제해도되니?(보내는 데이터 없지?)” : [클라이언트] -> [서버]
      2. ACK “응 잠시만 확인해볼게~”: [클라이언트] <- [서버]
      3. FIN “응 보낼 거 다 보냈어 종료해도 돼”: [클라이언트] <- [서버]
      4. ACK “알겠어 종료할게!”: [클라이언트] -> [서버]
      5. 연결해제(4번과 함께 수행 가능)
      • 연결을 해제할 때도 과정이 추가로 필요하다.
    • 4 way handshake란?
  • 3 way handshake란?
  • 한 동작에 대한 요청은 수십가지인데 매요청마다 연결을 끊으면 연결/ 종료에 대한 시간이 매번 소비된다
    • 개발자도구로 네이버 홈화면 클릭시 HTML 뿐만 아니라 javascript, css, 추가 이미지등 수많은 자원이 함께 다운로드 됨
  • 이를 극복하기 위해 Persistent Connection(지속 연결, 과거 keep-alive)을 활용한다
    • http/2, http/3 표준에서 최적화가 더 많이 이루어졌고
    • http/3의 경우 UDP 프로토콜을 통해 연결 속도를 더 빠르게 개선

Persistent Connection

Persistent Connection이 없는 경우?

- 연결(0.1초)
- 요청/html 응답(0.1초)
- 종료(0.1초)
- 연결(0.1초)
- 요청/자바스크립트 응답(0.1초)
- 종료(0.1초)
- 연결(0.1초)
- 요청/이미지 응답(0.1초)
- 종료(0.1초)
  • total 0.9 sec

Persistent Connection이 있는 경우?

- 연결(0.1초)
- 요청/html 응답(0.1초)
- 요청/자바스크립트 응답(0.1초)
- 요청/이미지 응답(0.1초)
- 종료(0.1초)
  • total 0.5 sec
  •  
반응형

'CS > 네트워크' 카테고리의 다른 글

[TCP/IP 계층] 인터넷 계층(IP 프로토콜, ARP)  (1) 2024.02.01
HTTP 특징(http message)  (0) 2023.07.30
HTTP 프로토콜  (0) 2023.07.28
  1. HTTP의 특징
  2. 서버/ 클라이언트 구조
  3. 무상태성(Stateless)
  4. 비연결성(Connectionless)
  5. 한계와 극복
  6. Persistent Connection
  7. Persistent Connection이 없는 경우?
  8. Persistent Connection이 있는 경우?
'CS/네트워크' 카테고리의 다른 글
  • [TCP/IP 계층] 인터넷 계층(IP 프로토콜, ARP)
  • HTTP 특징(http message)
  • HTTP 프로토콜
three von
three von
어려워 보이는 프로그래밍 언어를 쉽게 정복하는 블로그
반응형
three von
LangEASY : 프로그래밍 언어를 쉽게 정복하는 공간
three von
전체
오늘
어제
  • 분류 전체보기 (89)
    • BackEnd (5)
    • JAVA (5)
      • 기초개념 (5)
    • 자료구조 & 알고리즘 (7)
      • 기초수학 (0)
      • 선형 자료구조 (4)
      • 비선형 자료구조 (1)
      • 알고리즘 (1)
    • CS (18)
      • 컴퓨터구조 (0)
      • 운영체제 (3)
      • 시스템 소프트웨어 (0)
      • 네트워크 (4)
      • 디자인패턴 (10)
    • 데이터베이스 (4)
    • Spring (4)
    • Project (2)
      • 팀프로젝트 (1)
      • 토이프로젝트 (1)
    • 회고 (0)
    • Git&Github (8)
    • IntelliJ (5)
    • 코테 (16)
      • 프로그래머스 (10)
      • 백준 (6)
    • BookStudy (12)
      • 스프링 부트 핵심 가이드 (12)
    • C++ (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • 인텔리제이에서 gitbash로 vi vim 에디터 사용하는법
  • java heap 자료구조
  • 자바 자바해시맵
  • 코테
  • 백엔드 스쿨
  • github
  • IntelliJ 자동화
  • githubTest
  • spring
  • 백엔드
  • 제로베이스백엔드스쿨미니과제
  • 백엔드스쿨
  • Java
  • 백엔드공부
  • heap 자료구조
  • 윈도우에서 리눅스 명령어
  • 자바 선형자료구조
  • 제로베이스
  • 리눅스 명령어 윈도우 cmd창에서 가능
  • LiveTemplate사용
  • github이슈관리
  • vi/vim에디터사용
  • 제로베이스백엔드스쿨
  • vi/vim
  • 자바 자료구조 힙
  • 명령어변환
  • InteliJ에서 gitbash사용
  • 깃 이슈관리
  • windowcmd창

최근 댓글

최근 글

hELLO · Designed By 정상우.
three von
HTTP의 특징(서버/ 클라이언트 구조, Stateless, Connectionless)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.