현재 진행하고 있는 컴퓨터공학과 졸업작품으로 기존 팀이 사정상 해체되어 4월 초 프로젝트 중간부터 참여하게 되었다.
문제 풀이 형식으로 기술 면접 준비를 돕는다. 답변을 음성으로 말하고, 말한 내용을 텍스트로 변환하여 Chat GPT를 통해 사용자가 작성한 답변을 분석하고 피드백을 제공한다.
기존에도 기능별로 이슈 발행해 브랜치를 나누어 작업하고 PR을 보내는 방식으로 하곤 있었지만 중심이 되는 브랜치가 main 하나였다는 점, PR시 코드 리뷰나 테스트를 거치지 않은 상태로 Merge하는 등 중간중간 빈틈이 보였다. 그로 인해 몇몇 팀원이 코드가 실행이 되지 않아 테스트도 못한채로 개발에 이어서 하는 등 문제가 많았다. 그래서 여러 프로젝트와 과거 백엔드 개발자 인턴으로 일했던 경험을 바탕으로, 팀원을 불러 모아 Git-Flow 및 PR에 대해 설명을 해주었다. 프로젝트를 처음 해보는 팀원이 대부분이기에 적용해볼 수 있을 만큼 팀 노션에 규칙을 정리하여 프로젝트를 진행하기로 결정했다.
기존 레거시에 다 다른 스타일로 짜여진 코드, 클래스 매서드 내에 지나치게 많은 기능이 들어가 있는 등 내가 알고 있는 선에서 보이던 문제점들이 보이기 시작했다. 그래서 보이는 문제를 해결하기로 결심했다.
1) BaseEntity를 통한 공통 필드 관리 및 Entity 리팩토링
공통되는 필드인 id, created_at, updated_at, deleted_at을 묶어서 관리하고자했다. 작업 도중 더 급한 Task가 있어 잠시 중단하게 되었다.
2) Question 도메인 CRUD REST API 개발 및 리팩토링
기능상 서비스에서 '기본으로 제공하는 면접 질문'과 '사용자 개인이 등록한 면접 질문'으로 모의 면접이 가능하다.
기존에 '기본 제공 면접 질문 도메인'과 '개인 등록 면접 질문 도메인'이 따로 존재해, 칼럼이 거의 동일한 DB 테이블이 2개가 생기게 되었고 겹치는 코드 또한, 많이 발생하게 되었다. 이를 해결하고자 유저에 Role을 두고 유저와 질문을 1:N 관계로 관리자가 등록한 질문을 '기본 제공 면접 질문'으로 등록되도록 변경하여 추후에 면접 질문 관리까지 가능하도록 하였다. 그 결과, 도메인을 병합하고 코드 재사용성을 높혔다.
1) ChatGPT API 이용한 사용자 면접 답변 피드백 기능 구현
원래 기존에 팀원이 구현하고 있던 API였지만, 키 관련 오류로 인해 함께 작업하게 되었다. 다행히 문제가 해결되어 구현이 완료된 상태이다.
2) Prometheus와 Grafana를 통한 모니터링 환경 구축
추후 있을 배포를 위해, 모니터링 환경을 구축하게 되었다.
3) Docker 세팅 및 Github Action을 사용한 CI/CD 파이프라인 구축
기존 레거시를 바탕으로 파이프라인을 구축하여 테스트를 진행하였고 각종 세팅과 테스트 때문에 시간이 좀 걸린 거 외엔 큰 문제 없이 배포가 되었다. 추후 학교측으로 AWS 크레딧을 받아 Blue-Green 방식으로 무중단 배포까지 구현하는 게 목표이다.
프로젝트를 진행하면서 개발 이외에도 기능적으로 바뀌었으면 하는 부분을 이런 식으로 그림을 그려 설명도 하고

좀 부끄럽다
추후 서비스 확장을 생각해 기능도 재정립하는 등 많은 의견을 던졌던 것 같다. (다 들어주신 팀원들감사합니다 🥲)
프로젝트 중간에 참여가 처음인만큼 고민도 많았다. 예를 들면, 한정된 시간속에 어디까지 리팩토링을 할 것인가? 새로 개발하는 것보다 레거시를 리팩토링하는 게 더 어렵고 오래걸린다고 생각한다. 처음에는 내가 아는 선에서 보이는 문제를 모두 해결할 생각이었지만, 하루 온종일 이 프로젝트만 붙잡고 있을 수 없고 더군다나 프로젝트는 혼자하는 게 아니다. 그래서 지금 당장 바꾸지 않는다면 추후에 더욱 변경이 어려워지는 (ex. Entity) 부분을 위주로 개선하고 구현이 되어야만 어느정도 기능 확장을 생각해볼 수 있는 부분까지를 ㅁㅏ지노선이라 생각하고 구현하게 되었다. 앞으로 더 프로젝트를 진행해보며 생각이 정리되지 않을까싶다.