
안녕하세요, 오늘은 SSAFY 1학기의 최종 프로젝트에 관한 기사를 작성해보겠습니다.
0. 들어가며 - 최종 프로젝트가 뭔가요?
최종 프로젝트는 1학기 동안 배우고 실습한 것들을 토대로 주어진 주제와 명세서(description)에 맞추어 두 명이서 팀으로 8일간 협업해서 프로젝트 결과물을 만들어 내는 것입니다. 파이썬 트랙은 1학기 동안 Django, javascript, Vue.js를 배우는데요 해당 프레임워크를 기반으로 주어진 명세를 구현하는 프로젝트입니다. 개발에 필요한 프레임워크의 기본적인 내용은 SSAFY에서 한 학기 동안 알려주지만, 최종 프로젝트에서는 협업을 기반으로 프로젝트 기획과 산출물을 발표하는 과정까지 있어서 팀의 구성원에 따라 산출물이 다양하게 나오는 것 같습니다.
이번 최종 프로젝트는 기존에 있었던 '영화 추천 서비스'와 SSAFY 10기부터 금융권 특화 트랙이 신설되어 '금융 상품 추천 서비스' 두 가지 중 하나를 선택할 수 있었습니다. 저는 이 중에서 영화 추천 서비스를 선택했습니다.
1. 프로젝트 그라운드 룰 수립 및 기획
최종 프로젝트는 11월 16일(목)에 시작되어 11월 23일(목)에 마무리되는 총 8일 간의 일정이었습니다. 그 중 저는 예전 협업 경험을 바탕으로 '효율적인 커뮤니케이션'을 최우선으로 생각했고, 프로젝트를 본격적으로 시작하기에 앞서 프로젝트 그라운드 룰부터 수립했습니다.
(1) GitLab 에서 git branch를 기반으로 각자 작업 환경에서 작업하기

SSAFY에서는 GitLab을 사용해서 작업물을 공유하는데요, 최종 프로젝트도 GitLab에서 작업물을 공유하는 방식으로 이루어졌습니다. 저희 팀은 각자 세부 페이지나 기능별로 작업을 맡는다는 원칙 하에 코드 충돌(git conflict)을 최소한으로 하기 위해 각자 일할 때 git branch를 기반으로 일을 했었습니다. 각자의 branch에서 작업을 하고 매일 오전 9시 정각, 오후 5시 30분에 두 번 코드를 합치고(merge) 이상 없을 시 Master에 최종적으로 코드를 반영하는 작업을 했었습니다.
코드를 merging 하면서 각자 이슈 사항을 공유하는 스크럼(Scrum)도 함께 진행(오전 9시, 오후 5시 30분)했고, 이런 방식들이 커뮤니케이션 효율화에 도움이 되었고 각자 하고자 하는 개발에 조금 더 집중할 수 있었습니다!
(2) 노션에서 티켓 기반의 작업 처리

각자 어떤 작업을 하고 있는지, 어떤 일을 처리했고 해당 티켓을 처리 하면서 발생한 이슈를 문서화하기 위해서 JIRA의 티켓 방식을 차용해 노션에서 티켓 방식으로 일을 진행했습니다. (JIRA 무료 버전도 있지만 노션이 익숙해서 노션으로 티켓 방식을 구현했습니다) 자세한 내용은 다음 SSAFYcial 기사에서 내용을 작성할 예정입니다!
티켓 기반의 업무 처리의 장점은 8일 간 수없이 쏟아지는 기능 개발 사항(해보고 싶은 것)을 정리해서 우선순위 하위의 백로그 티켓으로 만들어놓고 우선순위가 높은 업무를 바탕으로 진행했었는데 의사 결정에 효율적인 방식이었다고 생각합니다.
(3) 다양한 레퍼런스 조사

프로젝트 첫 날은 '영화 추천 서비스'라는 컨셉에 맞추어 기존의 OTT 사이트를 분석하고, 기존 OTT 사이트의 문제점을 발견하고 해당 문제점을 개선하는 사이트를 기획해보는 것을 목표로 삼았습니다. 다행히도 저희 팀은 영화 추천 OTT 사이트에 대한 사용자 경험이 익숙한 편이었고, 각자가 생각하는 기존 OTT의 문제점을 기반으로 다양한 기능을 기획하는 데는 큰 어려움 없이 진행할 수 있었습니다.
2. 프로젝트 결과와 느낀 점

SSAFY에서 배운 다양한 기능 구현을 토대로 개발을 진행하면서(회원가입, 로그인, 커뮤니티 기능 등) 영화 데이터를 API로 받아와서 데이터로 저장하고, 어떤 데이터를 기준으로 추천 알고리즘을 짤지 생각을 해야 했었습니다.
다른 OTT의 경우 유저가 좋아할만한 장르별 추천과 많은 사람들이 좋아하는 인기작, 최근 개봉한 영화 등 다양한 카테고리로 나누어 유저의 선택권을 다양하게 제공하고 있다는 점이 공통적으로 보였습니다. 그래서 기능 명세서에 있었던 유저 취향을 고려한 장르별 추천과 인기작, 최신 개봉작 등 다양한 영화 정보를 제공하는 사이트를 하나씩 만들어 나갔습니다.

프로젝트를 진행하면서 그동안 SSAFY 과정에서 배운 기본적인 구현을 종합적으로 하는 것, 우선 순위에 따라서 어떤 것을 우선적으로 고려하고 개발해야 하는지, 데이터베이스에 필요한 정보는 얼마나 저장해놓아야 할지 등 매 이슈마다 의사 결정이 필요했고 오프라인으로 프로젝트를 진행해서 필요할 때마다 의사결정을 내렸습니다.
의사 결정 과정에서 아쉬웠던 점은 시간이 촉박하다 보니 하나의 의사결정을 내릴 때 일일이 레퍼런스를 찾아가며 구현하는 것이 현실적으로 어려워서 '현실적이고 보수적인' 의사 결정을 내려야만 했습니다.
예를 들어 TMDB에서 영화 API로 데이터베이스를 구축하는 과정에서 영화와 관련된 다양한 정보들(영화 제목, 출연 배우, 영화 장르, 인기도, 유저가 좋아요를 체크한 영화인지 등)을 얼마만큼 가져와야 할지 몰라서 프로젝트 첫 이틀은 데이터 베이스 구축과 모델 설계에 공을 들였습니다. 결과적으로 후반부에 가서 다양한 영화 정보를 연결시켜 기획 의도에 맞게 구현할 때는 편리했었지만 '어떻게' 활용할지 모르는 상황에 '이렇게 하는 게 맞는지' 생각하고 찝찝한 의사결정을 내려야 했을 때 답답함을 느꼈습니다.

저는 주로 프론트엔드 작업을 맡아서 했는데 프론트엔드 프레임워크를 Vue를 사용하다 보니 자연스레 Vuetify를 활용해서 화면을 작성했습니다. 그동안 반응형 웹 사이트 만들기, 그리드 시스템 등 다양한 것들을 배웠는데 Vuetify는 새로운 걸 차용해서 써보고 싶다는 욕심(CSS나 부트스트랩 쓰듯이 쓰면 되는 거 아닌가? 응 아니야)에 Vuetify 문서를 보며 하나씩 익히고 적용했습니다. SSAFY에서 부트스트랩을 사용해본 경험이 있었기에 문서 보고 하나씩 적용하면 되겠다고 접근했으나 프론트엔드에서 다른 사이트에서는 사소한 기능이라 할지라도 구현할 때 수많은 시행착오를 겪어서 나온 것이라는 깨달음을 얻었습니다.
예를 들어 저는 그리드 시스템을 표면적으로만 이해하고 있었지 다양한 요소들을 적절히 변형해가면서 화면 크기에 따라 변하는 부분을 구현하는 게 생각만큼 쉽지 않다는 것을 깨달았습니다. 코드를 썼다가 지웠다가 전에 사용했던 코드를 재사용하려고 붙여 넣었더니 특정 태그 안에서는 원하는대로 결과물이 나오지 않는 등 숱한 문제와 씨름하며 하나씩 구현했는데 시간 관계 상 원하는 대로 안 나와서 몇 번 해보다가 우선순위 하위로 두고 다른 부분을 구현했던 게 아쉬웠지만 프로젝트를 하는 당시에는 '현재 구현할 수 있는 최선'까지만 해보고 넘어가는 의사 결정도 중요하다는 것을 깨달았습니다.
'SSAFY > SSAFYcial' 카테고리의 다른 글
| 프로젝트 잘하는 팀의 비법, JIRA(지라) 사용 가이드 (3) | 2023.12.30 |
|---|---|
| 리액트(React) 공부 시작하기 (3) | 2023.12.27 |
| 역삼역 주변 맛집 리스트 (4) | 2023.11.19 |
| [SSAFY/SSAFYcial] SSAFY 금융권 현직자 멘토링(우리은행 엘사 멘토님) (18) | 2023.10.31 |
| 알고리즘 스터디 가이드 (14) | 2023.10.29 |