일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- IT
- 개발자
- 카카오
- 도커
- 프로그래머스
- 운영체제
- Spring
- Python
- 엘라스틱서치
- C
- 리눅스
- programmers
- 캐시
- 알고리즘
- Java
- 파이썬
- 스프링
- 프로그래머스 #카카오 #IT #코딩테스트
- DPDK
- 네트워크
- 스프링부트
- docker
- Linux
- 쿠버네티스
- Kakao
- 코딩테스트
- 백엔드
- Elasticsearch
- springboot
- 자바
- Today
- Total
저고데
[개발 지식] HTTP 기본 지식(상) 본문
들어가며
저는 원래 이론 공부를 좋아하지 않습니다. (이론보다는 실습을 더 좋아한다는 말입니다.)
'백문이불여일타'라는 말이 있듯이, 코딩의 영역에서는 양반처럼 이론만을 공부하는 것보다는 머슴처럼 맨 땅에 헤딩하는 공부를 더 좋아합니다.
그래서 처음 컴퓨터 분야를 접했을 때는 운영체제나 자료 구조와 같은 필수 이론만 공부하고, 바로 어플리케이션을 만들었던 기억이 납니다.
물론 직접 개발하고 배포하면서 깨달은 점이 많고 이러한 방법이 학습 시간을 단축한 것은 맞지만, 사람이 너무 오만해지는 느낌이 들었습니다.
간단하게 HTTP를 설명하라고 했을 때, 제대로 답하지 못한 저를 보면서 기초가 많이 부족하고 겉멋이 들었구나 생각이 들었습니다.
기초가 부족하다보니 확장성이나 어렵고 오류를 해결하는데도 많은 시간이 걸리더군요.
따라서, 늦은 감이 없지만 지금부터라도 기초적인 개념을 조금 익혀보려고 합니다.
이번 시간에는 우리가 어떻게 인터넷 환경에서 통신을 하는지, 그 중에서도 웹에 대해서 알아보도록 하겠습니다.
IP(Internet Protocol)
우리가 다른 멀리 떨어져 있음에도 불구하고 연락을 할 수 있는 이유는 바로 인터넷 덕분입니다.
대표적으로 해저 광케이블을 통해서 통신 인프라를 구축한 것을 기원으로 들 수 있겠습니다.
이러한 통신 인프라를 소히 말해서 인터넷이라고 하는데요, 그렇다면 인터넷에서 컴퓨터들은 어떻게 통신을 하는 것일까요?
수많은 컴퓨터가 존재할 것인데, 만약 규칙이 없다면 혼돈이 일어날 것입니다.
하지만 사람들은 이를 방지하고자 하나의 규칙을 만듭니다.
이를 Protocol이라고 하고, 인터넷에서 사용되는 규칙을 Internet Protocol. 즉, IP라고 합니다.
가장 기본적인 규칙이기에 가장 간단하다고 할 수 있습니다.
대표적인 IP의 내용으로는 지정한 IP 주소에 데이터를 전달하고, 이러한 데이터를 패킷이라는 통신 단위로 전달하는 것입니다. (packet은 package와 bucket의 합성어로 데이터를 포장해서 보낸다고 이해하면 되겠습니다.)
즉, 출발지 IP 주소와 목적지 IP 주소 그리고 전송할 데이터(알맹이)를 같이 전달해야한다는 것이죠.
허나, 이러한 IP 프로토콜은 간단한 만큼 여러 한계가 있습니다.
만약, 패킷(데이터)을 받을 대상이 없거나, 목적지 컴퓨터가 꺼져있는 등 서비스 불능 상태이면 어떨까요?
그럼에도 불구하고 패킷이 전송될 것입니다.
또한, 전송 중간에 패킷이 사라지거나, 패킷이 순서대로 오지 않는 상황도 발생할 수 있습니다.
무엇보다, 컴퓨터에서 통신하는 어플리케이션이 둘 이상이면 모두에게 전달되는 문제가 발생합니다.
두 어플리케이션은 같은 IP 주소를 사용하기 때문이죠.
TCP(Transmission Control Protocol)
따라서, 위와 같은 문제를 해결하기 위해서 TCP 프로토콜이 탄생하였습니다.
앞서, IP 패킷은 출발지와 목적지 IP 주소에 대한 정보만을 포함합니다.
반면에 TCP는 IP 주소와 더해 출발지와 목적지 Port 정보가 존재합니다.
따라서, 하나의 컴퓨터에서 둘 이상의 어플리케이션을 실행해도 다른 Port를 사용해서 정확한 목적지로 전달할 수 있습니다.
그리고 패킷의 전송 순서와 검증 정보가 포함되어 있습니다.
패킷의 순서가 더 이상 엉망으로 전송되지 않고, 어떤 패킷이 통신 중에 소실되었는지도 확인할 수 있습니다.
TCP 통신에서의 큰 특징으로는 3-way-handshake가 있습니다.
이는 출발지와 목적지 간의 통신이 잘 이루어지는 지 테스트하는 첫 단계라고 할 수 있습니다.
UDP(User Datagram Protocol)
이는 TCP와 같은 계층으로 분류됩니다.
앞서 TCP를 읽어보시면 아시겠지만, 상당히 깐깐합니다.
물론 데이터의 손실을 막고 순서를 지켜주기에 신뢰성이 높지만, 복잡하고 느립니다.
이를 약간은 해결하기 위해서 UDP가 탄생했습니다.
UDP는 3-way-handshake와 같은 연결지향과 데이터 전달 보증 및 순서 보장 기능이 존재하지 않습니다.
그러나, 단순하고 빠르다는 장점이 존재하죠.
또한, 깐깐한 TCP는 상황에 맞게 커스텀을 할 수 없는 반면, UDP는 입맛대로 장점을 섞어서 커스텀하기가 상대적으로 쉽습니다.
따라서, 현재 통신은 대부분 UDP를 사용한다고 합니다.
'IP와 다를게 없는거 같은데?'
그렇게 느끼실 수 있습니다.
하지만, Port 정보가 존재하고 데이터의 중복 전송을 막아주는 checksum 기능이 존재한다는 점에서 IP 통신과 큰 차이가 있습니다.
마치며
오늘은 우선 간단하게 대표적인 통신 프로토콜인 IP, TCP, UDP에 대해서 알아보았습니다.
다음 시간에는 본격적으로 웹 브라우저의 요청 흐름과 HTTP가 무엇인지 알아보도록 하겠습니다.
'개발 지식' 카테고리의 다른 글
[개발 지식] JVM의 동작 원리와 구조 (0) | 2025.02.15 |
---|---|
[개발 지식] HTTP 기본 지식(하) (0) | 2025.01.14 |
[개발 지식] Disk에 데이터를 쓰는 것이 RAM보다 느린 이유 (1) | 2024.12.17 |
[개발 지식] 버퍼와 캐시의 차이 (1) | 2024.12.16 |
[개발 지식] 웹 브라우저에서 naver.com를 접속할 때의 과정을 알아보자 (5) | 2024.09.02 |