728x90
4주 동안의 연계 모바일용 웹 서비스 챌린지가 오늘로써 막을 내렸다. 회고록을 바로바로 작성하려고 했으나 변명이겠지만 기간이 짧은 탓에 바로 작성하지 못했다.🥲
전체적인 코드를 다시 살펴보고 작성하려고 했지만, 제출 기간이 오늘 자정까지라 지금은 떠오르는 부분만 회고록을 작성했다.
넘블을 시작하게 되었던 계기 👀
지인이 넘블 추천을 해주어서 넘블을 접하게 되었다. 그래서 넘블을 검색해보니, 실전 프로젝트를 경험할 수 있는 곳이라는 것을 알게 되었고, 지인이 넘블을 통해 기술적으로 성장하고 도움이 되었다는 후기를 말해줘서 넘블을 시작해야겠다! 다짐했었다. 그리고node.js
에서SpringBoot
로 스택을 바꾼 후 새로운 기술 스택에 관한 공부와 적응하기 위해 프로젝트가 필요했던 저에게는 아주 좋은 기회라고 생각해서 시작하게 되었다.
활용한 라이브러리 🕹
aws-s3
: 동영상 플랫폼이기 때문에 동영상이나, 사용자의 프로필 이미지를 저장하기 위해 사용했다.spring-restdocs-mockmvc
,mockito
: 단위 테스트와, 통합 테스트를 진행하기 위해 사용했다.querydsl
: 커서 기반 페이징을 활용할 때 동적 쿼리를 작성할 수 있어서 사용했다.
주요 로직 💻
프로젝트를 진행하면서 전체적인 동영상 기능 구현에 대한 역할을 맡아 개발을 진행했다.
동영상 업로드 로직
- 동영상 파일 및 썸네일 파일과 세부 정보들을 multipart/form-data (Http contextType) 요청받고, cloud front URL + S3에 업로드하고 반환되는 key 값을 파일 URL로 두어 DB에 저장하는 방식으로 구현했다.
- key 값은 S3에 중복된 key 값이 있다면 덮어씌우는 문제가 있으므로 UUID + filename (확장자를 제외한 파일명) 으로 설정하였다.
커서 기반으로 한 조회순 정렬
- 특정 값으로 정렬할 때 모바일 웹 기반으로 구현하는 플랫폼이기 때문에 인피니티 스크롤이 가능한 Cursor-based pagination을 적용했다.
- 커서 기반을 사용할 때 비교 값이 유일하지 않으면 같은 값을 가지는 tuple을 모두 제외하기 때문에 유니크 제약조건을 갖지 않는 컬럼은 유일 값을 만드는 공식이 필요하다. 그래서 유일한 값을 어떻게 생성하면 효율적인 방법을 구하기 위해 검색했다. 검색을 통해 mysql의
concat
이라는 문자열을 합쳐주는 함수와lpad(value, length, char)
이라는 value의 길이를 제외하고 length만큼 문자를 넣어주는 함수를 알게 되었고, 비교 값과 id를 이 두 함수를 활용하여 유일한 값을 만들도록 구현했다.
프로젝트를 진행할 때 좋았던 점 😁
- 테스트 코드를 작성하고 실행 시 ✅가 뜰 때마다 제대로 구현한 느낌이 들어서 기분이 좋았다!
- 팀원들의 코드 리뷰를 통해 한 층 더 성장할 수 있다.
- 메인 로직을 맡아 부담감이 컸지만, 기능이 하나하나 완성될 때마다 성취감을 느낄 수 있었다.
- 오류를 고쳐나갈 때마다 성취감을 느끼고, 실력이 향상될 수 있었다.
- 팀원들이 지식을 공유해줌으로써 Spring Boot에 대한 지식을 많이 얻을 수 있었다.
- 팀원들 최고 💜 👍🏻
프로젝트를 진행할 때 어려웠던 점 😕
Spring Boot
로하는 프로젝트는 처음이라 모르는 것들이 너무 많아서 진도가 느려서 팀원들에게 죄송했다. 🙏🏻- 처음으로 테스트 코드를 작성하게 되었는데, 테스트 코드를 작성해보니 기능 구현의 할당되는 시간보다 테스트 코드 구현의 할당되는 시간이 너무 많기도하고 작성도 너무 어려웠다.
- 프로젝트 기간이 짧아서 원하는 기능을 기간내에 구현하지 못해 아쉬웠다.
참조
728x90
'회고' 카테고리의 다른 글
AWS Certified Developer - Associate 합격 후기 (2023 DVA-C02) (3) | 2023.10.13 |
---|