아하 REST API 서버 개발 (11)
오늘의 강의도 Cache
에 대해서 좀 더 심도있게 이야기를 나눠보는 시간을 가져 보도록 하시죠.
Cache Layer 문제점
저번 강의에 사용한 소스코드를 잘 살펴보시면, 페북에서 많은 분들이 지적하셨듯이 에러에 굉장히 취약하다는 것을 알 수 있습니다.
만약 Redis
서버가 장애가 발생하여 작동을 중지하면 어떠한 일이 일어날까요?
저는 참고로 brew
로 redis
를 설치하였기 때문에 하기에 나와있는 명령어로 redis
서버를 작동 중지하지 못할 수도 있으니 적절한 명령어로 redis
를 작동 중지 시켜주세요^^
brew services stop redis
redis
서버가 작동을 중지 했다면 과감하게 테스트를 돌려봅시다.
엄청난 에러를 내뿜고 테스트 조차 Timeout
파티를 벌이며 끝날 기미를 보이지 않습니다.
대체 왜 이런 현상이 생기는 것일까요?
코드를 잘 보시게 되면, 현재 redis
에서 HGET
명령어로 값을 가져오는곳과 연결을 시도하는 곳이 있는데요 이쪽에서 에러를 뿜게되면 에러를 처리할 수 없으니 그냥 ‘아 몰랑’ 이러면서 작동을 중지하게 됩니다.
그리고 잠시 더 생각을 해보게되면 현재 사용자를 Cache
에서 불러오고 있습니다. 그런데 CRUD
작업을 도맡아하는 Repository
가 있는데 Cache
에서 불러오게 된다면 사용자를 불러오는 창구가 이원화가 되어 소스코드를 작성하는 입장에서는 내가 Repository
에서 사용자를 불러와야 하는지, Cache
에서 불러와야 하는지 헷갈리게 됩니다.
이 모든 작업을 Repository
가 알아서 처리를 해주는게 좋은 설계가 되겠죠.
자 그럼 이런 방식을 모두 채택해서 다시 한번 리팩토링을 해주도록 합시다.
src/caches/user.cache.js
src/repsotiroies/user.repository.js
src/middlewares/jwt.middleware.js
src/controllers/auth.controller.js
src/models/user.model.js
기존 userCache
부분을 userRepo
로 변경해주어야 하는데 많은 변경점을 이 강좌에 일일히 붙여넣다 보면 쓸데없이 길어질 것 같아, 모든 변경점은 위에 있는 소스를 참고하시길 부탁드립니다^^
자, 이제 모든 소스를 변경하였으니 테스트가 잘 돌아가는지 확인을 해보겠습니다!
현재 redis
서버가 실행되고 있지 않아서 발생하는 에러를 제외하고는 모든 테스트가 잘 돌아가고 있습니다.
자, 골치아픈 Cache
는 이제 어느정도 정리가 된 것 같습니다. 하지만 아직 소스에는 고칠것이 많은데요, 특히 Repository
레이어에서 리턴되는 사용자가 어떨때는 Sequelize
객체일때도 있고, 또 어떨때는 JSON
객체일 때가 있습니다.
한 함수에서 리턴 값을 여러개로 가져가는 것은 정말 좋은 코드라고 할 수 없습니다. 그래서 다음 강좌에서는 이런 리턴 값을 통일화 하는 작업과 서버에서 절대 빼놓을 수 없는 Logger
에 대해서 이야기 해보겠습니다^^
그럼 모두 평안한 설 보내시고 새해 복 많이 많이 받으세요!!!