Api 캐싱

zl존석동

·

2022. 7. 14. 21:24

 

 

 

 

 

 

캐시(Cache)

 

한 번 처리한 데이터를 임시로 저장소에 저장하는 것을 말한다.

 

임시로 데이터를 저장해두고 같은 요청이 왔을 때 해당 저장소에서 바로 읽어와 응답을 해주어 성능과 응답속도를 향상시켜줄 수 있는 기술이다.

 

 

Api 캐싱

 

Api를 캐싱한다는게 어떤 느낌일지 아주 쉬운 예시를 통해서 알아보았다.

 

 

알고리즘 연습 때문에 요즘 매일 들어가는 프로그래머스 메인페이지이다.

 

 이 페이지 구성을 보면 오늘의 연습문제 목록4개가 있고 신규 오픈 코스 목록이 여러개 나타난다.

 

이 목록들은 분명 데이터베이스 같은 곳에 어떤 형태로 데이터가 저장되어있을 것이고

 

클라이언트 요청이 발생했을 때 서버에서 통신하여 그것들을 조회해오고

 

자바스크립트 같은 클라이언트 사이드에서 페이지를 구성하기 위해 적절하게 사용되었을 것이다.

 

 

따로 어떤 처리가 되어있지는 않아서 각각 어떤 API 였나 개발자 도구를 통해 다행히 쉽게 확인할 수 있었다.

 

https://school.programmers.co.kr/api/v1/school/challenges/recommended
https://gaia.programmers.co.kr/edu/api/rest/v1/recommended-groups/

 

프로그래머스에 school 과 gaia 라는 서비스 또는 플랫폼이 있고 해당 서버에서 무언가를 가져오고 있는 것 같은데

 

uri 만 봐도 뭘 조회하고 있는지 깔끔하게 알 수 있어서 좋은 것 같다.

 

아무튼 이 api들을 조회해보니 개인화되어있지 않았는데 그렇다면 모든 사람이 메인페이지를 들어오면 쟤네들의 응답 결과는 같다는 것이 된다.

 

특히 해당 api를 보면 오늘, 신규 라는 성질을 가지는데 이 성질을 통해 이 api들은 서버에서도 실시간으로 계속 변하는 데이터들을 조회하지 않을 거라는 기대를 어느 정도 해볼 수 있을 것 같다.

 

오늘의 연습문제 api는 응답 결과 데이터가 24시간에 한 번 바뀐다던가 할 것인데 했던대로 웹 서비스를 만들고 이를 조회해오는 api만 만든다면 불특정 다수의 매 요청마다 DB 같은 시스템에 접근하게 될 것이다.

 

극단적으로 보자면 이런 상황에서 적용하기 좋은 것이 API 캐싱이라고 생각한다.

 

불필요한 반복적인 통신을 방지하여 시스템 부하나 속도 저하를 줄일 수 있는 것이다.

 

예를 들어 저 위의 오늘의 연습 문제를 24시간 캐싱해두면 사용자의 요청이 발생했을 때 백엔드 서버를 거쳐 DB까지 갈 필요 없이 캐시 메모리 선에서 응답을 해줄 수 있게 되는 것이다.

 

 

요약

 

별도의 연산 없이 요청에 대해 동일한 응답을 전해줄 수 있는 서비스에 대해 적용하여 부하를 방지하고 성능과 응답시간을 개선해줄 수 있는 기술

 

 

 

싹 다 캐싱하면 안될까

 

실시간으로 계속 변경이 발생하는 데이터를 활용해야하는 서비스일 경우 캐싱해서 최신화 되지 않은 응답결과를 보내주게 될 경우 오히려 손해가 발생할 수 있을 것 같다.

 

캐시 메모리는 용량이 아주 작고 비싸다고 한다. 아주 빨라야 하기 때문일 것이다.

 

단순히 스프링 애플리케이션에서 캐싱을 한다고 하면 기존에 캐싱하지 않았을 경우에는 사용하지 않았던 추가적인 메모리 공간을 활용하게 될 것이다.

 

따라서 어떤 대상에 어떤 기준으로 캐시를 적용할 것인지나 캐시 유지시간, 저장 공간 활용 설계 등 고려해야 할 것이 많다고 한다.