2023년 작년 연말에 교외 사람들과 함께 한 사이드 프로젝트 "플리보따리"에 대한 후기입니다.
저에게도 첫 교외 프로젝트 경험과 배포 경험이었기에 배우고 느낀 점이 많아 이번 회고에 다 풀어내보려고 합니다.
기획
[서비스 주제]
연말을 맞이하여 크리스마스 기간에 친구나 지인에게 플레이리스트와 비밀 편지를 전달하는 서비스
[개발 기간]
2023년 11월 25일 ~ 2023년 12월 22일
[팀원 구성]
PM : 1명 (대학생인턴)
디자이너 : 2명 (대학생)
프론트엔드 : 3명 (현직자)
백엔드 : 3명 (대학생,취준생)
[기술 스택]
프론트엔드 : React
백엔드 : Spring (Java), MySQL, AWS
[협업 툴]
Slack, Notion, Github
개발 과정
우선 크리스마스 롤링 페이퍼 사이드 프로젝트를 꼭 한 번 해보고 싶었는데, "플레이리스트" 라는 아이템으로 특별화까지 한 사이드 프로젝트에 참여하게 되어 기뻤다. 나는 Spring(Java) 개발자로 합류하게 되었는데 합류 당시, 기획과 디자인이 모두 마쳐져 있는 상태라 바로 개발을 시작할 수 있었다.
처음에는 백엔드 개발자 2명이서 시작했다. 같은 대학생분이시고, Spotify API 사용을 확정지은 상태에서 해당 개발 경험이 있는 분을 PM분이 뽑으신 것이었기 때문에 다른 백엔드 개발자분께서 Spotify와 회원가입/로그인 관련 기능 개발을 맡고 내가 "플레이리스트+롤링페이퍼" 등록/조회 기능을 개발하였다.
개발 이전에 ERD와 API 명세서(기능 명세서)는 함께 빠르게 작성하였다. 아래는 1차 ERD이다.
내가 맡은 기능은 간단한 CR 기능이고, 연관관계가 복잡하지도 않아서 개발하는 데에 어려움은 없었다. 코드를 짜면서는, 당장 실배포를 앞두고 있다보니 최대한 오류나 버그 없이 모든 기능들이 잘 돌아갈 수 있도록 예외 처리에 신경을 썼고, 최대한 간단하게 코드를 짜려고 노력했다. 아직도 아쉬움이 남는 점은.. 테스트 코드를 작성해보지 않았던 것이다. 당시에는 정신 없이 기능 구현만 하느라 놓친 부분이었는데 나중에 돌아보니, 테스트 코드를 작성하면 이런 부담을 훨씬 덜었지 않을까 싶은 생각이 들었다. 이김에 테스트 코드를 작성하러 가보아야겠다..
API 명세서는 초반에 Notion 데이터베이스로 작성하다가, 보기에도 불편하고 프론트 쪽에서 자동화를 원하시는 것 같아 이후 합류한 백엔드 개발자분의 도움으로 Swagger를 사용하게 되었다. 처음 API 명세서 자동화 Tool을 사용하는 경험이어 신기했다. 🙊 이렇게 편하고 행복한 Tool이 있다니.. 이후 진행하는 프로젝트에서는 Swagger를 도입하고 있는데 버전 이슈로.. 난항을 겪고 있기는 하다.. 꼭 성공해낼 것이다. 🔥
기능 개발을 마친 이후에는 다른 백엔드 개발자분과 하루 날 잡고 화면 공유를 하며 EC2 서버 오픈, RDS 연결, 도메인 연결까지 1시간 30분만에 1차 배포를 마치었다. 이렇게 빠르게 배포를 성공한 적은 처음이었다.🙊
이후 개발과 jar파일 배포까지 마치어 이제 프론트쪽 작업과 연결만 기다리고 있었으나 새로운 기능이 추가되면서 새로운 백엔드 개발자분이 합류하셨다. 새로운 기능이 디지털 컨텐츠 관련된 기능으로 사용자 유입에 좋은 아이디어라고 생각하였고 해당 기능 구현에 대해서도 궁금한 점이 많아 그대로 진행하게 되었다. 빠른 진행을 위해 학교 도서관에서 비대면 회의를 열어 현재 개발 상황을 설명해드리고, 앞으로의 개발 일정에 대해 다시 정하였다. 👻
새로운 백엔드 개발자분이 합류하시면서, 다시 한 번 ERD와 현재 패키지 구조, 패키지명들, DTO들을 확인하는 기회를 가지게 되었다. 그러면서 ERD와 API가 수정되었다. 1차 ERD에서는 사용자가 선물하고 싶은 곡을 DB에 저장하도록 되어 있는데 크리스마스를 타겟으로 하는 서비스이다 보니까, 저장되는 곡들이 중복될 것이라는 판단이 들었다. 이를 방지하기 위해 곡을 따로 저장하지 않고, 매번 spotify API를 이용해 곡을 불러오는 쪽으로 ERD와 코드들이 전면 수정되었다. 추가로 선물을 모두 담는 playlist_pack 테이블도 개발 과정에서 필요성이 없다고 판단하여 해당 테이블도 삭제하였다. 이외에는 새로운 기능에 대한 테이블이 추가되었다.
관련 기능들을 수정한 이후에는.. 정말정말 이제 더이상 개발할 것이 없다 생각했지만..! 더 있었다. 프론트분과 선물 조회 방식을 다르게 생각하여 관련하여 API 스펙을 수정하는 작업을 거치기도 하였다.
처음에는 기능 개발이 빠르게 완료되어 CI/CD 구축 없이 jar파일을 EC2 서버에 올리는 것으로 배포를 대체하였는데.. 계속되는 수정에 CI/CD가 절실히 필요하다고 느껴 도입하게 되었다. CI/CD는 Github Actions와 AWS CodeDeploy 서비스를 이용하여 구축하였다.
2차 QA를 마지막으로 프론트와 API 연결 테스트를 마치고, DB를 초기화 하면서 실배포 준비를 마무리하며 배포 이전 개발이 완료되었다. 배포 이후에는 크게 기능상에서 바뀐 부분은 없지만, 서버가 다운되는 현상이 발생하여 재가동을 여러 번 해주어야 했다. 서버 스펙이 부족했지 않나 싶다.😰 약 5일 간의 짧은 배포 기간이 지나고 모든 팀원이 모여 사용자 접근 분석을 하며 프로젝트는 마무리를 하였다.
릴리즈
웹 서비스였기에, 도메인 구매를 통해 릴리즈를 하였고 이후 GA4로 실사용자 현황도 추적해나갔다. 아래는 릴리즈 후 홍보 당시 홍보 자료이다.
플리보따리 링크 : https://www.plypockets.com/
올 한해 마무리 크리스마스 플리보따리로
연말을 따스하게 만들어줄 비밀편지들로 특별한 순간, 소중한 사람에게 전하고 싶은 마음을 선물보따리로 전하세요.
www.plypockets.com
플리보따리 인스타그램 링크 : https://www.instagram.com/plypockets/
아래는 가장 피크였던 크리스마스 당시 GA4 결과이다.
소감
이번 프로젝트를 하며 실배포를 경험할 수 있어 뜻깊은 경험이 되었고 많이 아픈 경험이 되기도 하였다. 실배포까지는 머나먼 여정과 고난이 있었고 매번 해결하는 과정에서 내 기술적인 부족함 때문에 스트레스를 받았다. 그만큼 성장하는 것이라고 생각하기도 하지만.. 이번 기회를 통해 서버 안정화, 서버 로그 추적, 내부 사용 URL http → https 변경 등에 대해 더 관심을 가지게 되었고 추후 프로젝트에서 해당 내용을 더 공부하고 적용할 수 있는 계기가 되었다.
추가로 가장 중요한 것은 역시 소통.. 아무래도 slack을 통해서만 소통하다보니 18시 이후로는 알람이 가지 않아 연락에 제약이 있었다. 심지어 18시 이후에는 알람이 가지 않는다는 사실도 뒤늦게 알았다..! 어쩐지..! 이후 외부 프로젝트에서 다시 slack을 사용하게 된다면, 이전 DevChat 강연에서 들은 비동기 커뮤니케이션 방법의 일종으로 (Review 카테고리에 후기 있음!) 하루에 정해진 시간에는 꼭 연락을 확인하는 시스템이나 규칙을 마련하는 방법도 적용시켜보고 싶다.
PM분과 하는 프로젝트는 이번이 처음이었는데.. 정말 '와 이게 PM이고 이래서 PM이 필요하구나'를 많이 느꼈던 것 같다. 기존 기획, 프론트와의 의견 조율, 전체 일정 조율, 전체 개발 현황 정리 등등 많은 것들을 매니징해주셨고 그 결과 개발에만 더 집중할 수 있었던 것 같다. 또한 PM분이 따로 계실 때 소통하는 방식도 새롭게 배웠다.
개인적으로는 시험기간이라는 시간적인 문제 때문에 많은 시간을 투자하지 못한 것이 가장 아쉽다. 그래도 어깨 넘어 배운 것들에 감사하고, 실력 있는 분들과 함께 한 것에 감사하다. 개발이 빨리 끝날 것이라 예상했던 것과 달리, 수정을 거듭했던 경험을 토대로.. 이후에는 일정 조율을 예상치 못한 상황까지 고려하여 해야겠다는 생각이 들었다. 그리고 내가 가장 개발 해보고 싶고, 사용해보고 싶은 서비스를 만들게 되어서 매우매우 기뻤다!!! 개발한 내가 가장 열심히 쓰고.. 계속 선물 받은거 없나 들어가보고.. 서비스를 혼자 짝사랑했던 것 같다. 🙊
플리보따리 서비스는 2024년 12월까지는 진행 예정이오니 한 번씩 들려 사용해주시면 감사하겠습니다. ❤️
'Project' 카테고리의 다른 글
[git/github] Git-Flow 전략을 프로젝트에 적용하기 (0) | 2024.05.27 |
---|---|
[SpringBoot(Java), AWS] 이미지 로딩 속도 개선 (CloudFront, S3) (0) | 2024.03.31 |
[Spring(Java)] 스프링으로 프로젝트 하는 방법 AtoZ (0) | 2023.11.02 |