세 번째 과제는 게임 듀오의 과제였습니다.
과제 내용
요구사항은 디테일하게 주어졌으며 게임 회사에 맞게 보스 레이드라는 테마를 가진 상태로 URL에 맞는 API를 제시하여 특별히 고민할 필요가 없이 기획을 할 수 있었습니다.
이번 과제의 역할로는 회원가입과 로그인 로그아웃을 포함하는 api 를 담당하였고 추가적으로 보스 레이드 랭킹 조회를 하는 api를 설계하는 것도 맡게 되었습니다.
더보기
- 라우터 로직
- 유저생성
- 중복되지 않는 userId를 생성
- = 중복 체크 로직이 필요
- 생성된 userId를 응답
- = 응답 값에 userId를 넣어줄 것
- 유저 조회
- 해당 유저의 보스 레이드 총 점수와 참여기록 응답
- 보스레이드 상태 조회
- 보스레이드 현재 상태 응답
- canEnter : 입장 가능 한지
- enteredUserId : 현재 진행 중인 유저가 있다면, 해당 유저의 id
- 입장 가능 조건 : 한 번에 한 명의 유저만 보스 레이드를 진행할 수 있습니다.
- 아무도 보스레이드를 시작한 기록이 없다면 시작 가능합니다.
- 시작한 기록이 있다면 마지막으로 시작한 유저가 보스레이드를 종료했거나, 시작한 시간으로부터 레이드 제한시간만큼 경과되었어야 합니다.
- 보스레이드 현재 상태 응답
- 보스레이드 시작
- 레이드 시작 가능하다면 중복되지 않는 riadRecordid를 생성하여 isEntered:true와 함께 응답
- 레이드 시작이 불가하다면 isEntered:false
- 보스레이드 종료
- raidRecordId 종료 처리
- 레이드 level에 따른 score 반영
- 유효성 검사
- 저장된 userId와 raidRecordidId 일치하지 않다면 예외 처리
- 시작한 시간으로부터 레이드 제한시간이 지났다면 예외 처리
- raidRecordId 종료 처리
- 보스레이드 랭킹 조회
- 보스레이드 totalScore 내림차순으로 랭킹을 조회합니다.
구현
- 기본적으로 이번 과제의 메인 기능인 보스레이드 상태 조회, 시작, 종료
- 테스트 케이스 작성
- lint와 formatting 설정
- 회원가입 로그인 ( 토큰에 대하여 깊이 있게 학습 )
- 도커를 이용한 배포
- Redis를 이용한 동시성 관리
진행 과정
세 번째 과제의 개발환경 세팅은 직접 맡아서 하였는데 두번째 과제를 할때 설정한 내용을 확인하면서 빠르게 구성할 수 있었습니다. 개발환경에 구축에 걸린 시간은 1시간정도가 소요되었습니다. 이 내용에는 lint fomatter와 풀리퀘스트 템플릿 등의 초반 셋팅 일체가 들어갑니다.
이전 프로젝트에서는 테스트 케이스를 구현하면서 프로젝트 메인 흐름에서는 한 발자국 떨어진 상태에서 팀을 서포트한 듯한 느낌이었다고 한다면 이번에는 api 구성의 큰 축 중 하나인 회원가입, 로그인, 로그아웃과 토큰 그리고 랭킹 조회까지 맡게 되어서 즐겁게 구현할 수 있었습니다.
기본적으로 맡은 업무에 관련된 자료들이 많았기에 초반 틀을 잡아서 다른 팀원이 작업할 수 있는 환경만 구성해놓고 조금 더 심화적으로 학습하였습니다. access token, refresh token 등 토큰에 관한 내용과 이런 토큰 시리얼라이저를 커스텀하는 방법 등 일반적인 것보다 더 깊게 학습하여보았고 여러 작동 방식의 의미 등을 알 수 있었습니다.
특히 신경 써본 부분으로는 로그아웃을 할 때 서버단에서 refresh token을 블랙리스트에 등록하면서 토큰 로그아웃을 시키는 것을 구현하여보았습니다.
배운 점 / 아쉬운 점
로그인과 관련된 기능과 흐름을 배울 수 있었습니다. 토큰을 블랙리스트에 등록하면서 로그아웃 시키는 방법 등을 배웠습니다.
그리고 랭킹 시스템을 할 때 Redis의 작동 방식과 orm을 이용해서 redis에 데이터를 저장해놓고 이를 이용하는 것 그리고 redis queue를 이용해서 동시성을 해결하는 방법 등을 배울 수 있었습니다.
과제를 완료한 소감 😁
일단 3번째 과제라는 것을 잊을 정도로 시간이 너무 빨리 지나가고 있다는 것을 느낍니다. 그 안에서 빠르게 같이 성장하고 있다는 생각도 하게 되었습니다. 처음 길게 진행되었던 회의도 팀이 안정화되면서 빠르게 되고 작업할 시간도 늘어났으며 기본적인 개발환경 세팅 등의 속도도 빨 라지는 등 불필요하다고 생각할 수 있는 업무들이 빠르게 해결되면서 과제의 완성도를 높일 수 있는 시간이 되는 것 같아서 실무에 들어갔을 때 기존에 팀워크를 맞춰서 진행되고 있는 팀이 얼마나 빠르고 효율적으로 업무를 진행할지 기대가 되는 마음이 생기는 한 주였습니다.
그리고 로그인 쪽 파트는 보통 다른 팀원들에게 기회를 주면서 제대로 접해볼 일이 없었는데 담당을 하고 진행해보면서 로그인과 토큰과 이것을 이용한 권한을 공부할 수 있는 시간이어서 개인적으로 뜻깊은 한 주였습니다.
결과물 💾
GIT 저장소
https://github.com/pre-onboarding-3rd-team-H/03_GameDuo_TeamH
과제 설명 노션
https://www.notion.so/8940341de3ca468898d177ad08b683aa
'DevLog' 카테고리의 다른 글
[프로그래머스] SQL 최댓값 구하기 (0) | 2022.09.30 |
---|---|
[생각] Session, JWT token 항상 jwt가 옳을까? (1) | 2022.09.20 |
[Docker] 제 3장 Elastic IP이용하여 고정 아이피 설정 하기 (0) | 2022.07.19 |
[Docker] 제 1장 터미널을 이용하여 EC2 접근하기 (0) | 2022.07.18 |
[WIL] 프리온보딩 두번째 과제 회고록 - 페이히어 (0) | 2022.07.11 |