이번 주 항해 취업 리부트코스에서 내가 구현한 기능은 무엇인가요?
- 회원
- 회원가입(이메일 인증)
- 로그인
- 로그아웃
- 회원정보 수정(주소, 전화번호, 비밀번호)
- 상품
- 전체 조회
- 단 건 조회
- 상품 등록
- 주문
- 주문하기
해당 기능을 구현하기 위해, 어떤 기술적 의사결정을 거쳤나요?
로그아웃을 어떻게 구현할까 고민을 했다. JWT 토큰 유효 시간이 있어 따로 관리할 필요는 없지만
로그아웃 시점에 토큰을 사용 못 하게 할 때에 두 가지 방식을 떠올렸습니다.
1. 블랙리스트 -> 리스트에 등록된 토큰(유효 시간이 남은 토큰)으로 API 요청이 오면 유효하지 않은 토큰이라는 식으로 응답을 주는 방식
2. Redis 사용 -> 로그인 시에 요청 성공 후 토큰 발급 시 Redis에 토큰을 key로 해서 토큰 유효 시간과
동일하게 ttl 설정 로그아웃 시에 요청한 토큰으로 된 key가 있으면 레디스에서 삭제한다.
토큰 필터에서는 api 요청 시에 토큰이 레디스에 존재하는지 여부를 판단
저는 블랙리스트 방식은 지속적으로 토큰이 블랙리스트에 쌓이는 경우 블랙리스트에 있는지 여부를 확인하려면 오래 걸릴 것이고 이후에 api 응답 속도 저하에도 영향이 있을 것으로 생각했습니다.
레디스 방식을 사용하면 즉각적인 토큰 무효화가 가능하기 때문에 2번 방식으로 로그아웃 기능을 구현했습니다.
이번 주 겪은 트러블 슈팅이 있다면 무엇인가요?
회원 가입 시에 이메일 인증을 위한 로직이 동기 방식으로 진행이 되니 회원가입 요청 시 응답 시간이 3.6초 정도나 걸렸다. 원인을 분석해 보니 이메일 발송 로직을 비동기로 처리하였더니 응답 시간이 0.7초 정도로 개선이 되었다.
이번 주 진행된 개인 프로젝트에서 얻은 인사이트는 무엇인가요?
우선 주어진 시나리오는 되게 포괄적이고 어떤 기능을 구현해야할 지에 대해서만 간략히 명시가 되어 있었기 때문에 어떻게 구현해야할 지에 대해서는 스스로 판단하고 여러 케이스를 생각을 해야하다보니 생각보다
개발 속도가 나오지 않았다. 처음부터 기획하고 설계하면서 이전에 얼마나 쉽게 생각하고 개발을 했는지에 대해서 뼈저리게 반성을 하고 있다.