해당 프로젝트는 24.07.30.~24.12.13. 기간 동안 진행하였습니다.
기획부터 설계 개발 배포까지 거의 모든 과정을 혼자 해야 했기에 많은 어려움이 있었습니다.
개발하는 중간중간 기록을 하지 못했기에 프로젝트를 마친 지금 프로젝트를 하는 동안 있었던 어려움과 진행하며 아쉬웠던 점들이 망각되기 전에 프로젝트 과정을 돌아보고자 합니다.
📢 프로젝트 소개
- 프로젝트 명 : 자격증 모의고사 서비스
- 링크 : 아이리포 CBT 둘러보기
- 기술 스택
- FrontEnd : Vue.js
- BackEnd : Spring Boot, JPA, QueryDSL, Redis, PostgreSQL
- Infra : KTCloud, Ubuntu, Docker, Nginx
📅 프로젝트 과정
1. 기획
현재 재직 중인 회사의 팀에서 팀장님과 자회사인 아이리포(재직 중인 회사의 자회사, 교육사업 담당) 회사와 자격증 책을 출간하게 되었습니다.
해당 책이 출간되면서 자격증 모의고사 서비스를 원하셨고 해당 서비스를 담당하여 개발하게 되었습니다.
1-1. 벤치마킹 및 디자인
디자인 쪽에 소질이 있냐고 물어보면 대답은 "NO" 전혀 없습니다. 그래서 다른 CBT 사이트들은 어떤 식으로 개발되어 있는지 벤치마킹을 많이 진행했습니다.
그중에서 영진닷컴 CBT가 개인적으로 마음에 들었습니다. 해당 서비스를 많이 참고하였고, 일부만 조금 원하는 대로 수정하였습니다.
실제 개발이 진행되면서는 초기 디자인과 많이 달라진 부분이 있습니다.
1-2. 요구사항 분석 및 일정 정리
만들어야 하는 기능과 개발 일정을 공유해야 해서 기능리스트와 일정을 수립했습니다.
처음 기획단계에서는 "어떤 기능을 언제까지 개발하겠다" 를 수시로 공유하기 위해서 WBS를 작성했습니다.
하지만 1인 개발이고 요구사항이 계속 달라지고 급하게 개발해야 하는 항목이 추가되기도 해서 WBS는 유지하기 힘들다고 판단하여 8월쯤부터 더 이상 사용되지 않고 Agile 방식이 사용되었습니다.
2. 설계
2-1. ERD
ERD 설계는 ERD Cloud를 활용하였습니다.
관련 있는 테이블끼리 색상으로 구분하기도 편하고 사람마다 다르긴 하겠지만 저는 학생 때부터 쓰던 서비스라 가시성도 좋다고 느껴서 항상 ERD 설계는 해당 서비스를 사용하고 있습니다.
2-2. 아키텍처
3. 개발
우당탕탕 설계를 마치고 어찌어찌 개발단계까지 왔습니다. 프로젝트를 만들면서 처음 마주하며 생소한 것들도 있었습니다만 API 백엔드 서버는 큰 문제없이 잘 마무리가 되었습니다.
프로젝트의 기능을 간단하게만 나누면 다음과 같습니다.
- 회원기능
- 시험 응시 및 해설 기능
- 채점 기능
오류상황까지는 아니었지만 가장 기억에 남는 개발상황에서 생겼던 이슈가 하나 있었습니다.
QueryDSL에서 fetchJoin과 페이징처리를 같이할 때 발생하는 이슈였습니다.
살짝 요약하자면 데이터를 전부 불러온 다음 애플리케이션계층에서 페이징을 처리하기 때문에 발생하는 메모리 이슈였습니다.
해당 상황은 따로 게시글로 정리해 두었으니 다음 게시글을 참고 바랍니다.
😭 개발과정 중 어려웠던 점
1. NICE 본인인증 API(외부 서비스)
이건 어려웠다.. 라기보다는 그냥 제가 바보 같았던 부분이 있어서 작성해 봅니다. 그동안 개발을 진행하며 처음 붙여보는 외부서비스였고, 모듈을 제공받아서 저희 프로젝트에 적용하였는데, 화면에서 자꾸 오류가 나오는데 다음 과정으로 넘어가지지를 않아서 원인을 못 찾았던 상황이 있었습니다.
예제코드 변환 없이 그대로 적용했는데 위와 같은 오류가 뜨면서 진행이 안 됐었습니다. 어디가 문제인지 찾아보겠다고 12시까지 야근도 했었는데, 결론적으로 모듈 신청한 지 얼마 안 돼서 통신사에 업체 정보가 등록이 안 됐던 것 같습니다.
개발가이드 문제상황에 떡하니 있었는데 말이죠.. 등록에는 7~10일 정도가 소요된다고 합니다 ㅠㅠ
2. 프론트엔드
이전에 작성된 글이나 이력서를 보시면 아시겠지만 저는 백엔드, 인프라 기술스택만 가지고 있습니다.
화면까지 개발해야 한다고 들었을 땐 참.. 난감했었습니다. 해본 거라고는 h2, span, p, div 태그 써본 게 전부인데 어떻게 구현하지.. 싶었습니다. 웹 화면개발은 학교에서 전공시간에 배운 딱 그 정도가 전부였습니다. 차라리 퍼블리셔가 있으면 html css 받아서 스프링에 타임리프로 처리하면 될 텐데 처음부터 만들어야 하는 프로젝트였습니다.
데이터 전송 방식이나 데이터 받아서 처리하는 거나 다 할 줄 아니깐 "화면은 그냥 데이터 뿌리는 용도로만 쓰자"라고 생각해서 데이터 검증 은 서버에서 진행하고 GPT로 데이터만 받아서 뿌리는 화면 만들어달라고 요청하니 나름 그럴 싸하게 만들어줬습니다.
🫠 개발과정 중 아쉬웠던 점
가장 아쉬웠던 점을 꼽으라 하면 역시.. 프론트엔드 개발자의 부재입니다. 회사 갓 들어온 신입이었던 터라 다른 팀의 프론트 개발자에게 협업 요청하자고 말씀드리기도 눈치 보여서 결국 죽어라 혼자 밤새고.. 몸 컨디션 망쳐가며 혼자 개발 진행했었는데, 지금 와서 생각하면 그냥 프로젝트 처음 시작할 때 말씀드릴걸 그랬습니다.
그러면 저도 서버 작업에 시간을 들이고, 프론트엔드 작업 쪽도 지금보다는 더 좋은 퀄리티, 더 나은 개발방식으로 진행되고, 24년 4회차 시험 전에 오픈도 진행할 수 있었을 텐데 말이죠.
이렇게 생각하니 프로젝트 시작할 때 눈치 보지 말고 그냥 팀 내에서 말을 꺼내볼걸 하고 생각합니다.
📖 느낀 점
지금까지는 학교에서 프로젝트를 만들어보고 로컬에서 돌리며 발표까지만 진행하고 마무리가 됐었는데, 처음 배포까지 진행해 본 프로젝트이기도 하고 나름 많은 것을 배우고 느꼈습니다.
- 잘 성장하고 있다.
퇴근하고 시간 내서 공부하던 게 빛을 봤습니다. 제가 개발 실력이 좋다고는 할 수 없지만 그동안 퇴근하고 남는 시간에 공부했던 것들을 토대로 이번 서비스를 개발해 봤습니다. 처음 적용시켜 보는 기술들로 원하는 기능을 만들 때 그렇게 기분이 좋을 수가 없습니다. 실제로 JPA나 QueryDSL을 사용하며 더 깊이 있게 이해할 수 있는 계기가 되었습니다.
- 아직 기술적으로 부족하다.
프로젝트는 완료했는데 뭔가 부족한 느낌입니다. 사용해보고 싶었지만 이해도가 낮아 사용하지 못한 기술이라던가, 해당 기술을 상황에 맞게 잘 적용하고 있는가 라는 의문이 있습니다.
일단 지금 제일 급하다고 생각하는 부분은 spring security입니다. 스프링을 사용하여 회원 관련 서비스를 사용한다면 해당 기술은 깊게 이해하고 있어야 합니다.
혼자 힘으로 프로젝트 하나를 마치고 회고를 작성하며 돌아보니 되게 뿌듯하네요.. 25년 목표는 앱 서비스를 하나 생각해 둔 것이 있어서 해당 서비스를 만들어볼 예정입니다.
하지만 그전에 프로젝트를 진행하며 부족한 부분을 메꿔야 해서 다음 공부할 것들을 정리할 것 같은데 1순위로는 스프링 시큐리티가 되지 않을까 합니다.
다음 만들 프로젝트에 그룹과 회원기능이 들어가기 때문이죠. ㅎㅎ 기프티콘을 많이 받으시는 분이라면 기대하고 기다려주세요. 내년 이맘때쯤 아마 소식 들고 찾아오지 않을까 생각합니다.