1. 어려웠던 부분 : 게임 시작 API 에서 게임 참가자에게 KeywordRepository 에서 랜덤으로 조회된 카테고리에 해당하는 랜덤 키워드를 참여 인원수에 맡게 뿌려주는 부분을 작성해야 했다. 어제 처음 작성한 코드가 너무 길고 하드코드가 되어버린 것 같아 이부분을 queryDSL을 사용해서 좀 더 간결하게 할 수 있을까? 라는 생각에 관련 정보를 찾아봤다. 여러 자료를 찾아보니 아무래도 그냥 native 쿼리를 사용하여 조회하는게 더 좋은 방법일 것 같다는 생각이 들었다. 어찌 저찌 구현은 했는데 코드가 너무 길어져서 더 간결하게 줄일 수 있는 방법이 있는지 연구해봐야 할 것 같다.
다음은 코드 구현 전 작성해본 의사코드 ↓
<의사코드>
// 현재 입장한 게임방의 정보를 가져옴
// 게임 시작은 방장만이 할 수 있음 - 예외처리
// 게임방에 입장한 멤버들 DB(GameRoomMember)에서 가져오기
//게임방의 상태를 start 상태로 업데이트
// 멤버들에게 뿌려지게 될 키워드 전체조회 -> 그 중 하나 랜덤 뽑기
// 뽑힌 키워드와 카테고리가 같은 키워드만 모인 어레이리스트만들기
// 만들어진 어레이리스트에 담긴 키워드를 멤버들에게 (랜덤으로) 배당하기
// GameStartSet에 해당 방 멤버의 키워드가 어떤 것인지 저장
// StartSet DB에 저장
// 웹소켓으로 방에 참가한 인원 리스트 전달을 위한 리스트 만들기
// 닉네임만 필요하기에 닉네임만 담은 리스트
// 웹소켓으로 전달드릴 content 내용 만들기
// 게임 시작 알림을 방에 구독이 된 유저들에게 알려줌
2. 느낀 점 : 오늘 디자이너님이 게임 컨셉 몇가지를 보여주시고 어떤 컨셉이 좋은지 투표를 했다. 팀원들 모두 매일 새벽까지 공부하고 구현하느라 피곤할텐데도 유쾌해서 나도 덩달아 재미있게 프로젝트를 즐길 수 있는 것 같다. 앞으로 남은 시간들도 계속 이렇게 유쾌한 분위기가 이어졌으면 좋겠다 : )
3. 새로 알게 된 내용 : 팀원들과 함께 queryDSL과 Redis를 공부하면서 다시한번 JPA 영속성컨텍스트에 대해 복습할 수 있었다. 이전 기수 선배님들의 코드를 보면서 flush() / clear() 를 명시적으로 적어놓은 코드를 보았는데, 이 부분이 궁금했다. 분명히 이영한 선생님이 실제 현업에서 이렇게 사용하지 않는다고 했는데 왜 굳이 적어놓은 걸까? 라는 의문으로 엔티티매니저를 거쳐 DB까지 이르는 과정을 팀원들과 다시한번 보면서 그 구조를 다시한번 이해할 수 있었다. 그래서 결론은 토요일 튜터님에게 여쭤보기로 ...! ㅋㅋ
4. 셀프칭찬 (오늘 잘한 일) : native 쿼리를 사용하여 기능 구현에 성공한 나를 칭찬한다 ! 물론 팀원들의 도움 덕분에 구현에 성공할 수 있었다! 진짜 많이 배울 수 있어서 감사하다.
5. 내일 할 일 : 백엔드 코드 합쳐보고 리팩토링하기, 각자 맡은 부분 코드에 주석달기/ 토요일 피드백에 질문할 것 정리하기
[오늘 공부한 부분]
'TIL (Today I Learned)' 카테고리의 다른 글
[56] TIL 기술멘토링 / 피드백 반영하기 (0) | 2023.01.07 |
---|---|
[55] TIL queryDSL /코드 리팩토링 /피드백 질문 정리 (0) | 2023.01.07 |
[53] TIL 웹소켓 연결 성공/Redis 설치 및 사용 (0) | 2023.01.05 |
[52] TIL 카카오로그인 FE랑 맞춰보기/ Pagination + 검색기능 (2) | 2023.01.03 |
[51] TIL (final project) API작성/ ERD 설계 (0) | 2023.01.03 |