개발 프로젝트

플리보따리 서비스를 개발하며 -2024-04-04

최동훈1 2024. 3. 23. 20:03

플리보따리 란  ? 


도메인 : www.plypockets.com
Git hub : 플리보따리 (github.com)
 


안녕하세요 구독자 여러분 !!
제가 역대 한 프로젝트중 가장 애정을 가지고 진행했던 서비스에 대해서 소개해 드리겠습니다 !! ☺️
플리보따리 서비스는 선물과 함께 노래를 전송하는 익명 편지 서비스 입니다 ! 💌 

플리보따리 모바일 화면

 
이화여대 디자인 동아리 “UXO” 와 협업하여 만들었어요 !!
 
저도 전문 디자이너분들과 첫 협업 경험이어서 정말 많이 배웠고, 저랑 전혀 상관없는 직군들과 소통하는 법을 배운거 같았습니다!!🤭
제가 이 프로젝트를 진행하며 많이 배웠고 신경쓰고자 했던 부분은 바로
 

테스트코드 와 클린코드

 
였어요 !! 😜
 
 이번 프로젝트에서 반복문 대신 람다와 스트림을 활용한 자바8 부터 추가된 함수형 언어의 특징들을 적극적으로 이용해서 가독성 을 높이고 서로의 코드를 알기 쉽게 만든거 같습니당 !! 🍁
 
 또 이번 프로젝트에서 예외처리의 중요성을 다시금 느끼며, 커스텀 예외처리와 handler 기능을 각 Api 마다 모두 적용해보며, 예외 상황에 맞는 status code 반환으로 프론트엔드 분들과 원할하게 협업을 이루어지게 하였습니당 ..! 😊
 
또 Enum 타입으로 관리해서 실 사용시 전혀 무결성을 최대한 지키도록 구현 하였습니다 !! ㅎㅎ

@Getter
@AllArgsConstructor
public enum HttpExceptionCode {
    UNEXPECTED_EXCEPTION(HttpStatus.INTERNAL_SERVER_ERROR,  "예상치 못한 오류가 발생했습니다."),
    INVALID_ARGUMENT(HttpStatus.BAD_REQUEST,  "올바르지 않은 값이 전달되었습니다."),
    REQUEST_NOT_FOUND(HttpStatus.NOT_FOUND, "요청을 찾을 수 없습니다."),
    INTERNAL_SERVER_EXCEPTION(
            HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부에서 오류가 발생했습니다."),
    PLAYLISTPACK_NOT_FOUND(HttpStatus.NOT_FOUND, "유저의 플리보따리를 찾을 수 없습니다."),
    CONTENT_NOT_FOUND(HttpStatus.NOT_FOUND, "요청한 컨텐츠를 찾을 수 없습니다."),
    USER_NOT_FOUND(HttpStatus.NOT_FOUND, "요청한 사용자를 찾을 수 없습니다."),
    USER_ALREADY_VOTED(HttpStatus.BAD_REQUEST, "요청한 사용자는 이미 투표에 참여하였습니다."),

    SPOTIFYSONG_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 ID의 노래가 존재하지 않습니다.");

    private final HttpStatus httpStatus;
    private final String message;

}

 
 
현재도 운영중이라 실제 유저가 있으니, 고객들이 주는 피드백을 바탕으로 성능개선 경험도 쌓게 되었어요 !! ㅎㅎ
 
우선 제가 맡은 부분을 소개해 드리자면 , 

맡은 부분

회원 도메인

  • 회원가입과 로그인

음악 도메인

  • 노래검색, 노래 미리듣기, 노래 실시간 차트

인프라

  • GithubAction, AWS CodeDeploy, AWS S3 를 이용한 CI/CD
  • 배포관련 이슈

였어요 !! ㅎㅎ
 
특히 제가 프로젝트를 진행할 당시 처음으로 CI/CD 를 구축해 보았어요 !!🗨️
 
그런데 원래는 ㅠ
젠킨스와 도커 조합으로 하고 있었지만, AWS 프리티어 에서 젠킨스가 너무 느리게 작동해서 도저히 쓸수 없는 지경이 되더라구요 ㅠㅠㅠ 😢
그래서 결국 깃허브 액션을 이용했습니다 ㅠㅠㅠ
 
도커와 도커컴포즈 쿠버네티스는 이후 진행한 직짱건강 프로젝트에서 구축 해 보았어요 !! ㅎㅎㅎ 다음의 Episode 를 기대해 주세요 !! ☺️
 
또한 유저 데이터를 보고 음악 검색 페이지 에서 가장 많은 시간을 소비한다는 데이터를 보고
음악 검색 api 속도를 1.1초에서 0.4초로 70.44% 개선하였어요 !! 🫣
제 코드로 인해 여러 사용자들의 시간이 단축되었다는 사실이 너무 뿌듯했답니다 😝 !!
 
과정 : ♻️ [refactor] : spotify API 성능 개선 
 
 특히 중간에 크게 기획의도를 변경해야 할 일이 생겼는데, 저번 2023 인프콘에서 들었던, “계획에 대응하기 보단 변화에 대응하길” 이라는 애자일방법론이 떠올랐던 순간이였습니다 ㅎㅎ

성과

무려 월간활성유저수 MAU 764 규모의 서비스로 성장하였어요!! 🤩
제가 만든 코드가 수백명이 사용하다니.. 진짜 테스트코드와 QA의 중요성을 느꼈습니다 ㅠㅠ

  • 성과 MAU764MPV 42000달성

GoogleAnalatics4 MAU 분석
 

구글 애널리틱스를 이용한 유저 데이터 분석

DAU 분석

특히 뷰저블 이라는 유저 데이터 분석 툴을 처음 활용해 보았는데, 뭔가 GA4보다도 사용자 친화적 ? 으로 만들어진거 같아서 사용자의 데이터를 수집하기 좋았어요 ㅎㅎ

뷰저블 사용자 데이터

또 실제 유저가 있으니, 고객들이 주는 피드백을 바탕으로 성능개선 경험도 쌓게 되었어요 !! ㅎㅎ

회고

개발이 모두 완료되고, 함께 개발하였던 백엔드 개발자 ‘안나’ 님과 주 2회씩 계속 저희 코드에 대한 코드 리뷰를 하는 시간을 가졌어요. 정말 뜻깊었던 순간이였고, 서로 “왜? “ 를 질문하며 코드를 외울 정도로 서로의 코드에 대한 질문을 하고 답을 구하는 과정을 거쳤던거 같아요 !! ㅎㅎ

겸손하신 안나님 !

이때 경험이 서로 개발자로 성장하는데 큰 성장을 할수 있었던거 같아서 안나님께 커피를 선물해 드렸답니다!! 🤗
 
마무리
 
이번 프로젝트로 쌓은 실력이 제가 혼자 2년간 스프링을 공부하며 쌓았던 실력보다 훨씬 더 성장한거 같아요..! 이번 프로젝트를 계기로, 타 프로젝트에서 테크리드도 해보았어요!! 이건 추후에 다시 포스팅 할게요 ㅎㅎㅎ
 

제플리보따리에들어있는선물

 
저의 플리보따리 랍니다 !! ㅎㅎ
 
또 저에게 노래와 편지를 보내고 싶다면, www.plypockets.com/최동훈 으로 선물을 보내주세요 ! ㅎㅎ 익명(닉네임 설정이 가능하지만) 이라서 평소에 못했던 말들도 해주셔도 됩니당 ㅎㅎ