project 소개
이미지 기반 SNS인 핀터레스트를 모티브로 해서 웹사이트를 만들었다. 이미지 검색을 할 때 자주 봤던 사이트이지만 이용 경험이 없어 사이트의 유저 플로우 이해를 하는데에도 꽤 난항이 있었다. 기획 초기 부터 이용간에 유저 플로우가 불편한 점이 많다고 느꼇기에 그 불편한 점을 우리 나름의 더 편한 플로우로 구현했다. 그리고 프로젝트 기간이 다소 짧아 디테일한 점은 구현하지 못하고 큰 기능 위주로 구현했다.
개발 인원
프론트엔드 : 3명
백엔드 : 2명
기술스택
Front-End : React.js, styled-components
Back-End : Nodejs, express, multer, jwt, Bcrypt, My SQL, TYPEORM
Common : Git, Github, Trello, Notion
관련 링크
[시연연상]
[Front-end Github]
[Back-end Github]
위 영상은 실제 백엔드의 rds와 통신하며 구현된 영상입니다.
1차 프로젝트와 마찬가지로 기획 단계 이후 아래 내용을 순서대로 정리하고 FE와 공유하면서 프로젝트를 진행했다.
프로젝트의 구체적인 기능 설계 문서는 아니지만 위 내용을 정리하면서 기능별 문서화 혹은 프로젝트 문서화의 습관화를 습득하는 과정이었다.
feature에서 나열한 기능 중 RDS, S3, 프로필 페이지, Pin CRUD에 관련하여 중점적으로 맡아 진행했다.
그 중 핀을 생성할 때 s3 클라우드에 이미지를 업로드하는 과정에서 미들웨어 multer s3
를 사용하여 route단에서 핀이 생성되든 되지 않든 이미지가 클라우드에 업로드 되는 로직이 비효율적이라고 판단되었다.
그래서 핀 생성할 때의 route에서 이미지를 multer
를 이용해서 받지만 클라우드에 올리지 않고 buffer에 담아서 service단 까지 이동한다. service단에서 모든 데이터 검증을 거친 후 이미지를 s3 클라우드에 업로드한다. 마지막으로 model단에서 에러가 발생한다면 s3 클라우드 내에서도 이미지가 지워지게 되는 Transaction 처리 로직으로 구현하였다.
이용해보지 않은 핀터레스트를 모티브로 해야 했고, 기간, 인원 등 1차 프로젝트 보다 물리적으로 힘든 상황이었지만 팀원들이 각자 맡은 바를 잘 이루어내서 무사히 프로젝트를 마칠 수 있었다. 특히 백엔드는 본인이랑 김응수님과 둘이서만 진행했는데 합이 정말 잘 맞아서 힘들지 않고 수월하게 진행할 수 있었다.
급하게 구현하느라 내가 구현한 코드의 수준이 매우 아쉽다. 멘토님도 꼭 리팩토링이 필요하다는 코멘트를 주셨기도 했고..
그리고 분업을 하다 보니 1차 때 이미 했던 CRUD 위주로 구현하게 되서 아쉬운 점도 있었지만 s3, multer를 사용하면서 코드를 짤 떄 공식문서를 참고하는 법에 더 익숙해질 수 있었고 Express로 구현하는 CRUD API는 이제 정말 친숙해진 것 같다.
조만간 코드 리팩토링은 꼭 진행할 것이고 추후에 Nest.JS등 다른 프레임 워크, 다른 DB를 사용하여 CRUD API를 구현해보고 싶다.