🥽 내가 구현한 기능
MSA방식으로 변경되어 모놀리식으로 되어 있는 서비스를 모두 모듈화했고 하는 과정에 각 서비스를 로드밸런싱해주는 API Gateway를 제작해주었다. 또한 API Gateway에서 인가를 진행하게 되고 다른 서비스도 통합에서 분리로 적용하게 되어 Redis를 통해 global하게 사용되고 있는 데이터는 Redis를 통해 관리하게 제작했다.
또한 장바구니의 기능 또한 Redis로 제작하게 되며 DB에서 빠지게 되었고 각 서비스 간의 요청에 Feign을 사용했다
또한 MSA로 변경되면서 DB Lock을 걸어주어야 하는 서비스에 접근하여 해당 서비스에서 사용될 로직을 더욱 작성하여 동시성 문제를 해결 추가로 분산락을 사용하고자 했지만 분산락으로 충분한 상황이여서 이후 다시 구현 예정
한개의 서비스에서 문제가 발생하면 다른 서비스에 영향이 가지 않도록 하기 위해 장애 발생을 대처하는 resilience4J를 사용해서 circuitBreaker와 retry를 사용해서 장애 발생 대처
🥽 기술적 의사결정
- 로그아웃과 이메일 인증 그리고 장바구니를 사용하기 위해 Redis를 사용해서 빠른 응답과 잦은 데이터 접촉에 관련해서 해결
- apigateway에서 인가 설정을 하여 다른 서비스를 접촉할때 인가 상황을 처리해주었다.
- 동시성 문제가 발생하게 되면서 DB 락을 사용해서 문제를 해결
🥽 트러블 슈팅
- ApiGateWay에서 DiscoveryServer에서 제공한 기능을 통해 각 서비스의 requestmapping이 단순해졌다
- redis를 사용해서 잦은 데이터 접촉에 관해서 빠른 응답 속도로 변경
- 로그아웃시 사용자의 accesstoken을 redis에 저장해서 만료기간을 설정해 로그아웃 설정 처리 완료(블랙리스트)
- 기존의 찜 리스트 인줄 알았던 wishList가 장바구니라는 것을 확인하고 redis를 사용하는 대표적인 예로 장바구니 구현을 통해 DB 테이블에서 삭제 후 redis 사용
- MSA 에서 비관적 락을 통해 동시성 문제를 해결
- 한 서비스가 문제가 발생해서 응답을 할 수 없을 경우 다른 서비스에 장애가 전파되지 못하도록 장애 발생 대처 제작
🥽 인사이트
- Redis 관련 검색
- Feign Client 와 RestTemplate 관련 검색
- 동시성 문제 관련 검색 ( Lock, 트랜잭션 )
- CircuitBreaker 와 retry 에 대한 검색
'항해99' 카테고리의 다른 글
🥨 [항해99 취업 리부트 코스 학습일지] 프로젝트 시작 (0) | 2024.04.23 |
---|