일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- React #effect hook #useEffect
- 얕은 복사 #깊은 복사 #shallow copy #deep copy
- React #Hook rules #Hook 규칙
- 이친수
- React-Query
- react #useCallback #react Hook
- npm #not being able to find a file #npm install Error
- interceptors
- axios
- donwstream #upstream #origin
- rate limit
- 백준 #적록색약
- react
- 코드스테이츠 #알고리즘 #그리디
- DP #c++
- 다익스트라 #파티 #백준
- react fragment
- JWT #토큰 #refreshToken #accessToken #Token #token #localStorage #sessionStorage
- useState #Hooks
- #useRef #언제 쓰는데?
- React #controlled component #비제어 컴포넌트 #제어 컴포넌트
- 노마드 코더 #타입스크립트 #typescript #class
- 빡킹독
- 버블링 #갭쳐링 #이벤트 #JS
- 백준 #직각삼각형
- RateLimit
- 플로이드 #c++
- raect typescript #react #typescript #styled-component
- html entities
- React #리액트 이벤트 주기 #리액트 이벤트
- Today
- Total
꿈꾸는 개발자
면접을 위한 CS 전공 지식 노트-[2.5 HTTP] 본문
HTTP는 애플리케이션 계층에 속하며, 웹 서비스 통신에 사용된다. HTTP/1.0부터 발전해 HTTP/까지 이어져 왔다.
2.5.1 HTTP/1.0
HTTP/1.0은 한 연결 당 하나의 요청만 처리 가능하다. (RTT 증가 초래)
용어정리
RTT(Round Trip Time): 패킷망(인터넷)에서 패킷을 보내고자 할 때 패킷이 목적지에 도달한 후 패킷에 대한 응답이 다시 출발지로 돌아오기까지의 시간이다. (패킷 왕복 시간)
인코딩: 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 방식
서버로부터 파일을 가져올 때마다 TCP의 3 way-handshake를 해야 하기 때문에 RTT가 증가한다.
RTT의 증가를 해결하기 위한 방법
- 이미지 스플링팅
- 코드 압축
- 이미지 Base64 인코딩 사용
이미지 스플링팅
많은 이미지를 다운 받으면 과부하가 걸리기 때문에 합쳐 있는 하나의 이미지로 다운을 받는다. 이를 기반으로 background-image의 position을 이용해 이미지를 표기하는 방식이다.
코드 압축
코드를 압축해 개행 문자, 빈칸을 업애서 코드의 크기를 최소화하는 방법이다.
이미지 Base64 인코딩
이미지 파일을 64진번으로 이루어진 문자열로 인코딩하는 방법이다. 서버와의 연결을 열고 이미지에 대해 서버에 HTTP 요청을 할 필요가 없다는 장점이 있다.
하지만 Base64 문자열로 변환할 경우 37% 정도 크기가 더 커지는 단점이 있다.
2.5.2 HTTP/1.1
HTTP/1.0의 발전된 형태가 곧 HTTP/1.1이다.
개선된 점
매번 TCP 연결을 하는 것이 아닌, 한 번 TCP 초기화 한 후 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀐 것이다. HTTP/1.0에도 keep-alive가 있었지만 표준화X
위 그림에서 확인할 수 있듯이 HTTP/1.1의 경우 TCP 3-웨이 핸드셰이크가 발생하면 그 다음부터는 발생하지 않는 것을 볼 수 있다.
단점
문서 안에 포함된 다수의 리소스(이미지, src 등)를 처리하면 요청할 리소스 개수에 비례해서 대기 시간이 길어진다는 문제점이 있다.
HOL Blocking (Head of Line Blocking)
네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말한다.
위 사진에서 볼 수 있는 것처럼 image.jpg를 다운 받는 속도가 느려진다면 그 뒤에 있는 것들도 자연스럽게 느려지게 된다.
무거운 헤더 구조
HTTP/1.1 헤더에는 쿠키 등 많은 메타데이터가 들어 있고, 또 압축되지 않아 무겁다.
2.5.3 HTTP/2
HTTP/2는 SPDY 프로토콜에서 파생된 HTTP/1.x보다 지연 시간을 줄이고, 응답 시간을 더 빠르게 할 수 있다.
제공 기능
- 멀티 플렉싱
- 헤더 압축
- 서버 푸시
- 요청의 우선순위 처리
멀티플렉싱
여러 개의 스트림을 사용하여 송수신한다는 것. 따라서, 특정 스트림의 패킷이 손실되더라도 다른 스트림에 영향X
용어 정리
스트림(stream): 시간이 자님에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터의 흐름
하나의 연결 내 여러 스트림을 캡쳐한 모습이다. 병렬적인 스트림들을 통해 데이터를 서빙하고 있다. 애플리케이션에서 받아온 메시지를 독립된 프레임으로 조각내어 서로 송수신 한 후 다시 조립하며 데이터를 주고 받는 것이다.
단일 연결을 사용해 병렬로 여러 요청/응답을 할 수 있다. HTTP/1.X에 있던 HTL Blocking 문제를 해결할 수 있다.
헤더 압축
HTTP/1.x 헤더 크기가 크다는 문제가 있었다.
HTTP/2에선 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식을 가진다.
허프만 코딩 (huffman coding)
문자열 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현한다. (결국, 전체적인 표현 양은 감소)
서버 푸시
HTTP/2에서는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.
html에는 CSS나 JS 파일이 포함되기 때문에 html을 읽으면서 그 안에 있던 CSS 파일을 서버에서 푸시하여 클라이언트에 먼저 줄 수 있다.
2.5.4 HTTPS
HTTP/2는 HTTPS 위에서 동작한다. 애플리케이션 계층과 전송 계층 사이에 있는 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. (통신 암호화를 한다)
SSL/TLS (Secure Socket Layer)/Transport Layer Security Protocol)
TLS 1.3 버전을 기준으로 설명한다.
SSL/TLS는 전송 계층에서 보안을 제공하는 프로토콜이다. client <=> server 통신에서 SSL/TLS를 통해 제3가자 메시지를 도청, 변조하지 못하도록 한다.
공격자가 서버인 척 사용자 정보를 가로채려고 할 때 인터셉터를 방지할 수 있다.
SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하며, 보안 세션이 만들어질 때 인증 매커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘 등이 사용된다. .
용어 정리
세선: 운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간을 뜻한다. 사용자는 일정 기간 동안 응용 프로그램, 자원 등을 사용할 수 있다.
TLS Handshake
클라이언트와 서버와 키를 공유하고 이를 기반으로 인증, 인증 확인 등의 작업이 일어나는 단 한 번의 1-RTT가 생긴 후 데이터 송수신한다.
클라이언트에서 사이퍼 슈트(cypher suites)를 서버에 전달한 후 서버는 제공 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인한다.
- 제공 가능: 서버에서 클라이언트로 인증서를 보내는 인증 매커니즘이 시작 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작
사이퍼 슈트
사이퍼 슈트는 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말한다. 5개 존재!
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
ex) TLS_AES_128_GCM에는 세 가지 규약이 존재한다.
- TLS: 프로토콜
- AES_128_GCM:AEAD 사이퍼 모드
- SHA256: 해싱 알고리즘
AEAD(Authenticated Encryption with Associated Data) 사이퍼 모드
데이터 암호화 알고리즘 AES_128_GCM 등이 있다.
ex) 위 예로 들자면, 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 의미한다.
인증 매커니즘
인증 매커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어진다.
- CA 인증서는 안전한 연결을 위한 "공개키"를 클라이언트에 제공
- 서버가 신뢰할 수 있느 서버임을 보장
- 인증서는 서비스 정보, 공개키, 지문, 디저터 서명 등으로 이루어 진다.
CA 발급 과정
CA 인증서를 발급 받기 위해서는 사이트 정보 + 공개키를 CA에 제출해야 한다.
CA는 공개키를 해시한 값인 지문을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급한다.
용어 정리
개인 키: 비밀키 , 개인 소유하고 있는 키, 반드시 자신만이 소유해야 하는 키
공개 키: 공개되어 있는 키
암호화 알고리즘
키 교환 알고리즘으로는 대수곡선 기반의 ECDHE (Elloptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffie-Hellman Ephermeral)를 사용한다. 둘 다 디피 헬만(Diffie-Hellman) 방식 근간이다.
디피-헬만 키 교환 알고리즘
디피-헬만 키 교환 암호화 알고리즘은 암호키를 교환하는 하나의 방법이다.
해싱 알고리즘
데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만다는 알고리즘이다. (SHA-246,SHA-384 등 사용)
SHA-246
해시 함수의 결과값이 256비트인 알고리즘이다. 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환한다.