아하 REST API 서버 개발 (11)

finallee
aha.official
Published in
4 min readFeb 3, 2019

오늘의 강의도 Cache 에 대해서 좀 더 심도있게 이야기를 나눠보는 시간을 가져 보도록 하시죠.

Cache Layer 문제점

저번 강의에 사용한 소스코드를 잘 살펴보시면, 페북에서 많은 분들이 지적하셨듯이 에러에 굉장히 취약하다는 것을 알 수 있습니다.

만약 Redis 서버가 장애가 발생하여 작동을 중지하면 어떠한 일이 일어날까요?

저는 참고로 brewredis 를 설치하였기 때문에 하기에 나와있는 명령어로 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 에 대해서 이야기 해보겠습니다^^

그럼 모두 평안한 설 보내시고 새해 복 많이 많이 받으세요!!!

이 복이 뭔지 아늬?

--

--