🐈오늘 공부한 것
✔️IP와 IP 패킷
- 패킷 교환 방식 이전에는 회선 교환 방식이 있었다. 수신자, 발신자가 각각 전용 회선을 가지고 있어서 요청이 왔을 때 이들을 연결시켜주는데 중간에 그 역할을 담당하는 오퍼레이터가 있다. 오퍼레이터를 거쳐야 하기 때문에 즉시성이 떨어지고, 수신자가 다른 회선과 연결되어 있으면 발신자는 기다려야하는 상황이 생긴다.
- 이를 보완하기 위해 생겨난 것이 패킷 교환 방식인데, 현대의 인터넷 프로토콜에서는 데이터를 패킷 단위로 잘게 쪼개서 보낸다.
- 출발지에서 목적지까지 무사히 전달되기 위해서는 규칙이 필요한데, 이 때 IP 패킷이라는 개념이 등장. IP 패킷은 택배처럼 출발지 IP와 목적지 IP 주소를 포함하고 있어서 네트워크에 존재하는 노드들이 서로 데이터를 전달-전달 하면서 목적지까지 데이터를 전송한다.
- 이렇게 전달이 잘 완료되면 서버에서도 같은 방식으로 응답을 돌려준다.
노드란 네트워크에 연결된 하나의 기기를 의미한다. 라우터, 허브, 서버 등… 재분배지점 혹은 통신 종단점을 의미한다.
- 너무나 완벽해 보이는 IP 프로토콜에도 한계가 있는데 바로 비연결성과 비신뢰성이다. 비연결성은 패킷을 받을 대상이 없어도 패킷을 그대로 보내게 되는 것이고, 비 신뢰성이란 중간에 데이터가 유실되어도 그것을 파악할 수 없는 것이다. 큰 데이터를 패킷으로 잘게 쪼개어 보냈을 때 받는 쪽에서 그 패킷이 순서대로 들어오는 것인지 확인할 수 없다.
✔️TCP
- IP프로토콜의 한계를 보완하기 위해서 등장한게 TCP - 전송 제어 프로토콜이다.
- IP 계층 이전에 TCP를 사용하는 전송 계층이 있어서 여기서 보완이 되는데 이 TCP 를 통해 생성된 TCP 세그먼트는 IP주소를 보완할 수 있는 PORT 번호와 전송 제어 정보 및 순서와 검증 정보를 가지고 있어서 중간에 데이터 유실이 있어도 확인할 수 있고, 순서도 보장한다.
- HTTP 메시지가 생성되면 소켓을 통해 전달되어 TCP 세그먼트가 생성된다. 이 TCP 헤더를 포함해 IP 패킷이 완성되면 물리계층을 지나 서버에 전송이 되는 것.
소켓이란 데이터를 주고받을 수 있는 실질적인 창구를 의미한다.
예를 들어 IP 주소가 전체 건물 주소라면, 그 건물 1층에 은행이 있을 때 그 1층이 PORT 번호인 셈.
은행에도 실질적으로 고객 요청을 처리하는 여러 창구가 있듯이 소켓도 비슷한 역할을 한다.
즉 응용 프로그램에 포트가 하나일 때 소켓은 아주 많이 존재할 수 있어서 한 번에 여러개의 요청을 처리할 수 있는 것이다.
- TCP 는 데이터를 전송하기 전에 서버에서 응답을 받을 수 있는 패킷을 보내고, 요청이 수락 되었을 때만 연결이 성립되어 데이터를 보낼 수 있다.
- TCP 와 비교되는 또 다른 프로토콜로는 UDP가 있는데, UDP는 신뢰성을 보장하지는 않지만 빠른 속도를 자랑한다. 실시간 스트리밍등에 사용될 수 있는 프로토콜이다.
✔️네트워크 계층
- 네트워크 계층에는 국제 표준 규격인 OSI 7계층과, 이를 바탕으로 실무적으로 사용되는 표준인 TCP/IP 4계층이 있다.
- 표준 모델이 필요한 이유는, 컴퓨터 제조사와 시스템에 상관 없이 모두가 통신할 수 있는 표준 규격이 필요했기 때문이다. 이러한 모델이 있기 때문에 포트와 프로토콜의 호환 문제를 해결하고, 네트워크 문제가 발생했을 때 어떤 계층에서 발생한 것인지 원인을 파악할 수 있다는 장점이 있다.
OSI 7계층
- 1계층 물리계층 : 시스템간의 물리적 연결을 담당하는 계층으로, 전기 신호를 변환한다.
- 2계층 데이터링크 계층 : 네트워크 기기 간의 데이터 전송을 담당하고, 물리 주소를 결정하는 계층이다.
- 3계층 네트워크 계층 : 네트워크 간의 데이터 라우팅을 담당하는 계층이다. 라우팅이란 데이터를 목적지로 어떻게 전달할 것인지 경로를 결정하는 것을 의미한다.
- 4계층 전송 계층 : 통신의 신뢰성을 제공하는 계층으로, TCP/UDP 연결이 일어난다. 패킷의 유실이나 순서를 바로잡는 계층.
- 5계층 세션 계층 : 통신 양 끝 단의 프로세스의 연결과 해제를 담당한다.
- 6계층 표현 계층 : 전송 데이터를 인코딩 혹은 디코딩 하는 계층이다.
- 7계층 응용 계층 : 사용자 인터페이스를 제공하는 응용프로그램 계층이다. 대표적인 프로토콜로는 HTTP 프로토콜이 있다.
- 데이터 캡슐화 : 송신자가 데이터를 전송하면, 상위 계층을 거쳐 하위 계층으로 데이터가 흘러가는데 이 때 각 계층을 거치며 정보를 담고 있는 헤더가 추가되고 이를 캡슐화라고 한다. 수신자는 하위 → 상위 계층을 거쳐 역캡슐화가 일어나 최종적으로 데이터 원본을 전송받게 된다.
TCP / IP 4계층
- 4계층 어플리케이션 계층
- 3계층 전송계층
- 2계층 인터넷 계층
- 1계층 네트워크 인터페이스 계층
- OSI 7계층의 모든 단계를 4계층으로 포함할 수 있다.
✔️HTTP
- HTTP 는 발전 과정에 따라 HTTP 1.1/ → HTTP /2 → HTTP /3 으로 구분되는데 2는 TCP 기반 3은 UDP 기반이다.
- HTTP프로토콜은 두 가지 큰 특징이 있는데, 무상태성과 비연결성이다.
- 무상태성이란 클라 - 서버 연결이 일어났을 때 서버에서 해당 요청을 기억하지 않는 것을 의미한다. 서버에서 기억하는 것이 아니라 클라이언트가 모든 정보를 가지고 요청을 하기 때문에 특정 서버에서만 요청을 처리하는 것이 아니고 어떤 서버든 요청을 처리할 수 있다. 장점은 서버를 무한하게 증설할 수도 있고, 한 서버에서 장애가 발생했을 때 다른 서버가 이를 처리할 수도 있다. 단, 로그인 서비스 같은 경우는 로그인 한 상태를 서버에 유지해야 한다.
- 또 다른 특징인 비연결성은 요청과 응답이 종료되면 TCP/IP 연결도 끊어지는 것을 말한다. 요청이 많지 않고 빠르게 응답이 가능한 경우에는 효율적일 수 있지만, 연결을 매번 새로 맺어야 하고 매번 많은 자원을 다운로드 해야한다는 단점이 있음.
✔️HTTPS
- HTTP Secure 의 약자. http 프로토콜을 더 안전하게 사용할 수 있다는 의미이다. https는 요청과 응답으로 오가는 내용을 암호화한다. 제 3자가 중간에 데이터를 탈취해도 그 내용을 알아볼 수 없다.
- 암호화 방식 : 암호화 키와 복호화 키가 필요한데, 암호화-복호화 키가 동일하면 대칭 키, 다르다면 비대칭 키 라고 한다. 비 대칭키 방식이 보안성은 더 좋지만, 연산에 더 많은 시간이 소모된다는 단점이 있다.
- 암호화 복호화 플로우가 있는데, 좀 더 상세하게 정리해서 다시 정리해보겠음...
✔️쿠키와 세션
오늘 TIL 스터디 발표 주제는 쿠키와 세션 그리고 토큰이었다. 쿠키와 세션을 찜질방에 비유해주셨는데, 찜질방에서 발급받아서 내가(클라이언트) 가지고 다니는 찜질방 키가 쿠키, 찜질방 안내데스크(서버)에 저장된 나에 대한 정보가 세션이라고 할 수 있다. 이 찜질방 키로는 내가 어떤 곳을 갔고 얼마를 결제 했는지, 이런 개인정보이지만 보안상 엄청 큰 문제는 없는 정보가 담기게 되고, 세션에는 그런 정보 보다는 조금 더 보안이 필요한 정보가 저장된다. 내가 안내 데스크에 가서 내가 누구입니다-라고 밝혀야만 정보를 주는 것처럼, 클라-서버에서도 세션 ID 라는 것을 가지고 요청이 들어왔을 때 체크를 하기 때문에 쿠키보다는 쪼금 더 보안에 신경썼다고 할 수 있다.
예시로 내가 어떤 로그인 사이트에 아이디 비밀번호를 입력했을 때, 아이디를 저장하겠냐고 묻는 것에 답한 나의 답변은 쿠키, 실제 그 로그인 정보는 세션에 담기게 된다. 쿠키는 클라이언트가 가지고 있으면서 서버 요청시 전달해주는 것이고, 세션은 서버가 가지고 있으면서 클라이언트에 세션ID 를 확인해 데이터를 내어주는 것이라고 볼 수 있음. 단 세션 ID 를 메모리위에 올려놓고 체크하기 때문에 동접자가 많아져서 세션 ID의 유효성을 많이 검증해야될 때는, 메모리라는 공간이 한정적이기 때문에 과부하가 올 수도 있다는 단점이 있다.
이를 보완하기 위해서 등장한 것이 토큰이라는 개념인데, 이 토큰은 서버가 사용자에게 발급해주는 것으로, 서버에 클라이언트 정보를 저장하지 않고 클라이언트가 토큰을 서버에 전달해주면 그 유효성을 체크하는 방식이기 때문에 서버 부하를 줄일 수 있다. JWT 인증 방식은 이 토큰을 기반으로 한다.
발표 들은 내용을 내 나름대로 정리한 것이라 부적절한 설명이 있을 수 있음..! 더 공부해서 보완하겠다.
🐈더 공부할 것
1. 투두리스트 정리 후 블로깅
2. 알고리즘
🐈오늘의 느낀 점
오늘은 계획했던 일을 거의 대부분 하지 못했다. 변명하자면 오전 오후 내내 몸이 너무 무거웠다... 물먹은 솜처럼 무거워서 그냥 좀 쉬었다. 그래도 오늘 공부한 내용을 이렇게나마 정리할 수 있다는 것은 다행이라고 생각한다.
최근 우리 몸의 신경계와 관련한 다큐를 보고있다. 여러 다큐를 보고 아티클을 보면서 그리고 조금이나마 경험적으로 깨달은 것은, 내가 행동하는 것이 신경계를 발달시키고 그 신경계가 곧 내가 보고 듣는 것이 된다는 거다.
예전에 불교, 명상 관련 서적에서 이 세상의 실체는 나로부터 나온다는 구절을 많이 봤다. 어떤 현상을 행복하게 받아들이는 것도 나고, 불행하게 받아들이는 것도 나라는 것.. 그것이 잘 와닿지 않았는데 이번에 다큐를 보면서, 우리 몸의 신경계를 통해 나와 세상이 상호작용 한다는 것을 알게 되었다.
신경계의 뉴런들은 내가 특정 행동을 반복하면 그에 맞춰 발전되고 그것을 더 잘하게 된다고 한다. 그 뉴런들이 서로 연결연결 되면서, 나무가 햇빛을 받는 쪽으로 가지를 뻗듯이 그렇게 강하고 튼튼해진다는 것이다. 내가 긍정적으로 사고하고 늘 나에게 도움을 주는 쪽으로 행동하면 그 것을 더 잘하게 - 익숙하게 되는 것이고, 내가 부정적으로 사고하고 늘 걱정하고 행동하지 않으면 그런 쪽으로 익숙하게 되는 것이다. (나는 그렇게 이해했다.) 그렇게 내 신경계를 발달시켜나가면, 그 신경계를 통해서 내가 세상과 상호작용 하기 때문에- 세상을 보고 듣고 이해하며 정보를 처리하기 때문에 결국 내가 받아들이게 되는 것이 달라질 것이고 내 세상도 달라질 것이다.
'TIL' 카테고리의 다른 글
[Day 58] 2022-0912: Next.js (0) | 2022.09.13 |
---|---|
[Day 57] 2022-0909: Next.js , 알고리즘 (0) | 2022.09.09 |
[Day 55] 2022-0907: TodoList gh-pages 배포 (1) | 2022.09.08 |
[Day 54] 2022-0906 : 웹 접근성 (0) | 2022.09.07 |
[Day 53] 2022-0905 : react-redux, 웹 표준화, SEO, 알고리즘 (0) | 2022.09.06 |