오늘은 백엔드 최상단에 위치해있는 인터넷에 대해 정리해보고자 한다.
인터넷이란 무엇인가? 어떻게 작동하는가?
인터넷은 수 많은 컴퓨터들이 상호 연결되어 데이터와 정보를 주고받을 수 있도록 하는 글로벌 통신 인프라다.
인터넷은 패킷 스위칭(packet switching)이라는 기술을 기반으로 작동하며, 이는 데이터를 작은 단위인 "패킷"으로 분할하여 전송한 뒤 목적지에서 다시 조립하여 원래의 데이터로 복원하는 기술이다.
패킷 스위칭의 주요 특징은 다음과 같다
1. 패킷 분할 : 전송되는 데이터는 작은 패킷으로 분활되며 각 패킷은 헤더(Header)와 페이로드(Payload)로 구성되어 있다. 헤더에는 출발지와 목적지 주소, 패킷 순서 등의 정보가 담겨 있고, 페이로드에는 실제 데이터가 포함된다.
패킷의 종류나 구조는 계층 별로 상이하고 들어가는 내용도 계층 별로 다르지만 일단은 이정도로만 알고 있으려고 한다.
[CS] 그림으로 알아보는 네트워크 - 계층화와 OSI, TCP/IP, UDP의 특징과 차이점
통신을 위해서는 바이너리 데이터를 주고받는 과정들이 필요하고, 이는 네트워크를 통해 진행됩니다. 네트워크는 어떻게 통신하고 계층화를 어떤 방법으로 적용하였는지에 대해 알아보고, 프
velog.io
2. 스위칭 및 라우팅: 분할된 패킷들은 네트워크 내의 스위치나 라우터를 통해 전송된다. 스위치와 라우터는 패킷의 헤더 정보를 기반으로 최적의 경로를 선택하여 다음 목적지로 패킷을 전달한다.
스위치와 라우터의 차이 :
스위치 - 목적지로 출발한 데이터를 중간에 적합한 경로로 스위칭해주는 역할을 하는것이 스위치이고 스위치는 데이터링크 계층에 속한다. 스위치는 데이터링크 계층에 속해 있으므로 MAC주소 기반으로 동작한다.
라우터 - 라우터 또한 목적지로 가는 적합한 경로를 찾아주는 라우팅 기능을 한다. 라우터는 IP주소를 기반으로 작동하여 네트워크 계층에 속해있다.
3. 독립적 전송: 각 패킷은 독립적으로 전송되며, 네트워크 내에서 다른 경로로 전송될 수 있다. 따라서 하나의 큰 데이터를 여러 패킷으로 분할하여 전송하면, 네트워크 장애나 혼잡 상황에서도 일부 패킷의 손실이나 지연이 다른 패킷에 영향을 미치지 않는다.
HTTP란 무엇인가?
HTTP(Hypertext Transfer Protocol)는 인터넷 상에서 웹 페이지와 같은 하이퍼텍스트 문서를 전송하기 위해 사용되는 프로토콜이다. HTTP는 클라이언트와 서버 간의 통신을 관리하며, 웹 브라우징과 웹 서비스 등 다양한 인터넷 활동에서 사용된다.
HTTP는 클라이언트-서버 모델을 기반으로 작동한다. 클라이언트는 웹 브라우저를 통해 요청(Request)을 생성하고, 서버는 이 요청에 대해 응답(Response)을 생성하여 클라이언트로 보낸다. 요청과 응답은 텍스트 형식으로 구성되며, 각각의 메시지는 헤더(Header)와 옵션으로 구성된 바디(Body)로 나뉜다.
서버(Server)란 인터넷 서비스를 제공하는 프로그램이나 컴퓨터를 의미하고 웹 시스템에서 컴퓨터나 스마트폰 등 다양한 기기를 사용하여 방문하는 웹 사이트의 정보를 담고 있는 프로그램이나 컴퓨터를 웹 서버(Web Server)라고 부른다. 클라이언트(Client)는 서버가 제공하는 인터넷 서비스를 이용하는 사용자나 사용자가 사용하는 기기를 의미한다.
HTTP의 주요 특징과 기능:
- 하이퍼텍스트 전송: HTTP는 하이퍼텍스트 문서(웹 페이지)와 그에 포함된 다양한 링크를 전송하기 위해 설계되었다. 하이퍼텍스트는 다른 문서로 연결되는 링크를 포함하는 문서 형식을 의미한다.
- 무상태 프로토콜(Stateless Protocol): HTTP는 각 요청과 응답이 독립적인 단위로 처리되며, 이전 요청과 관련된 상태 정보를 유지하지 않는다. 이로 인해 서버는 클라이언트의 이전 상태를 추적하지 않아도 되므로 단순한 구조를 가지게 된다.
- 요청 메서드: HTTP 요청은 여러 메서드(Method)를 사용하여 서버에 원하는 동작을 지시한다. 가장 흔한 메서드는 GET(데이터 조회), POST(데이터 전송), PUT(데이터 갱신), DELETE(데이터 삭제) 등이 있다.
- 응답 상태 코드: 서버는 요청에 대한 응답으로 상태 코드를 반환한다. 이 코드는 요청이 성공적으로 처리되었는지, 오류가 발생했는지 등을 나타낸다. 예를 들어, 200 OK는 성공, 404 Not Found는 찾을 수 없음을 나타낸다.
- 보안을 위한 HTTPS: HTTP는 기본적으로 데이터를 암호화하지 않으므로 보안에 취약할 수 있다. HTTPS는 보안 소켓 계층(SSL 또는 TLS)을 사용하여 데이터를 암호화하고 보호한다.
HTTP/1.1과 HTTP/2
https://ssungkang.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP-11-VS-HTTP-20
[네트워크] HTTP 1.1 VS HTTP 2.0
들어가기 전에 웹 개발자에게 있어서 HTTP는 빼놓을 수 없죠. HTTP는 1996년 1.0 버전으로 처음 release 되고 1999년 1.1 버전이 등장하였습니다. 그리고 1.1 버전은 HTTP 2.0이 등장하기까지 무려 15년 동안
ssungkang.tistory.com
기본적으로 HTTP는 1996년 출시되고 1999년에 1.1 버전으로 2015년까지 사용되었다고 한다.
순차적으로 요청과 응답을 처리하는 탓에 1.1은 동시 요청 수에 제약이 있어 병목 현상이 발생했다.
HTTP/1.1의 다양한 특징들이 있지만 현재 사용하는 HTTP/2의 특징들만 알면 될 거라 생각한다.
- Multiplexed Streams: 하나의 연결로 동시에 여러 개의 메시지를 주고 받을 수 있다. 또한 요청 순서에 상관 없이 Stream으로 받기 때문에 HOL Blocking 문제도 발생하지 않는다.
- Stream Prioritization: 응답에 대한 우선순위를 정해 우선순위가 높을 수록 빠른 응답을 한다.
- Server Push: 클라이언트의 요청을 최소화하고 서버가 리소스를 알아서 보내준다.
- Header Compression: Header Table과 Huffman Encoding을 사용하는 HPACK 압축방식으로 클라이언트와 서버는 각각 Header Table을 관리하고 이전 요청과 동일한 필드는 table의 index만 보내고, 변경되는 값은 Huffman Encoding 후 보냄으로서 Header의 크기를 경령화 하였다.
DNS란 무엇인가? 어떻게 작동하는가?
https://velog.io/@goban/DNS%EC%99%80-%EC%9E%91%EB%8F%99%EC%9B%90%EB%A6%A
DNS와 작동원리
도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다.
velog.io
DNS는 쉽게 말해서 전화번호부라고 생각하면 된다. 내가 어떤 사람의 이름을 안다면, 그 이름을 전화번호부에서 찾아서 번호를 찾아낼 수 있듯이, 도메인 이름(Domain Name)을 알면 DNS(Domain Name System)을 통하여 IP 주소를 알아낼 수 있는 것이다.
DNS 서비스는 다양한 조직과 업체에서 제공된다. 주로 인터넷 서비스 제공자(ISP), 호스팅 서비스 제공자, 도메인 등록 업체, 공공 DNS 서버 제공자 등이 DNS 서비스를 제공한다. 일반적으로 사용자의 컴퓨터나 장치는 이러한 DNS 서버에 질의(Query)를 보내고, 해당 도메인 이름에 대한 IP 주소를 받아온다.
DNS 작동 방식:
도메인 이름 조회: 사용자가 웹 브라우저에 도메인 이름을 입력하면, 운영 체제나 브라우저는 이를 로컬 DNS 캐시에 저장된 IP 주소로 변환하려고 한다. 캐시에 없는 경우에는 DNS 서버에 질의를 보낸다.
DNS 질의: 로컬 DNS 서버는 도메인 이름을 가장 근처에 있는 루트 DNS 서버로 질의한다. 루트 DNS 서버는 전세계 DNS 계층을 연결하는 첫 번째 단계의 서버로, 도메인의 최상위 도메인(TLD)을 관리한다.
TLD 질의: 루트 DNS 서버는 TLD 서버의 IP 주소를 알려주고, 로컬 DNS 서버는 해당 TLD 서버에 질의를 보낸다. TLD 서버는 도메인의 최상위 부분(.com, .org 등)을 관리하며, 실제 도메인 네임 서버(DNS)의 IP 주소를 알려준다.
도메인 네임 서버 질의: 로컬 DNS 서버는 TLD 서버로부터 받은 IP 주소를 통해 실제 도메인 네임 서버에 질의를 보낸다. 도메인 네임 서버는 해당 도메인의 IP 주소를 반환하거나, 추가적인 정보를 제공한다.
IP 주소 반환: 로컬 DNS 서버는 사용자에게 도메인 이름에 대한 IP 주소를 반환한다. 이후 사용자의 장치는 해당 IP 주소를 사용하여 서버와 통신을 시작한다.
호스팅(Hosting)이란 무엇인가?
https://velog.io/@dreamjh/%ED%98%B8%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80
호스팅이란?
호스팅에 대해 공부한 내용이다.
velog.io
호스팅(Hosting)은 웹 사이트나 애플리케이션을 인터넷 상에서 접근 가능하도록 만들어주는 서비스이다. 호스팅은 웹 사이트의 파일, 데이터베이스, 이미지 등을 저장하고 관리하는 역할을 한다. 웹 사이트를 온라인으로 공개하고 유지하기 위해 필요한 기반을 제공하는 것이라고 볼 수 있다.
호스팅은 일반적으로 호스팅 서비스 제공자에 의해 제공되며, 이 서비스를 통해 웹 사이트를 인터넷에 게시하고 관리할 수 있다. 호스팅에는 여러 종류가 있으며, 일반적으로 다음과 같은 유형이 있다:
- 공유 호스팅 (Shared Hosting): 여러 웹 사이트가 하나의 서버를 공유하는 형태다. 비용이 저렴하고 간단한 사이트나 블로그에 적합하다.
- VPS 호스팅 (Virtual Private Server Hosting): 하나의 서버를 가상 서버로 분할하여 여러 사용자가 독립된 환경을 사용하는 형태이다. 성능과 컨트롤 면에서 공유 호스팅보다 우수하다.
- 전용 서버 (Dedicated Server): 하나의 서버를 하나의 사용자가 전체적으로 사용하는 형태이다. 성능과 자유도가 높지만 비용이 높다.
- 클라우드 호스팅 (Cloud Hosting): 여러 대의 서버를 가상화 기술을 통해 연결하여 유연하고 확장 가능한 호스팅 환경을 제공하는 형태이다. 필요한 리소스를 유연하게 조정할 수 있다.
이렇게 간략하게나마 백엔드 개발자 로드맵 첫번째 부분 Internet 파트를 정리해보았다.
대부분은 남이 정리 및 공부한 글을 rephrase한 것밖에 없는데도 불구하고 이걸 쓰는데 며칠이나 걸린 건지..
조금이라도 일찍 시작해둘 걸 그랬다.
'개발자' 카테고리의 다른 글
Backend Developer Roadmap (2) - Learn a language [Java] (0) | 2023.09.03 |
---|---|
Backend Developer Roadmap (2) - Learn a language [Prologue] (0) | 2023.08.31 |
SSAFY 중간 점검 및 백엔드 개발자 로드맵 걸어보기 (1) | 2023.08.27 |
[SSAFY] 싸피 9기 노베이스 비전공자 합격 후기 & 느낀 점 (8) | 2023.01.07 |
HTML 배운 것 정리 (with 코로나) (0) | 2022.09.22 |