지난번 진행했던 개인 프로젝트를 이어서 완성했다(지난 작업 후기). 이번에도 주말동안 약 12시간동안 작업하며 미흡했던 부분을 보완하고 새로운 기능을 개발했다.
작업
이번에는 타이머를 12시간으로 맞추고 1시간이 남을 때 까지 작업했다. 핵심 기능을 어느정도 완료하고나니 집중력이 떨어져서 후반에 남아있던 프론트엔드 작업은 완성하지 못하고 마무리했다. 작업을 하면서 노트에 완료한 시간을 기록하긴 했는데 정확하진 않다.
통계
- 총 작업시간 : 약 11시간
- 커밋 수: 94(+57)
- Java 파일: 128개(+77)
- Vue 파일: 13개(+4)
- Typescript 파일: 47개(지난번 카운트를 잘못했는지 수가 줄었다.)
지난번에 완료한 기능
- 회원 : 회원 가입, 회원 기본정보 조회, 로그인 및 인증
- 아이템 마스터 : 정보 등록 및 조회
- 포인트 : 충전 및 충전 이력 저장
이번에 작업한 기능
- 인벤토리(약 1시간 30분)
- 사용자 보유 아이템 등록, 조회
- 아이템 거래(약 3시간)
- 판매 아이템 등록(약 1시간)
- 아이템 구매(약 1시간 10분)
- 판매 아이템 조회
- 기타(약 4시간)
- 인벤토리, 판매아이템, 포인트 내역의 목록 조회 및 페이징 구현(약 3시간)
- swagger 문서 정리(약 40분)
- 프론트엔드 화면 구성요소 일부
회고
금요일에 충분한 수면(수면점수 94점)을 취해서 토요일 작업이 수월했다. 또 지난번에 swagger 설정이나 인증같은 귀찮으면서 계속 필요한 설정이나 기능을 만들어둬서 기능 구현에 집중할 수 있었다. 기능 구현시간을 다시 돌아보면 거래 기능 구현에만 집중했으면 10시간 내외로 완성했겠지만, 연결된 유저 플로우를 중심으로 작업한게 나중에 보완하거나 재사용하기 좋을거 같아 이것저것 다 구현한 것도 나쁘지 않은 것 같다.
확실히 코딩을 하면 시간이 금방 지나가버린다. 해가 떠있을 때부터 책상에 앉았는데 어느새 날이 어두워져있었다. 프론트엔드까지 완료하지 못한건 아쉽지만 만들고싶은 만큼은 완성해서 개인 프로젝트 치고는 나름 좋은 경험이었다.
잘한 점
- 핵심 기능이었던 거래 기능을 완성했다. 인벤토리 → 아이템 판매 등록 → 아이템 구매 → 거래 내역 순으로 체계적으로 작업을 진행했다.
- 지난 작업에 이어서 수월한 진행이 이루어졌다. 지난번에 기능명세문서를 기준으로 작업을 진행해서 각 작업마다 무엇이 완성되어있는지 파악이 쉬웠다. 이번에도 동일한 방식으로 작업했으니 다음에도 이어서 잘 진행할 수 있을 것 같다.
- 조금이지만 리팩토링과 코드 개선했다. 추후 멀티 모듈로 분리를 고려해 패키지 구조 변경하고 Port 인터페이스 사용으로 의존성을 개선했다.
- API 문서화 작업으로 프론트엔드 개발자 입장에서 API 이해도를 높혔다. Swagger 태그, 공통 예외 응답 등 API 문서를 정리했다.
아쉬운 점
- 아이템 목록, 거래 내역 등에서 페이징이 필요한 기능이 많은데 미완성 상태
- PRD, 유저 플로우, 기능상세문서 등 다양한 양식의 문서를 만들었지만 가독성, 정확도, 완성도 등 미흡한 부분이 많다. 작업하면서 적정 판매가 기능을 뺐는데 문서 전체에 반영하지 못했다.
- 서버를 구동해서 직접 동작을 확인하는 수동 테스트만 진행했다. http 파일을 작성해서 반복하는건 어렵지 않지만 복잡한 기능의 경우 이게 정말로 잘 동작한다는 확신이 부족하다. 포인트 충전이나 거래 등 동시성 제어 테스트가 필요하다.
- 백엔드 API는 대부분 완성했지만 프론트엔드 화면은 여전히 부족하다. 프론트엔드는 우선순위가 낮다고 생각해 화면 구성에 대한 문서나 계획도 미흡한 상태였다. 최대한 빠르고 간편하면서 내가 잘 작업할 수 있도록 준비가 필요할 것 같다.
배운 점, 다음에 시도할 점
- 체계적인 문서 작성과 관리 방식을 고민해서 도입하고 싶다. 관련된 자료나 도서를 찾아봐야겠다.
- 프론트엔드 템플릿을 미리 준비해야겠다. 작업 시간을 줄이고 실제 동작하는 결과물을 수월하게 만들고 싶다.
- 다음에는 기능 구현 시 테스트 코드를 먼저 작성하고 구현하는 방식을 시도해보고 싶다. AI를 활용하면 서 TDD형식으로 진행하면 작업 속도가 빨라질 것 같다.
- 구현했던 공통 기능들을 재사용하면서 개선하고 싶다. 로그인이나 페이징은 다른 프로젝트에서도 반복해서 사용하기도하고 또 업무에 뭔가 적용할만할 것 같다.
- 커서나 클로드 코드를 많이 활용하던데 나라면 어떻게 이 프로젝트에서 사용할 수 있을지 고민해봐야 겠다.
Arcade Market 프로젝트는 이제 집중 개발 기간을 두진 않고 시간날 때 몇 가지만 더 작업 후 마무리하려고 한다. 우선 문서 정리부터한 다음 나머지는 우선순위는 크게 두지 않고 생각나는대로 할 것 같다.
- 개요 문서 작성하기
- flyway로 데이터베이스 마이그레이션 관리하기
- 멀티모듈 분리하기
- 테스트 코드 작성하기 : 통합 테스트 위주
- nuxt-ui로 클라이언트 구현하기
사용자가 사용할 수 있는 앱을 빠르게 만들어보자는 목표로 시작했는데 부족한 부분이 많았다. 남은 작업들을 진행하면서 구현 속도와 완성도를 높이는 방법을 많이 고민해봐야겠다. 다음에 시간이 생기면 다른 주제를 가지고 개인 프로젝트 해커톤을 해볼 생각이다.