문제 상황
- 모든 서비스 각 API가 유저 검증을 위해 유저 정보를 조회를 하고 있어 API의 응답 속도가 느린 이슈가 발생
- 유저를 조회할때 내부에서 통신을 위한 API로 사용중이지만, 매번 인증 과정을 거치면 FeignClient 요청과 DB조회로 불필요한 비용이 증가
- 자주 조회되지만 자주 변경되지 않는 데이터들을 조회하기 위해 데이터베이스에 지속적인 읽기 요청이 들어와 부하가 쌓이고 있음
사용자-상품-이미지-체험단신청-알림 로직
사용자-상품-이미지-체험단신청-알림 로직
사용자-상품-이미지-체험단신청-알림 로직
사용자-상품-이미지-체험단신청-알림 로직
해결방법
- 레디스 캐싱을 적용하여 데이터베이스까지 가지 않더라도 조회하고자 하는 데이터를 캐싱한 데이터로 반환해주면 데이터베이스의 부하가 줄어들 것으로 예상되었음
- 내부에서 통신하는 api는 로직 안에서 feign client호출로만 요청이 오기 때문에 인증을 따로 거치지 않고, 내부용 api로 따로 만들면 응답 속도 또한 개선 될 것으로 생각되었음
- 코드
- CacheConfig.java
- UserService.java
- SecurityConfig.java
결과
- Zipkin으로 응답속도가 개선 된 것을 확인

- 필터에서 인증 제외 경로로 설정하여 인증 없이 빠르게 호출할 수 있어 시스템 전체적으로 효율성 증가하고, 오버헤드가 줄어들어 성능이 향상됨
- 인증은 API Gateway에서 처리하고, 내부 통신용 API는 Feign Client를 통해 간소화된 요청으로 처리할 수 있어 역할 분담이 명확해짐
- 레디스를 적용하여 데이터베이스에 대한 빈번한 읽기 요청이 줄어들어 부하가 감소하여 처리 성능이 향상되고, 특히 트래픽이 많이 예상되는 우리 서비스의 경우에는 병목 현상을 완화할 수 있게됨
- 레디스 캐싱 사용 전후 포스트맨 이미지 속의 응답 시간으로 비교
- 적용 전 걸리는 응답 시간
- 적용 후 걸리는 응답 시간