https://indistract.tistory.com/37
[네트워크] HTTP 성능
HTTP Transaction 구조 기본적으로 HTTP Transaction은 FTP연결 -> GET/POST 요청 -> RESPONSE -> FTP연결 해제 순서이다. 그러나, 연이어서 파일을 GET하거나 POST할것이라면 FTP을 반복적으로 연결하고 해제하는것이
indistract.tistory.com
HTTP 성능향상 (다중 Transaction)
위 게시글에서 HTTP의 성능에 대해서 배웠다. 내용에 따르면, HTTP 의 성능을 개선하기위해서는 두가지 방법을 채택할 수 있었다. 첫번째는 FTP연결을 유지하는 Persistent HTTP이고, 두번째는 필요한 요청을 한꺼번에 보내는 Pipelined HTTP 이다. 이렇게 HTTP Transaction의 구조에 따라 성능을 향상시킬수도 있지만, 네트워크 구조를 이용해 성능을 향상시키는 방법도 존재한다. 이는 Web Cache를 이용함으로 가능하다.
Web Cache
Web Cache는 ISP에서 비용절감을 위하여 이전에 가져온 적이 있는 문서를 DB에 임시 저장해 놓았다가, 동일 문서가 다시 요청될 때 재사용 하는 형태를 의미한다. ISP란 무엇이고, 비용절감이란 말은 왜나오는지 차근차근 살펴보자.
클라이언트와 서버사이에는 ISP (Internet Service Provider)라는 중개자가 존재한다. 이 중개자는 클라이언트의 요청을받아서 서버로부터 자원을 받아오는 역할을 한다. ISP는 한국어로는 인터넷 서비스 제공자라고 할수 있으며 KT, SK, LG 같은 업체 등이 존재한다.
그런데 ISP가 서버에게 요청을 할때는 돈을 지불해야한다. 네트워크는 기본적으로 영세한쪽이 규모가 큰 곳에 요청을 할때 돈을 지불하는것이 일반적이기 때문이다 (중개자는 서버보다 영세하다). 그래서 ISP에서 서버에게 요청을 많이할수록 더 많은 금액을 지불해야하며, 비용을 절약하고 싶다면 가능한 요청을 적게 보내야한다. 이런 비용적인 문제 때문에 ISP는 다음과 같은 고민을 한다.
서버에 요청을 보내지 않고 클라이언트의 요청을 처리할 수는 없을까?
이 고민을 해결해주는것이 Web Cache다. ISP는 중복되는 요청이 들어올 때, 요청을 클라이언트에게 주고 버리는것이 아니라 별도의 DB에 따로 보관한다. 그리고 다음번 같은 요청이 들어오면 굳이 서버까지 가지않아도, DB에 저장되어있는 자원을 클라이언트에 전달할 수 있다.
Web Cache의 역할
Web Cache는 가상적으로 서버 역할을 하기도, 클라이언트의 역할을 하기도 한다. Web Cache가 이미 가지고있던 문서를 Client에게 전달하게되면 Web Cache는 가상적으로 클라이언트에게 서버가 된다. 반면, 웹캐시가 가지고있지 않은 문서가있다면 서버에게 문서를 요청하고, 자신이 가지고있는 데이터베이스에 저장한다. 이때 서버입장에서는 웹캐시가 클라이언트가 되는 것이다. 따라서, 웹캐시는 서버이자 클라이언트의 역할을 한다.
Web Cache의 장점
Web Cache를 이용하면 클라이언트, ISP, 그리고 서버 모두 이득을 취한다. 클라이언트는 웹캐시로부터 원하는 자원을 빠른 속도로 받아볼 수 있다. 그리고 ISP는 DB에 자주사용하는 자원을 저장해둔다면 내부에서 자원을 전달하므로, 지불해야하는 비용을 절약할 수 있다. 마지막으로 서버는 웹 캐시가 존재한다면 같은 ISP에서 같은 자원 요청을하는 경우가 줄어들 것이고, 따라서 더 적은 서버로 더 많은 사람을 지원하는 것이 가능해진다.
동작 예시
클라이언트에서 요청한 자원이 웹캐시에 존재한다고해서 무조건적으로 자원을 전달하는 것은 아니다. 웹캐시는 소유한 문서의 최신성이 유지되는 경우에만 DB에 저장된 문서를 클라이언트에게 전달한다. 이 과정이 없다면 클라이언트가 잘못된 정보를 받아볼 수 있기 때문이다.
웹캐시는 자원을 저장할때 자원의 수정된 날짜와 시간을 함께 저장해둔다. 그리고 클라이언트가 캐시에 존재하는 자원을 요청한다면, 캐시는 서버에게 자신이 소유하고있는 자원이 최신성을 유지하는지 묻는다. 서버가 캐시가 소유하고 있는 자원이 최신성을 유지한다고 인정한다면, 캐시는 자신의 자원을 클라이언트에게 전달한다. 만약 바뀐적이 있다고한다면, 바뀐문서를 서버로부터 받아와서 클라이언트에게 전달하게 된다.
'네트워크' 카테고리의 다른 글
[네트워크] HTTP 성능 (1) | 2023.01.22 |
---|---|
[네트워크] Cookie (0) | 2023.01.21 |
[네트워크] HTTP 개요 (0) | 2023.01.10 |
[네트워크] TCP/UDP (0) | 2023.01.07 |
[네트워크] 프로세스간 통신 (0) | 2023.01.01 |