다른 분의 블로그를 보고 정리한 글입니다.
https://dev-coco.tistory.com/161
HTTP 메소드는 클라이언트가 서버에게 사용자 요청의 목적을 알리는 수단입니다.
GET은 데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식입니다. URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안됩니다.
POST는 데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식입니다. 완전히 안전하다는 것은 아니지만 URL에 데이터가 노출되지 않아 GET 보다는 안전합니다.
TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있습니다.
UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다.
TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.
TCP는 3 way-handshaking 과정을 통해 연결을 설정하고, 4 way-handshaking 과정을 통해 연결을 해제합니다.
3 way-handshaking란 TCP 네트워크에서 통신하는 장치가 서로 연결이 잘 되었는지 확인하는 방법입니다. 송신자와 수신자는 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인합니다.
4 way-handshaking란 TCP 네트워크에서 통신하는 장치의 연결을 해제하는 방법입니다. 송신자와 수신자는 총 4번에 걸쳐 데이터를 주고 받으며 연결을 끊습니다.
HTTP (Hyper Text Transfer Protocol) 이란 데이터를 주고 받기 위한 프로토콜 이며, 서버/클라이언트 모델을 따릅니다.
HTTP는 상태 정보를 저장하지 않는 Stateless의 특징과 클라이언트의 요청에 맞는 응답을 보낸후 연결을 끊는 Connectionless의 특징을 가지고있습니다.
HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고 받으면 제 3자에 의해 조회될 수 있습니다.
이러한 문제를 해결하기 위해 HTTP에 암호화가 추가된 프로토콜이 HTTPS 입니다.
HTTPS는 SSL 껍질을 덮어쓴 HTTP 라고 할 수 있습니다.
*SSL(Secure Socket Layer) : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL 이 TCP와 통신함으로써 암호화와 증명서, 안정성 보호를 이용할 수 있게 됩니다.
쿠키는 클라이언트에 저장되지만, 세션은 서버에 저장됩니다. 세션은 서버에 저장되므로 서버의 자원을 사용합니다. 반면 쿠키는 클라이언트에 저장되므로 서버의 자원을 사용하지 않는다는 이점이 있습니다. 서버에 요청을 보내는 사용자가 많은 경우 세션은 부하가 심할 수 있습니다.
쿠키의 속도는 세션보다 빠르고, 보안은 세션보다 좋지 않습니다.
반대로 세션의 속도는 쿠키보다 느리고, 보안은 쿠키보다 좋습니다.
세션 기반 인증은 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가지고,
토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가집니다.
단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다고 생각합니다. 왜냐하면, 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하는 것은 어렵습니다.
JWT(JSON Web Token)는 JSON 포맷을 이용하는 Claim 기반의 웹 토큰이며, 토큰 자체를 정보로 하는 Self-Contained 방식으로 정보를 안전하게 전달합니다.
JWT는 헤더(Header).내용(Payload).서명(Signature)로 구성되며 각 파트를 점(.)으로 구분합니다.
*claim : 사용자 정보나 데이터 속성등을 의미
대칭키와 비대칭키는 양방향 암호화 방식이며,
대칭키는 암호화와 복호화에 같은 암호키를 쓰는 알고리즘입니다.
이는 중간에 누군가 암호화 키를 가로채면 암호화된 정보가 유출될 수 있다는 단점이 있는데, 이런 문제를 보완한 방법이 비대칭키(공개키) 입니다.
비대칭키는 암호화와 복호화를 할 때의 키를 서로 다른 키로 사용하는 암호화 알고리즘입니다.
타인에게 절대 노출되어서는 안되는 개인 키(private key)와 공개적으로 개방되어 있는 공개키(public key)를 쌍으로 이룬 형태입니다.
서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 시 적용되는 것이 Connection Timeout 입니다.
즉, 접근을 시도하는 시간 제한이 Connection Timeout 되는 것을 말합니다.
클라이언트가 서버에 접속을 성공 했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것이 Read Timeout 입니다.
이 경우 클라이언트는 해당 상황을 오류로 인지하고, 서버는 계속 로직을 수행하고 있어 성공으로 인지해 양 사이드간 싱크가 맞지 않아 문제가 발생할 확률이 높습니다.
공인 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소입니다.
사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이며, IPv4의 주소부족으로 인해 너브넷팅된 IP이기 때문에 라우터(공유기)에 의해 로컬 네트워크 상의 PC나 장치에 할당됩니다.
사설IP 주소만으로는 인터넷에 직접 연결할 수 없고, 라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당 받아 인터넷에 접속 할 수 있습니다.