캐시는 어느 영역에서 사용되나?
💡
캐시 메모리는 하드디스크와 메모리 사이에만 있는 것이 아니고, CPU와 메모리 사이에도 있고, 하드디스크와 케이블 사이에도 있으며, CD-ROM과 메모리 사이에도 있다. 속도차이가 나는 모든 장치에 있다고 생각하면 된다.
웹 캐싱 - 브라우저 캐싱
가장 쉽게 생각할 수 있고, 많이 접하는 것이 브라우저의 캐싱이다. 이전에 방문했던 페이지, 제목의 썸네일 등을 서버로 요청하지 않고, 브라우저에 캐싱을 해두면 사용자는 자신의 요청을 서버로부터 기다리지 않고, 바로 캐시메모리로 응답 받을 수 있어 웹 서핑이 빠르다고 느끼고, 서버는 불필요한 요청을 받지않아 과부하를 피할수 있다.
웹 캐싱 - 프록시(proxy)
웹 페이지를 캐싱하는 다른 방식으로 웹 브라우저와 서버 사이에 proxy 라는 것을 두는 방식이다. proxy는 “대리인” 이라는 뜻의 영어 단어로서,
중간에서 뭔가를 대신해주는 것을 프록시
라고 한다. 중간에 있으면서 바이러스 체크나 보안 규정 위반 확인 등 해줄 수 있는 것들이 많이 있는데, 그중에서 간단한 형태로 “대신 웹 페이지를 긁어다 주는 일을 해줄 수 있다” 그리고 이 과정에서 자신이 긁어다 건네주는 페이지나 그림 등을 캐싱할 수 있다.
같은 데이터가 자주 접근될 확률이 높으면 캐시 성능이 좋아진다고 했던 것이 기억하는가? 앞의 브라우저 캐싱은 각각의 컴퓨터 단위로 캐싱을 하기 때문에 이 확률이 높지 않을 수 있다. 하지만, 프록시의 경우 여러 컴퓨터로부터 요청을 받고 처리하다 보니 이 확률을 높일 수 있게 된다.
프록시는 여러 컴퓨터로부터의 요청을 모아서 처리하기 때문에 데이터를 캐시에서 반환하는 확률이 더 높아진다.
DNS 캐싱
현재 인터넷은 캐싱 덕분에 돌아간다해도 과언이 아니다. 이는 DNS 를 염두에 두고 한 말이다. 주소창에 www.inven.co.kr 라는 이름을 치면 IP 주소라는 것으로 변환되어 통신된다. 이처럼 사람이 읽을 수 있는 주소를 IP 로 바꿔주는 것을 DNS이라고 한다.
(마치 자바파일을 클래스파일로 바꿔주는 컴파일러 같은 느낌!..)
이 DNS 는 주소를 변환하기 위해서 맨 오른쪽부터 마침표 단위로 끊어서 그것을 관리하는 서버를 두게 된다. 그리고 그 순서대로 계속해서 담당 서버의 IP 를 물어보는 방식으로 동작한다.
- 최상위 도메인 서버로부터 kr 을 담당하는 서버의 IP 를 알아낸다. 그걸 A 라고 하자.
- A 서버에 co.kr 을 누가 담당하는지 IP 를 물어본다. 그걸 B 라고 하자.
- B 서버에 inven.co.kr 을 누가 담당하는지 IP 를 물어본다. 그걸 C 라고 하자.
- C 서버에 www.inven.co.kr 의 IP 를 물어본다. 이걸 D 라고 하자.
- 이제 브라우저는 D 라는 IP 주소로 패킷을 보낸다.
생각보다 상당히 많은 단계를 거치며, 모든 단계에서 캐싱이 일어난다.
예를 들어 1단계에서는 매번 kr 을 담당하는 서버의 IP 을 알아내지 않고 그걸 캐싱한 후 다음에 활용한다. 2단계에서는 co.kr 을 담당하는 서버의 IP 를 캐싱해둔다. 이런 방식으로 맨 마지막 단계인 5단계에서는 우리 컴퓨터에서도 www.inven.co.kr 의 IP 를 캐싱해두는 식이다.
만일 DNS 에 이런 캐싱이 없다면 어떤 일이 발생할까? IP 를 가지고 웹 페이지를 여는 사람들이 거의 없다는 가정하에 대부분 www.inven.co.kr 같은 이름을 쓸 것이다. 그러니 한국의 모든 트래픽은 1단계에서 모두 같은 서버를 찾아가게 된다. 그리고 그 서버는 부하를 감당하지 못하고 죽게 될 것이다.
해당 포스트를 작성하며 알게된점
캐시의 사용영역을 막연히 웹에서의 브라우저 캐싱만을 생각해왔다. 그러나 애초에 출발점은 하드웨어의 기기들간의 속도차이로 인한 병목현상을 극복하기 위해 나왔고, 하드웨어에서 부터 내가알고 있는 웹 브라우저캐싱, 그리고 미처 알지 못했던 프록시와 DNS도 캐시을 사용한다는 것을 알게되었다. DNS는 캐싱과정을 보며 어느정도 이해가 되었지만, 프록시는 아직 개념을 잘 모르겠다. 후에 기회가 된다면 프록시도 공부해봐야겠다.
References
- 인터넷 세상에서의 캐싱http://www.inven.co.kr/webzine/news/?news=172478&site=bangdream
- 캐시메모리와 버퍼메모리의 차이https://lascrea.tistory.com/140
Uploaded by Notion2Tistory v1.1.0
'프로그래밍 > Java' 카테고리의 다른 글
String의 == 연산시 동작 (0) | 2021.05.13 |
---|---|
equals() 와 == (0) | 2021.05.12 |
Buffer VS Cache (0) | 2021.05.12 |
캐시(Cache)란? (0) | 2021.05.11 |
String (2) | 2021.05.10 |