본문 바로가기

개발/Network

[Network] HTTP 버전별 특징 면접을 진행하면서 단골 질문이 될 수 있는 내용들에 대해 하나씩 공부하고, 정리중이다. HTTP/1.0 한 연결당 하나의 요청을 처리하도록 설계되었다. 이는 매 요청마다 3-way handshake를 계속해서 열어야 했기 때문에 RTT(Round Trip Time)가 증가한다는 단점이 있었다. 이를 해결하기 위해, 코드 압축, 이미지 Base64인코딩 등의 방법을 사용했다. HTTP/1.1 매번 TCP 연결을 하지 않고, 한 번 3-way handshake로 초기화를 한 후 keep-alive 옵션으로 여러개의 파일을 송수신 할 수 있게 되었다. keep-alive 옵션은 1.0에도 있기는 했지만 1.1부터 표준화 되었다. 그럼에도 불구하고 1.1에서는 문제가 여전히 존재한다. HOL Blocking(H.. 더보기
[Network] TCP & HTTP 비교 사람은 망각의 동물이다. 극복하는 방법은 반복밖에 없는 것 같다. 왜 이런 이야기를 하냐하면, 블로그에 포스팅까지 했던 내용으로 면접에서 털렸기 때문인데.. 다시금 기억을 되새기고 조금 더 자세하게 남겨보고자 이번 글을 적는다. 다들 알다시피 TCP와 HTTP는 모두 통신 프로토콜이고, ISO 7 Layer를 기준으로 TCP는 4계층인 전송(Transfort)계층 , HTTP는 7계층인 응용(Application) 계층이다. 이 말인 즉, HTTP는 결국 TCP기반 위에서 동작하는 프로토콜이라는 것이다. 그럼에도 불구하고 이 둘의 차이를 물어보는 것은 왜일까?. 가장 큰 차이는 "연결 지향적인 통신" 여부이다. HTTP는 비연결지향적인 단방향 통신인데, Client의 Request가 있을 경우, 서버는 .. 더보기
[HTTP] 비연결성 만약 클라이언트와 서버가 통신을 함에 있어서 계속 연결을 유지하고 있다면... 클라이언트의 수가 늘어날수록 연결상태가 늘어날 것이고, 결국 서버는 다량의 자원을 소모하게 된다. 비연결성을 지향하는 HTTP의 경우 클라이언트의 요청에 응답 후 연결을 끊어주는 방식으로 시스템의 자원을 유지한다. 다만 매번 요청이 있을때마다 TCP/IP 연결을 맺어야한다(3way handshake). 그리고 이전 요청에 대한 상태를 유지하기 위해 Cookie와 Session을 이용한다. HTTP 1.1에서 이러한 문제를 해결하기 위해 지속연결(Persistent)개념이 등장한다. 해당 요청과 관련된 모든 자원의 요청이 끝날때까지 연결을 유지한다. 더보기
[HTTP] TCP : 3way handshake HTTP를 공부하면서 함께 접하게되는 TCP 프로토콜에서 빠지지 않는 가장 중요한 개념중 하나가 3way handshake 이다 SYN 으로 클라이언트가 서버에 접속 요청을하면 서버는 요청을 받아 클라이언트에게 접속요청과 수락(ACK)을 보낸다. 그러면 클라이언트는 서버에게 ACK와 함께 HTTP 데이터를 전송할 수 있게 되는 개념이다. 이 개념은 TCP의 "연결지향" 개념과 관련된 것으로, IP프로토콜이 목적지(서버)가 응답이 불가능한 상황임에도 무작정 요청을 전송하고 끝내버리는.. 한계인 "비연결성"을 극복하기 위한 개념으로 볼 수 있다. 더보기
[Network]로드밸런싱(Load Balancing) 네트워크의 부하를 분산하기 위한 방법 중 로드밸런싱이 있다. 일반적으로는 인터넷의 보급화로 인해 트래픽이 점점 증가하게 되고, 특히 특정 시간대에 집중적으로 트래픽이 몰리는 경우 서버가 수용할 수 있는 트래픽을 초과하게 된다면 장애가 발생할 수 있다. 이러한 문제를 방지하기 위해 로드밸런싱을 하게 된다. 내가 담당하는 서비스에서도 특정 시간대에 접속자 수가 늘어나게 되면 하나의 서버장비로는 장애에 대처할 수 없을 수 있기 때문에 로드밸런싱 장비를 도입하여 적용하기도 한다. 특정 서버 또는 네트워크 서브에 부하가 집중되지 않도록 트래픽을 다양한 방법으로 분산하여, 안정적으로 서버가 가동될 수 있도록 하는 것이다. 로드밸런싱은 L4(전송계층)와 L7(응용계층)에서 가능하다. - L4 : IP주소와 포트 번호.. 더보기