일단 본격적인 내용에 들어가기에 앞서서 하나 선언하고 시작하겠다. 나는 앞으로 TIL을 작성하는 과정에서 Chat GPT를 대놓고 적극적으로 활용할 것임을 공표한다 ㅋㅋㅋㅋㅋ google로 키워드를 찾고 오늘같이 html, javascript, react가 아닌 부분은 공식문서도 잘 없거나 들어가도 정말 읽기가 힘든 경우가 많다. 일단 Chat GPT사마를 이용해서 감을 못잡는 경우에는 개념의 틀을 먼저 잡고 서칭을 해서 보완하는 편이 이해가 빠른 것 같아 그 방식을 적극 이용할 것이며, 영어실력이 그렇게 탁월하지도 않은데 혼자 공식문서들을 들이받으며 해석하다보니 머리가 다 빠져버릴 것 같아서 파파고와 같은 번역 툴도 적극 이용하겠다. 이런 툴들을 통해 이해가 빨리되고 공부 사이클이 조금 더 원활하게 돌아가게해야 숨통이 트일 것 같다.
오늘부터 시작하게된 노마드코더 타입스크립트 무료강의 챌린지도 있고, 지금 진행중인 사이드 프로젝트 강의로 30일 블로깅 챌린지도 하고있고, 개인적으로 만들고 싶은 사이드 프로젝트도 있는데 그건 고사하고 리덕스와 리엑트 공식문서 및 책 따라하면서 실습하는 것도 진도가 잘 안나가고 있고, 코드카데미도 매일매일 이용하면서 부족한 파트 보완하려고 하는데 시간이 잘 안나고, 게임만드는 툴도 진짜 하루 30분이라도 다루고 싶은데 엄두가 잘 안나서 블로깅 시간을 최대한 단축하면서 내용은 여전히 알차게 가져가고 싶은 욕심이 들기 때문에, 다양한 툴의 사용을 극대화해서 원하는 바를 다 이루어보도록... 어떻게든 안되면 되도록 하겠다..!!😇😇😇
오늘의 주제
- IP/IP Packet
- TCP/UDP
- 네트워크 계층모델
- HTTP
- HTTPs
#1. IP/IP Packet
IP란 Internet Protocol의 줄임말로 인터넷을 통해 Source Device에서 Destination Device로 데이터 패킷을 전달하는 역할을 하는 통신 프로토콜이다. 네트워크 계층 프로토콜이며 OSI 7 계층 구조에서는 3번째 계층에 해당된다. IP로 통신이 이루어질 때 지정한 주소에 패킷이라는 통신 단위로 데이터를 전달한다. 패킷이라는 통신단위는 안전한 전송을 위하여 데이터 페이로드(payload)뿐만 아니라 출발지와 목적지의 IP 주소를 가지고 있다. 이렇게 목적지가 저장되어 있으면 연결된 노드 사이에서 목적지를 향해 전달하게 된다. 목적지에서 무사히 데이터를 전송받게 되면 역시 IP Packet의 형태로 응답을 클라이언트에 다시 전송해준다.
이렇게 들으면 마냥 좋은 방법이지만 한계 역시 존재한다.
대표적으로 비연결성과 비신뢰성이 있다.
비연결성이란, 도착지가 실제로 존재하지 않아서 패킷을 받을 대상이 없거나 현재 받을 수 없는 상태이더라도 서버가 잘 구동되는지 알 방법이 없기 때문에 패킷을 그대로 전송하게되는 현상을 말한다.
비신뢰성이란, 패킷이 전달되는 순서와 관련된 단점인데 데이터가 목적지가 정해져 있는 것이지 순서를 포함하고 있지는 않아서 중간에 다른 노드를 통해 전달되는 경우 나중에 보낸 패킷이 먼저 도달할 수도 있어 의도하지 않은 순서대로 도착하는 것을 말한다.
#2. TCP/UDP
TCP(Transmission Control Protocol) 란 신뢰할 수 있는 스트림 전달 서비스를 제공하기 위해 사용되는 어플리케이션 계층과 네트워크 계층 사이에 있는 전송 제어 프로토콜이다. IP 통신만으로 한계가 있는 단점을 보완해 줄 수 있는데, 앞서 살펴본 IP를 이용한 통신보다 상위 계층이기 때문에 앞서 생겼던 문제점들을 미리 방지할 수 있다.
TCP에는 연결지향적인 성격이 있고, 데이터의 전달을 보장하며 순서도 보장한다. 따라서 신뢰할 수 있는 프로토콜로 여겨지는데 다음과 같은 방식들로 이런 장점들이 구현된다.
TCP 프로토콜의 작동방식은 다음과 같다. 웹 서버가 클라이언트에 HTML 파일을 보낼 때 HTTP 프로토콜을 사용한다고 해보자. 그런 다음 HTTP 프로그램 계층은 TCP 계층에 연결 설정을 요청한 다음 파일을 전송합니다. 그런 다음 TCP 스택은 패킷의 형태로 파일을 분할하고 번호를 매긴 다음 마지막으로 전송할 인터넷 프로토콜 계층으로 전달한다. 전송 중인 각 패킷은 동일한 source 및 destination IP 주소를 갖지만 패킷은 여전히 다양한 경로를 따라 전송된다. 클라이언트 컴퓨터의 TCP 프로그램 계층은 모든 패킷이 도착할 때까지 항상 대기하고, 수신한 패킷을 승인한 후 재전송을 요청한다.
연결방식을 자세히 살펴보자면 3way handshake 방식을 사용한다. 먼저 클라이언트 측에서 서버에 SYN을 보낸다(문을 두드린다). 그러면 서버에서 통신이 가능할 경우 문을 두드리면서(SYN) 들어와도 좋다고 말해준다(ACK). 클라이언트 측에서는 '그럼 나 이제 들어간다'라고 말하고(ACK) 문을 열고 서로 데이터를 주고 받는다.
#3. 네트워크 계층모델
네트워크 계층 모델은 네트워크를 통해 두 장치 간에 발생하는 통신 프로세스를 설명하는 데 사용되는 개념적 프레임워크입니다. 그것은 종종 인터넷의 기능을 설명하기 위해 사용된다.
(1)OSI 7 계층 모델
가장 널리 사용되는 네트워크 계층 모델은 OSI(Open Systems Interconnection) 모델로, 7개의 계층으로 구성되는데 계층은 다음과 같이 구분된다:
물리적 계층: 이 계층은 구리선 또는 광섬유 케이블과 같은 물리적 매체를 통해 데이터 비트를 전송하는 역할을 한다.
데이터 링크 계층: 이 계층은 동일한 네트워크에 있는 두 장치 간에 신뢰할 수 있는 통신 링크를 설정하는 역할을 한다.
네트워크 계층: 이 계층은 인터넷을 통해 원본 장치에서 대상 장치로 데이터 패킷을 전달하는 역할을 한다. IP 프로토콜은 일반적으로 이 계층에서 사용된다.
전송 계층: 이 계층은 두 장치 간에 종단 간 통신을 제공하는 역할을 한다. 이 계층에서는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)가 일반적으로 사용된다.
세션 계층: 이 계층은 두 장치 간의 통신 세션을 설정, 유지 및 종료하는 역할을 한다.
프레젠테이션 계층: 이 계층은 이진 데이터를 ASCII로 변환하는 것과 같이 한 형식에서 다른 형식으로 데이터를 변환한다.
응용 프로그램 계층: 이 계층은 전자 메일, 웹 검색 및 파일 공유와 같은 장치에서 실행되는 응용 프로그램에 서비스를 제공한다.
네트워크 계층 모델은 네트워크상의 두 장치 사이에서 발생하는 다양한 통신 계층을 개념화하는 방법을 제공하며, 통신이 신뢰할 수 있고 효율적이며 안전하도록 보장하는 데 도움이 된다.
(2) TCP/IP Protocol
TCP/IP 계층 모델은 일반적으로 사용되는 또 다른 네트워크 계층 모델이며, 인터넷의 기반이 되는 모델이다. 그것은 다음과 같이 네 개의 층으로 구성된다:
링크 계층: 이 계층은 이더넷 또는 Wi-Fi와 같은 물리적 매체를 통해 데이터를 전송한다. 이더넷, 와이파이, PPP(Point-to-Point Protocol)와 같은 프로토콜을 포함한다.
인터넷 계층: 이 계층은 인터넷을 통해 원본 장치에서 대상 장치로 데이터 패킷을 전달하는 역할을 한다. 그것은 IP 프로토콜뿐만 아니라 ICMP(인터넷 제어 메시지 프로토콜), IGMP(인터넷 그룹 관리 프로토콜)와 같은 프로토콜을 포함한다.
전송 계층: 이 계층은 두 장치 간에 종단 간 통신을 제공하는 역할을 한다. 그것은 전송 제어 프로토콜과 UDP 프로토콜을 포함한다.
응용 프로그램 계층: 이 계층은 전자 메일, 웹 검색 및 파일 공유와 같은 장치에서 실행되는 응용 프로그램에 서비스를 제공한다. HTTP(Hypertext Transfer Protocol), SMTP(Simple Mail Transfer Protocol), FTP(File Transfer Protocol)와 같은 프로토콜을 포함한다.
TCP/IP 계층 모델은 OSI 모델과 유사하지만 세션, 프레젠테이션 및 애플리케이션 계층을 단일 애플리케이션 계층으로 결합한다. OSI 7 계층 모델은 이론적인 모델에 가까우며 실제로 많이 사용되는 것은 TCP/IP 모델로서 인터넷 통신의 사실상 표준이라고 할 수 있다.
#4. HTTP
HTTP(Hypertext Transfer Protocol)를 한 단어로 정리하면 프로토콜이다. 한 마디로 통신규칙이라고 생각하면 된다. 웹 브라우저와 웹 서버 간의 통신에 사용되는 규칙인 것이다. 웹 브라우저에 URL을 입력하면 브라우저는 서버에 HTTP 요청을 발송하고, 서버는 요청된 정보가 포함된 HTTP response로 응답합니다.
HTTP는 무상태성의 프로토콜이며, 이는 각 요청이 이전 요청에 대한 지식 없이 독립적으로 처리됨을 의미한다. 이러한 이유 때문에 웹 응용 프로그램이 종종 쿠키 또는 다른 기술을 사용하여 여러 요청에 걸쳐 상태를 유지하는 것이다. 그러나, 무상태성은 서버가 응답하지 않은 경우 다른 서버에 다시 요청을 보내면 되므로 무한한 확장성을 가지는 장점도 있다.
HTTP 프로토콜은 서버에 대한 요청에 사용할 수 있는 메서드 또는 동사 집합을 정의한다. 가장 일반적인 방법은 다음과 같다:
(1) GET: 서버에서 리소스를 검색한다.
(2) POST: 서버에서 처리할 데이터를 제출한다. 일정한 형식의 데이터를 제출하는 데 자주 사용된다.
(3) PUT: 서버의 리소스를 새 리소스로 바꿀 때 사용다.
(4) DELETE: 서버에서 리소스를 삭제다.
(5) HEAD: 리소스에 대한 헤더 정보만 검색다.
(6) OPTIONS: 리소스에 사용할 수 있는 통신 옵션에 대한 정보를 검색다.
(7) PATCH: 서버의 리소스를 부분적으로 수정한다.
HTTP 방식은 TCP/IP 방식과 비교하여 서버와의 연결을 최소화 할 수 있어 서버 리소스를 적게 사용하는데 유리하다.
#5. HTTPs
(1) HTTPs의 개념
HTTPS는 위에서 알아본 HTTP에 Secure가 붙은 것인데, 단어 뜻 그대로 기존의 HTTP 프로토콜을 더 안전하게(Secure) 사용할 수 있음을 의미한다. HTTP와 어떻게 다르기에 안전한 방식이 되는 것일까? HTTPs에서는 요청과 응답을 암호화하여 주고받기 때문이다.
만약, HTTP를 사용할 경우 요청과 응답을 가로채기만하면 많은 정보를 손쉽게 빼낼 수가 있다. HTTPs를 사용할 경우에는 데이터가 암호화되어서 제 3자가 탈취하더라도 알아보기 어렵다.
(2) 암호화 방식
암호화 방식은 암호학에 대해 지식이 부족하므로 간단하게만 알아보자.
1) 대칭 키 암호화 방식
대칭 키 암호화 방식은 하나의 키를 사용하여 암호화 할 때 사용한 키를 이용하여 복호화 한다. 하나의 키만 사용하기 때문에 연산 속도가 빠르다. 하지만 키가 하나 뿐이라 키를 관리하는데 신경을 많이 써야한다.
2) 공개 키(비대칭 키) 암호화 방식
비대칭 키 방식은 두 개의 키를 사용한다. 암호화할 때 사용한 키와 복호화에 사용하는 키를 다르게 정해서 사용한다. 두 개의 키를 각각 공개 키, 비밀 키라고 부른다. 이름 그대로 공개 키는 누구나 접근할 수 있는 키이고 비밀 키는 해당 키를 가진 사람만 사용할 수 있게 하는데, 보통 사용자가 공개 키를 가지고 서버가 비밀키를 가진다. 서버가 해킹당하는 경우를 제외하고는 대칭 키 암호화 방식보다는 훨씬 안전한 방식이다. 다만 연산에 더 많은 시간을 소모한다는 단점이 있다.
'study > TIL' 카테고리의 다른 글
[TIL No.26] Ouath 인증방식 (0) | 2023.03.09 |
---|---|
[TIL No.25] 해싱(Hashing), 토큰 인증방식(Token) (0) | 2023.03.07 |
[TIL No.23] SEO, 웹 접근성 (1) | 2023.03.03 |
[TIL No.22] 웹 표준, Sementic HTML (0) | 2023.03.02 |
[TIL No.21] Git-commit-convention / Redux (0) | 2023.02.27 |