HTTP 통신과 Socket 통신의 차이점

2021. 5. 4. 20:38· Network/HTTP
목차
  1. 목표
  2. HTTP 통신이란?
  3. HTTP 통신의 통신 방식
  4. 정리
  5. 소켓 통신이란?
  6. 정리
반응형

목표

  • Htttp 통신과 Socket 통신의 차이점을 이해한다.

 

HTTP 통신이란?

 HTTP란 HyperText Transfer Protocol의 약자로 HTML 파일을 전송하는 프로토콜이라는 의미를 가진다. 웹브라우저에서 통신이 일어나며, 초기에는 HTML 파일을 전송하려는 목적으로 만들어졌으나 현재는 JSON, Image 파일 등 또한 전송한다.

 

HTTP 통신의 통신 방식

그림1. HTTP 통신

 HTTP 통신은 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다. 응답에는 클라이언트의 요청에 따른 결과를 반환한다. 이로 인해 다음과 같은 특성을 가진다.

클라이언트의 요청이 있을 때 서버가 응답하는 방식. 단방향 통신.

 서버의 응답에는 응답 코드가 같이 전송되며, 사용자는 응답 코드와 메세지 응답으로부터 오는 메세지 바디를 통해 요청 값을 전달 받는다. 

 

 초기에는 서버는 응답한 후 클라이언트(사용자)의 Connection을 곧바로 끊어버렸으나, 최근에는 성능상의 이유(Connection을 맺고 끊는 비용이 비싸다)로 Keep Alive 옵션을 통해 일정 기간 동안 클라이언트와 Connection을 유지하는 방식으로 통신이 가능해졌다.  

 

정리

  • HTTP 통신은 클라이언트의 요청이 있을 때 서버가 응답하는 단방향 통신이다.
  • JSON, Image, HTML 파일 등 다양한 파일을 전송 받을 수 있다.
  • 응답을 받은 후 Connection이 끊어지는 것이 기본 동작이지만, 성능 상으로 필요하다면 Keep Alive 옵션을 주어 일정 시간 동안 Connection을 유지하는 것이 가능하다. 

 

소켓 통신이란?

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

그림2. 소켓 통신

소켓 통신이란 서버와 클라이언트 양방향 연결이 이루어지는 통신으로, 클라이언트도 서버로 요청을 보낼 수 있고 서버도 클라이언트로 요청을 보낼 수 있는 통신으로 다음과 같은 특성을 가진다.

클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식의 양방향 통신.

보통 스트리밍이나 실시간 채팅 등 실시간으로 데이터를 주고 받아야 하는 경우 Connection을 자주 맺고 끊는 HTTP 통신보다 소켓 통신이 적합하다. 소켓 통신은 계속해서 Connection을 들고 있기 때문에 HTTP 통신에 비해 많은 리소스가 소모된다.

 

 

 

정리

  • 자주 데이터를 주고 받는 환경이 아닌 경우 HTTP 통신을 통해 받는 것이 유리하다.
  • 자주 데이터를 주고 받아야 하는 환경에서는 소켓 통신이 유리하다.
  • HTTP 통신은 사용자가 서버에 요청을 보내는 단방향 통신인 반면, 소켓 통신은 양방향 통신이다.

 


 

 조금 더 깊이 들어가 보면 HTTP는 결국 소켓 통신이다. 소켓은 IP와 Port number을 사용해 만들어진 통신의 양 끝단을 의미하는데 IP와 Port Number을 활용하는 TCP 레이어 위에 올라간 HTTP 또한 같은 방식을 사용한다. 즉, HTTP 통신은 소켓 통신을 활용한 통신 방식의 일종이기 때문이다.

 하지만 둘을 구분하는 이유는 한쪽에서만 요청에 대한 응답을 하는 웹 통신의 특성 상 HTTP가 하나의 중요한 프로토콜로 구분되었기 때문이다. http:// 로 시작되는 프로토콜은 내부 구현에서는 소켓을 사용하지만 별도 프로토콜로 구분한 이유가 이것이다.

 즉, HTTP 통신은 소켓통신의 일종이지만, 소켓통신이 HTTP 통신은 아니다.

 

반응형
  1. 목표
  2. HTTP 통신이란?
  3. HTTP 통신의 통신 방식
  4. 정리
  5. 소켓 통신이란?
  6. 정리


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Network/HTTP' 카테고리의 다른 글
  • [HTTP 메서드] 1. HTTP GET 메서드는 언제 사용되는가? 리소스 조회 및 질의를 위한 HTTP GET
  • [HTTP] 2. HTTP 메서드 정리 - GET, POST, PUT, PATCH, DELETE의 차이
  • [HTTP] 1. HTTP 메세지는 어떻게 구성되었는가? Start Line, Header Body로 보는 HTTP 메세지
  • HTTP(HyperText Transfer Protocol)의 특징
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • github
  • dagger2
  • java
  • junit4
  • Spring boot
  • gradle
  • Coroutine
  • 스프링
  • Android
  • Class
  • 코루틴
  • Jetpack Compose
  • compose
  • kotlin spring
  • Android Compose
  • Kotlin
  • flow
  • Dependency Injection
  • 코틀린
  • GraphQL
  • github actions
  • junit
  • 유닛 테스팅
  • junit5
  • 안드로이드
  • Unit Testing
  • GIT
  • 의존성 주입
  • HTTP
  • Spring

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
HTTP 통신과 Socket 통신의 차이점
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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