본문 바로가기
나의 공부

Cache 탐험

by 이숴 2023. 8. 28.
반응형

팀프로젝트에서 캐시를 사용해야할 일이 생겨서 각 종류와 사용용도를 공부하게 되었습니다.

기초적인 내용이기도 하고, 모든 캐시를 다루지 않기 때문에 이외로 추가 공부를 하시길 바랍니다.

Cache

캐시는 자주 사용하는 데이터나 값을 미리 저장해 두는 임시 저장 공간을 의미합니다.

위 행위를 통해 데이터 접근 시간을 단축하고 시스템의 효율성을 향상시킬 수 있습니다.

캐시는 메모리에 저장되기 때문에 데이터나 정보를 빠르게 검색하고 접근하는 데 있어서 아주 중요한 역할을 합니다.

 

일반적으로 많이 사용되는 곳으로는 

많은 사람들에게 노출되며 많은 요청을 하게되는 데이터가 될 것 같습니다.

내가 예상하는 캐시 사용용도

위 이미지에서는 뉴스 또는 날씨, 광고와 같이 빈번하게 접근이 이루어지고, 요청 시간이 오래걸려서 부담이 되는 데이터에 적용됩니다.

 

 

Cache의 종류

캐시는 각 레벨로 나뉩니다.

 

L1 캐시 (Local Cache)

L1 캐시는 JVM 내부에 위치합니다. 트랜잭션 범위의 캐시나 임시 데이터 저장에 적합합니다.

일반적으로 Hibernate의 1차 캐시, ConcurrentHashMap을 활용한 캐시로 사용합니다.

 

L2 캐시 (Second Level Cache)
L2 캐시는 JVM 간에 공유할 수 있는 캐시. 즉 분산 시스템에서 사용할 수 있는 캐시입니다.
일반적으로 EhCache같이 노드에서 캐시 라이브러리로 사용하며 내부적으로 동작하며 캐싱 처리를 합니다.

ORM을 사용하는 애플리케이션에서 2차 캐시로 사용하기를 원할 때 Ehcache를 많이 사용하며,

 

따라서, 별도의 서버를 사용하여 생길 수 있는 네트워크 지연 혹은 단절같은 이슈에서 자유롭고, 같은 로컬 환경 일지라도  어플리케이션과 라이프사이클을 같이 하므로 사용하기 더욱 간편합니다.

 

하지만 노드간 데이터 일관성이 유지되지 않아 분산서버에서는 사용하기 어렵습니다.

 

L3 캐시 (External Cache)
L3 캐시는 외부 캐시 서버에 데이터를 저장하고 사용하는 캐시입니다. 그렇기에 대규모 분산 시스템에 적합합니다.
일반적으로 Redis, Memcached 같은 저장소를 의미하고, 따로 관리 되기 때문에 서버가 다운되더라도 데이터를 유지할 수 있습니다.

 

 

각 종류별 사용사례

이렇게 다양한 캐시들은 어떠한 상황에서 사용할 수 있을까요?

 

각 사용사례를 정리해보겠습니다.

ConcurrentHashMap 한 어플리케이션내에서 공통으로 사용되는 설정 정보,
내부 중간 계산 데이터, ...
Ehcache 자주 요청되는 DB 쿼리 결과 데이터,
서버가 재실행되어도 디스크에 저장될 필요가 있는 데이터, ...
MemCached 웹 어플리케이션에서 DB로 자주 조회되는 데이터, ...
Redis 순서를 보장해야하는 데이터(Sorted Set),
세션같이 노드에 상관없이 연결되어야 하는 데이터, ...

 

추가) Nginx 리버스 프록시 서버

이번에 알게되어 정리합니다.

 

Nginx는 웹 서버로 사용되는 것 외에도 리버스 프록시나 로드 밸런서, 캐시 서버로 사용되기도 합니다.

그렇기에 Nginx를 캐시 서버로 사용하면 콘텐츠를 더 빠르게 제공할 수 있습니다. 이는 웹 서버가 반복적으로 동일한 콘텐츠를 생성하지 않도록 함으로써 부하를 줄이는 데 도움을 줍니다.

여기서 얘기하는 리버스는 역전 이 아닌 뒷쪽 이란 뜻이라고 합니다.

 

Nginx에서의 프록시 캐싱은 다음과 같은 과정으로 동작합니다:

1. 클라이언트가 웹 페이지를 요청합니다.
2. Nginx는 캐시에 해당 웹 페이지의 내용이 저장되어 있는지 확인합니다.
3. 캐시에 데이터가 있으면 Nginx는 캐시된 데이터를 클라이언트에게 반환합니다.
4. 캐시에 데이터가 없으면 웹 서버로 요청을 전달하고, 웹 서버의 응답을 클라이언트에게 반환하면서 동시에 이 응답을 캐시에 저장합니다.

 

nginx 리버스 프록시 서버는 보통 정적 콘텐츠(ex. 이미지, css, js파일, 폰트, 다운 가능한 파일) 등 내용이 자주 바뀌지 않는 데이터, 날씨, 외부 api 호출 결과와 같이 외부 서비스 응답일때도 캐시하여 서비스의 응답 시간을 줄일 수 있습니다.

 

정리

캐시는 성능 향상을 위한 중요한 도구 중 하나입니다. 올바른 캐시 전략과 적절한 캐시 수준을 선택함으로써, 서비스의 응답 시간을 단축시키고 서버의 부하를 줄일 수 있습니다.

이번 글에서는 주요 캐시의 종류와 사용 사례에 대해 간략히 알아보았습니다. 실제 프로젝트에 적용하기 위해서는 여러 캐시 기술의 특성과 자신의 서비스 환경을 깊게 이해하는 것이 중요합니다.

 

게시물을 봐주셔서 감사합니다!!!

 

 

 

 

 

 

반응형

댓글