티스토리 뷰
캐시의 정의
데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.
=> 즉 캐시는 미리 임시로 어떤 데이터를 복사해서 저장해놓고 더욱 빠르게 해당 데이터를 가져올 수 있게 해주는 것이다. '고속 기억 장치' 라고 불리기도 한다.
캐시의 종류
크게 3가지로 나눠서 볼 수 있다.
1. 메모리
2. 파일(브라우저)
3. CDN
1. 메모리에서의 캐시의 개념
DISK에 파일이 저장되어 있고 → 필요한 일부분만 MEM에 올라가서 → CPU에게 전달하면 실행이 되는 과정이 일반적으로 컴퓨터가 작동하는 방식이다.
이 때 CPU 안에는 Cache라는 고속 메모리가 존재 하는데 MEM에서 CPU에게 데이터 일부를 미리 올려서 더 빠르게 실행을 할 수 있도록 해준다. 이 때 Cache에게 데이터를 미리 넘겨주게 된다.
=> 결국 Cache는 CPU에 존재하고 더 빠르게 실행을 하기 위해 MEM에게 미리 데이터 일부를 받아서 간직하고 있다가 CPU가 곧바로 실행을 할 수 있도록 해주는 역할을 한다.
2. 파일에서의 캐시의 개념
클라이언트와 서버간에 통신을 할 때 클라이언트(브라우저)가 서버에게 요청을 하면 서버가 res를 해주면서 파일을 보내주고 이를 렌더링해서 브라우저에 나타나게 된다.
res을 해줄 때는 HTML 뿐만 아니라 CSS나 img 파일 같은게 존재할 것이다. img의 경우 파일의 크기가 크다. 고로 이를 계속 요청할 때마다 res에 img을 같이 보낸다면 비효율적일 것이다.
이 때 브라우저의 어떤 공간(폴더 같은) 안에 img 파일을 저장해놓을 수 있다. 이 때 이런 공간을 캐시라고 부른다.
⇒ 캐시 안에 img 파일을 저장해놓는다. 고로 이렇게 저장되어 있는 img 파일을 ‘캐시 되어 있다.’ 라고 표현한다.
*결국 이 때의 캐시도 더 빠르게 뭔가를 실행하기 위해 존재하는 것이다.
*단점
-서버에서 캐시에 저장된 img 파일을 더이상 사용하지 않고 다른 img를 사용하는걸로 바꿨을 때 바꾼 img 파일이 나타나지 않고 기존 img 파일이 나타나는 경우도 있다. 이럴 때는 캐시를 삭제하면 해결 된다.
3. CDN에서의 캐시의 개념
클라이언트와 서버가 있을 때 서로 HTTP 통신에 의해 주고 받으면서 데이터를 교환하게 된다.
이 때 클라이언트가 한국에 있고 서버가 미국이나 유럽에 있다고 가정해보면 물리적으로 멀기 때문에 속도가 원칙적인 것보다 느릴 수 밖에 없다.
이 때 CDN을 사용하면 어느정도 해결이 될 수 있다.
CDN 서버를 여러개 만들어서 각각 아시아용, 유럽용, 남미용 이런 식으로 CDN을 만들어 놓고 그 안에 웹서버에 있던 데이터들을 넣어놓는다.
이렇게 데이터들이 CDN 안에 저장되어 있을 때에도 ‘캐시가 되어 있다.’ 라고 표현한다.
한국 클라이언트가 요청하면 아시아 CDN에 있는 데이터를 보내주게 되고 그럼 더 빠른 속도로 보내줄 수 있게 된다.
*결국 이 때의 캐시도 뭔가 더 빠르게 하기 위해 존재한다.
*이러한 특징 때문에 종종 'CDN = 캐시' 라고 잘못 알고 있는 경우도 있는데 CDN은 캐시가 당연히 아니다. CDN에 저장되어 있는 데이터들을 캐시라고 부를 뿐이다. CDN의 역할은 캐시 하는 것 외에도 다른 역할들을 하기 때문에 CDN을 캐시라고 부르면 안 된다.
*캐시에서 종종 나타나는 'TTL' 이라는 단어가 있다. 이는 ‘Time To Live’의 약자인데 어떠한 데이터가 캐시에 얼마의 기간 동안 보관되어야 하는지에 대해 지정하는 것을 뜻한다. 하나의 서비스 안에서도 각각에 적합한 TTL을 정할 수도 있다.
*한줄 요약
=> 캐시는 데이터를 더욱 빠르게 가져오면서 네트워크의 불필요한 비용을 절감해준다. 위에서 정리한 것처럼 다양한 곳에서 쓰인다.
추가적인 내용
*캐시는 '프록시 서버'에서도 사용이 된다. 프록시 서버란 '프록시'의 뜻에서 알 수 있듯이 '대리' 한다는 뜻이다. 즉, 클라이언트와 실제 서버 중간에 프록시 서버를 두어 사용하게 되는데, 프록시 서버를 둠으로써 서버의 트래픽 과부하를 줄여줄 수 있고 보안적인 면에서도 효과를 줄 수 있다.
프록시 서버에 캐시를 넣어둠으로써 고정적인 데이터를 불필요하게 통신하여 주고 받을 필요 없게 해주기 때문에 네트워크 비용적인 면에서도 효과를 볼 수 있다.
'기술 노트' 카테고리의 다른 글
모듈을 Import 할 때 { }(중괄호)를 쓰는 경우와 아닌 경우(Node.js) (0) | 2023.03.15 |
---|---|
DOM이란? (0) | 2023.03.11 |
IP란? (0) | 2023.03.09 |
JavaScript (Call by Value, Call by Reference, Call by Sharing) (0) | 2023.03.08 |
CDN이란? (1) | 2023.03.07 |