회고 프로젝트 - 0주차
서론
공통 교육 2주 + BackEnd 교육 12주, 총 14주의 교육이 끝나고 회고 프로젝트가 시작됐다. 앞으로 약 3주간의 기간동안 배운 내용을 바탕으로 나만의 프로젝트를 계획하고 구현한다.
이번 주차에는 3주간 어떤 프로젝트를 진행할지 계획안을 작성하는 것이 목표였다. 그리고 나는 함께 만드는 알고리즘 저지 사이트라는 주제로 프로젝트를 잡았다. 이전에 진행했던 프로젝트에서는 순수 자바로만 구현을 해야하는 제약이 있었다. 이 프로젝트의 연장선으로 체점 기능을 구현하면 어떨까라는 생각에 이 주제로 선정하게 됐다.
본론
구현 기능
3주 동안 구현할 기능은 다음과 같다.
- 유저
- 회원가입 기능
- 로그인 기능
- 로그아웃 기능
- 회원 탈퇴 기능
- 알고리즘 문제
- 검색 기능
- 제작 기능
- 업데이트 기능
- 코드 제출 기능
- 코드 채점 기능
- 게시판, 게시글, 댓글
- 관리자 기능
- 알고리즘 문제 게시 기능
- 레벨
- 문제 해결 시 경험치 획득 기능
- 경험치를 기반으로 레벨 상승 기능
회원가입과 로그인, 알고리즘 문제에 대한 CRUD 그리고 채점 기능 및 관리자 기능 등 구현을 통해 학습한 내용을 녹여낼 수 있고 추가적으로 새로운 영역에 도전할 수 있다고 생각되서 다음과 같이 작성했다.
일정
약 3주간의 일정은 다음과 같다.
- 12주차 (7월 12일 ~ 7월 16일)
- 아이디어 선정 및 요구사항 분석
- ERD 작성 및 API 설계
- git 저장소 및 프로젝트 생성
- 13주차 (7월 18일 ~ 7월 23일)
- 회원 가입 기능 구현
- 로그인 기능 구현
- 로그아웃 기능 구현
- 회원탈퇴 기능 구현
- 14주차 (7월 25일 ~ 7월30일)
- 알고리즘 문제 검색 기능 구현
- 알고리즘 문제 만들기 기능 구현
- 알고리즘 문제 게시판 기능 구현
- 관리자 기능 구현
- 레벨 시스템 기능 구현
- 15주차 (8월 1일 ~ 8월 6일)
- 알고리즘 문제 코드 제출 기능 구현
- 알고리즘 문제 채점 기능 구현
- 16주차 (8월 8일 ~ 8월 11일)
- 코드 정리 및 버그 수정 수요가 생길 시 수정
- 여력이 있는 경우 배포 및 프론트 구성
일정을 작성하기 전에는 금방 하겠는 걸?이라는 아주 잘못된 생각을 했었다. 일정을 작성하니, 조금 빡빡할 수도 있겠는걸?이라는 우디르급의 태도 전환을 했다. 주차 별로 최대한 비슷한 도메인끼리 묶었다. 서로 다른 도메인을 묶으면 이곳저곳 이동하는데 오버헤드가 생길 거 같았기 때문이다. (도메인이 그렇게 많지는 않지만)
이왕 한 번 하는거 제대로 해보고 싶기 때문에, 여력이 생긴다면 배포 및 프론트까지 가보고 싶다. 어디까지나 희망사항이지만..
프로젝트 사이트
이번 회고 프로젝트는 과거와 달리 개인 깃허브 저장소에서 진행한다. 그래서 프로젝트 전용 저장소를 만들었다. 또한, 프로젝트 진행 과정에서 고민의 흔적, 학습한 내용 그리고 기타 등등 기록을 남기고 싶어서 노션 페이지도 만들었다. 기록을 남기면서 다시 한 번 정리하는 게 개인적으로 머리속에 잘 남았기 때문에 많이 애용할 예정이다.

프로젝트 흐름도

초기에 구상해본 프로젝트 흐름도이다.
메인 서버는 채점을 제외한 모든 비즈니스 로직을 수행하며, Spring Boot로 구현할 예정이다.
데이터베이스의 경우 교육 기간 동안 사용한 MySQL를 사용하며, 유저 정보와 알고리즘 문제 데이터 등을 저장한다.
채점 서버의 경우 유저가 제출한 코드를 채점하는 로직을 담당하며, 아마도 Docker를 통해 구현할 것 같다. 아직 이 부분은 학습이 안됐다..
마무리
설계에는 자신이 있다고 평소에 생각했었는데, 이것저것 고려해야할 사항이 많음을 알게 됐다. 가령 API는 어떻게 할 것이며, HTTP 요청 메시지와 응답 메시지는 어떻게 할 것인지 등등 학과에서 했던 설계와는 조금은 다른 느낌이였다. 하지만, 교육 기간동안 학습한 내용을 바탕으로 진행하니 완전 어둡지는 않았다.
설계 과정에서 아직 해결되지 않은 사항과 미완성 부분이 조금 있다.
- 테스트 케이스는 어디에 어떻게 저장할 것인가 -> 현재는 데이터베이스 알고리즘 문제 테이블에 JSON으로 저장으로 설계
- 채점 서버는 어떻게 구현할 것인가 -> 구현 주차에 땅에 머리를 박으면서 구현하기
- 데이터베이스 컬럼 네이밍 -> 현재는 접두사를 다 빼고 설계
- 미완성 API과 흐름도 -> 프로젝트 진행 과정에서 보완 및 수정
지금은 4가지가 나왔지만, 아마 프로젝트 진행하면서 더 많은 문제를 만날 것이고 끝임없이 고민할 것이다. 얼렁뚱땅 문제를 넘어가지 말고 해결하고 넘어가자. 시간이 없다는 등 핑계를 대지말고 부지런히 합시다 !