네트워크 16

WebSocket - SockJs

👣 개요 WebSocket은 HTML5 기반으로 만들어진 기술이기에 모든 브라우저에서 호환되지 않을 수 있다. 때문에 이런 한계점을 극복하고자 Node.js와 Spring 진영에선 각각 우회하는 기술을 만들었다. Node.Js는 Socket.io를 이용하고 Spring은 SockJs를 사용한다. 두 기술은 결국 아래와 같은 방식으로 WebSocket을 지원하지 않는 브라우저에게 실시간 통신 기법을 구현한다. 만약 Web Browser가 WebSocket을 지원하지 않으면 Polling, Long Polling 등등의 방식으로 우회해서 서비스를 제공한다.

네트워크 2023.10.05

채팅 기능 구현을 위한 이론적 공부

👣 개요 단순히 기능 구현만을 위해 인터넷에서 코드 레퍼런스를 찾는 것과 서적 등을 찾아보며 기술의 이론적 배경을 찾고 이후에 코드를 공부하는 것의 퀄리티 차이가 꽤 많이 난다는 것을 깨달은 후에 단순히 코드를 찾는 것은 이 후 기술 적용에는 도움이 되지 않는다는 것을 깨달았다. 때문에 프로젝트에 채팅 기능을 당장 구현하기 이전에 채팅 시스템에 대한 이론적 공부를 수행하고자 한다. 👣 WebSocket 이전의 채팅 구현 1. Polling 단순히 HTTP 프로토콜 위에서 작동하는 구현 방법 중 하나다. 특정 주기마다 요청-응답을 수행하며 데이터의 상태를 체크하는 방식으로 리소스 낭비가 매우 심하다. 불필요한 트래픽을 끊임없이 생성할 뿐만 아니라 요청 주기가 크다면 실시간 채팅이란 말이 무색해질 수도 있다..

네트워크 2023.10.04

CORS, SOP

👣 개요 예를 들어, 피싱 사이트가 보통의 네이버 사이트(www.fake:80)를 모사해 피해자를 속였다고 가정해보자. 해당 사이트의 HTML에 포함된 JS 코드에 의해 현재 LocalStorage의 정보들을 모두 긁어서 금융 사이트의 토큰을 찾고 은행 웹사이트 서버(www.bank:8080/account/1532)로 인출을 요구하는 요청이 전송된다고 가정해보자. 만약 피해자가 아무것도 모르고 공격자가 만든 웹 사이트를 클릭하면 그 순간 피해자는 의도하지 않은 은행 계좌의 인출이 요청될 수 있다. 이러한 경우를 대비해 은행 웹사이트에서 사이트의 출처를 표기한 Referer 헤더를 비교할 수도 있지만 웹 브라우저 차원에서 이 공격을 막는 대책을 이미 세워뒀다. 그것이 바로 SOP 다. 👣 SOP Same-..

네트워크 2023.09.17

특별한 의미의 IP 주소

👣 개요 공부를 하는 와중에 0.0.0.0과 127.0.0.1에 대한 공부를 진행하며 혹시 특별한 의미를 지닌 다른 IP는 없을까해서 진행한 공부 내용물. 👣 0.0.0.0 모든 네트워크 인터페이스를 의미하는 IP 주소. 서버가 0.0.0.0 주소로 바인딩되면, 해당 서버는 모든 네트워크 인터페이스로부터 들어오는 요청을 수신함을 의미한다. 👣 127.0.0.1 로컬 루프백 주소(Loopback Address)라고 불리는 주소. 이 주소는 모든 컴퓨터에서 자기 자신을 가리키는 특수한 IP 주소. 컴퓨터의 네트워크 인터페이스를 통하지 않고, 자기 자신으로 통신할 수 있도록 한다. 127.0.0.1은 보안상의 이유로 인터넷을 통한 외부 네트워크와의 통신을 차단함. 127.0.0.1 주소로 실행하면 외부에서 해..

네트워크 2023.08.04

웹 브라우저 저장소

👣 쿠키 만료기한이 있는 키-값 저장소. 최대 4KB까지 저장. same site 옵션을 strict로 설정하면 자동 전송 X. http only 옵션으로 JavaScript로 접근 X. 👣 로컬 스토리지 만료기한이 없는 키-값 저장소. 최대 10MB까지 저장. 웹 브라우저가 닫혀도 유지 가능. 서버에서 조작 X. 👣 세션 스토리지 만료기한이 없는 키-값 저장소. 최대 5MB까지 저장. 브라우저 탭 단위로 유지 가능. 탭을 닫으면 데이터 삭제. 서버에서 조작 X.

네트워크 2023.07.22

TCP Handshake

👣 TCP 연결 성립 과정 - 3-Way Handshake SYN 단계 [Client -> Server] Client가 ISN(임의의 32Bits 시퀀스 번호)와 함께 SYN 전송. SYN+ACK 단계 [Server -> Client] Server가 서버의 ISN과 클라이언트의 ISN+1값을 함께 SYN+ACK 전송. ACK 단계 [Client -> Server] Client가 서버의 ISN+1값을 함께 ACK 전송. 👣 TCP 연결 해제 과정 - 4-Way Handshake FIN 단계 [Client -> Server] Client가 FIN 세그먼트를 전송 ACK 단계 [Server -> Client] Server가 FIN에 대한 답변으로 ACK를 전송. 그리고 실제로 작업 중지를 시작. FIN 단계 ..

네트워크 2023.07.21

SSL/TLS

👣 개요 SSL은 초기 버전으로 차후 TLS로 명칭이 변경되었으나 보통 SSL/TLS라고 부른다. SSL은 Client와 Server가 통신할 때, 제 3자가 도청하지 못하도록 변조를 하는 방법이다. SSL은 비대칭키와 대칭키를 이용해서 성능적 이점과 보안적 이점 모두를 취한 기술이다. Http 통신 중에 절대 원문 그대로 정보를 주고 받지 않고 대칭키로 암호화 후에 전송하는 것이 특징이다. 위 방법으로 인해 제 3자가 패킷을 탈취하더라도 알 수 없는 암호로 적혀있어 보안에 유리하다는 특징이 있다. 👣 사전 지식 대칭키는 암호화와 복호화 과정에 사용되는 컴퓨터 자원이 비교적 적고 속도가 빠르다. 하지만 최초에 대칭키를 결정하고 교환하는 과정 중 탈취를 당할 염려가 있어 보안적으로 불안정하다. 비대칭키는 ..

네트워크 2023.07.21

HTTP

👣 HTTP/1.0 1개의 연결당 1개의 요청만 처리. 이는 RTT[패킷 왕복 시간]를 증가시켰다. 👣 RTT 증가 대처 방안 1. 이미지 스플리팅 하나의 이미지를 여러 조각으로 잘라서 병렬적으로 다운로드 받는 것 2. 코드 압축 HTML과 같은 코드들의 개행, 띄어쓰기 등등의 무의미한 문자를 없애는 것. 3. 이미지 Base64 인코딩 바이너리 형식의 이미지를 문자열로 변환해 일반 텍스트 기반의 프로토콜에서도 다룰 수 있게 한 방법. 이미지를 위한 별도의 요청을 열지 않아도 되어 RTT를 줄일 수 있다. 👣 HTTP/1.1 TCP는 Handshake로 인해 연결을 맺는 것 자체가 비용이 크기 때문에 Keep-alive 옵션을 이용해서 1 번의 연결로 n 번의 요청, 응답을 가능하게 했다. Http/1...

네트워크 2023.07.21

IP

👣 ARP - Address Resolution Protocol IP에서 MAC 주소로 변환하는 프로토콜. IP로 주소를 찾는 것처럼 묘사가 되지만 사실은 실제 통신은 MAC 주소로 구분된다. 실제로 IP에서 MAC 주소를 찾는 과정은 다음과 같다. 1. IP 주소로 MAC 주소를 요구하는 Request를 전역적으로 네트워크에 흩뿌린다. 즉, 브로드캐스트한다. 2. 해당 IP를 가진 기기가 자신의 MAC 주소를 Request를 보낸 기기에 1:1로 알려준다. 즉, 유니캐스트한다. 👣 IPv4 vs IPv6 IPv4 IPv6 표기법 32bit 를 8bit 씩 64bit 를 16bit 씩 예시 123.45.67.89 2045:ec4::3nj5:25:2634 👣 클래스 기반 할당 방식 기업과 같은 경우 많은 ..

네트워크 2023.07.21