2019.10.28 부터 2019.11.9 2주간 진행했던 프로젝트 Cafe114에 대한 회고
소개
- 'Cafe114' - 24시간 운영 카페 정보 실시간 공유 웹페이지
- 지도를 통해 한 눈에 정보를 담을 수 있다.
- 불친절하게 흩어져 제공되어 왔던 운영시간 데이터를 한 번의 접속으로 해결
- 내가 대학생 시절 느꼈던 불편함, 그리고 늦은 밤 책 한권 읽으러 나가고 싶은데 마땅히 갈 카페를 찾을 수 없었을때 느꼈던 그 막막함을 바탕으로 낸 아이디어로 시작했다.
- 프로젝트에 대한 아이디어 제안은 내가 했지만, 프로젝트에 대한 UI / UX 부분은 훌륭한 프런트 팀원분들 덕분에 성공적으로 완성 할 수 있었다.(감사합니다)
- 총 3명의 인원으로 프론트2, 백엔드1 로 진행하였다.
백문불여일견(百聞不如一見)
왜 나는 이 프로젝트를 선택하였는가?
- 개발자로서 실제 출시가 가능할 만한 모델이었으면 좋겠다.
- 사용자가 한명이라도 있다면, 그 사용자가 가치있게 사용할 수 있는 프로젝트라면 좋겠다.
- 플랫폼만 개발된다면 확장의 가능성이 무궁무진할 것 같다.
- 카페 외 24시간 서비스 공유 ( 병원, 약국, 편의점, 찜질방, PC방 등등..)
- 실시간 채팅을 기반으로 한 커뮤니티가 생성 될 수도 있을것이라고 생각했다.
- 스타벅스의 경우 고객의 충성도가 높기 때문에 스타벅스 앱 내에 그들만의 커뮤니티가 생긴다면 어떨까 라는 상상도 해봤다.
- 여기 스타벅스 사람 많아요! 앉을 자리 없어요!
- 백엔드로서 구축해야할 데이터가 명확했다.
스택
- 첫번째 목표, AWS S3, EC2, RDS를 활용하여 REST API를 구축하는 것
- 두번째 목표, 프런트에서 원하는 데이터에 대한 사전 예측을 통한 DB Schema 구현
- 세번째 목표, 프런트에서 필요로 하는 데이터는 수정 보완해서 최대한 쉽게 해주기
- 그리고 아래 목표 완성하기!
- AWS EC2 - Node.js - Express 기반 서버 구현, 배포
- AWS RDS - MySQL - Sequelize 를 활용한 RDBMS 구현
- AWS S3 - Multer - MulterS3 를 활용한 image 데이터 저장
- REST API 구축
- Socket.io 활용으로 유저간 실시간 채팅 구현
- Crypto, JWT 기반 회원가입 및 로그인 기능 구현
- 소셜 로그인 기능 구현 (카카오)
유효범위 결정
2주 프로젝트였고, 실제로 코드를 작성할 수 있는 시간이 많지 않을 것이라고 판단했다.
문제 - '모든 24시간 카페의 정보를 얻을 것이다.'
vs
해결 - '서울 지역 내 24시간 운영하는 '할리스', '탐앤탐스' 의 모든 정보를 제공할 것이다.
이유
1. 구체적이지 않기 때문에 명확한 유효 데이터 범위를 정해야 한다.
2. 정보를 얻기 쉬워야 한다.
위 이유를 바탕으로 우리는 '할리스', '탐앤탐스' 총 84개의 데이터를 바탕으로 개발을 진행하였다.
크롤링 vs 수기작업
크롤링과 수기작업에 대해서도 많은 고민이 있었다.
크롤링 장점 - 크롤링 기술에 대해 배울 수 있다. (새로운 스택 공부)
크롤링 단점 - 오랜 시간 소요 예상 (예상시간 6시간 이상)
수기작업 장점 - 짧은 시간 소요 예상 (예상시간 3시간 이내)
수기작업 단점 - 배우는 입장에서 크게 의미가 없다.
결정 - 수기작업
이유
1. 2주간의 프로젝트 기간동안 크롤링을 배우기 위해 소요하는 시간으로 인해 프로젝트 진행에 차질이 생길 수 있다.
2. 지금 당장의 스택에 대한 욕심보다 확실함에 걸자. 무엇이 더 중요한가 (크롤링? vs 프로젝트 완성?)
과정
처음이라 막막했지만, 처음이기에 두려워하지 말고 만들어보자고 생각했다.
- express-generator 을 통해 전체적인 서버의 형태를 만들었다.
- 서버 기초가 설계가 되니 뭔가 가능할 것 같았다.
- sequelize-cli 를 통해 전체 DB Schema를 구축하였다.
- ORM을 통해 테이블간 관계를 맺고 관계를 바탕으로 데이터를 가져왔다.
- Crypto, JWT를 통해 토큰을 통한 로그인 기능을 구현했다.
- 인증과 로그인에 대한 개념이 명확하게 잡히지 않은 상태라 초기에 클라이언트와의 토큰 소통에 대한 오해가 있었다.
- cookie를 사용할 필요 없이 headers에서 해결 가능한 일이었다.
- 이 과정을 발판삼아 더이상 cookie에 저장하는 실수는 범하지 않겠다.
- 소셜 로그인 (카카오) 기능을 구현했다.
- 카카오 인증을 통해 받은 고유키를 새로운 아이디를 생성했다.
- 기능 구현 이전에 카카오 로그인 한 유저와 기존 유저를 통합하는 부분에 대해 고려를 하지 않았기 때문에 추후에 통합 과정이 필요할 때 오류가 발생할 여지가 있다.
- 결국 API를 통해 기능 구현 하는 것이기 때문에 두려워 할 필요 없다.
- 천천히 레퍼런스 먼저 읽고 이해하자. 이해만 하면 구현하는건 금방이다.
- S3 - Multer - MulterS3 를 활용하여 image데이터를 따로 저장할 수 있는 경로를 생성했다.
- 클라이언트에서 image까지 관리를 할 여유가 없었기에 실제로 활용 되지는 않았다.
- Socket.io 를 활용하여 각 카페별로 실시간 소통이 가능하게 했다.
- 실시간 정보는 DB에 모두 저장이 되고 추후에도 활용이 가능하다.
- 실시간 채팅을 통해 상대방과 소통하는 건 생각이상으로 짜릿하다.
결과
-
사이트를 접속하면 서울 내 24시간 카페 (할리스, 탐앤탐스) 에 대한 정보를 얻을 수 있다.
Cafe114 사이트 - http://cafe114-client.s3-website.ap-northeast-2.amazonaws.com/
-
2주간의 프로젝트 결과 발표 영상이다.
소개영상 - https://drive.google.com/file/d/1e-LugI9w9RUdAsMnD9yceslH1_atNlGF/view
4주간 진행한 프로젝트의 결과물이며,
백엔드 개발자로 완성한 첫번째 결과물이다.
GitHub - https://github.com/Dankimhaejun/Cafe114-server
- DB Schema
- users, cafe로 구성된 기본 데이터에 유저별 좋아하는 cafe에 대한 데이터를 담을 userLikeCafe
- 유저들의 카페에 대한 comment를 담을 수 있는 comments
- 이렇게 보니 수정할 게 많다
회고
Q. 이번 프로젝트에서 너는 최선을 다했니?
A. 그렇다.
- 처음으로 프로젝트를 진행했다.
- 처음 진행하는 프로젝트에 팀장이 되었다.
- 프로젝트를 잘 만드는 것이 가장 중요하다.
- 하지만 더 중요한 것은 팀이 원팀으로 한 마음으로 진행했느냐이다.
- 원팀으로 최선을 다했으며, 2주 프로젝트의 성과로서 충분히 만족한다. (개인의 입장)
마지막으로
프로젝트를 진행하면 할 수록 더욱 겸손해지는 것 같다.
벼는 익을수록 더 고개를 숙이듯이 겸손한 개발자가 되고 싶다.
나는 백엔드였고, 혼자였다. 하지만 팀과 함께 최선의 결과를 내기 위해 끊임없이 소통했다.
지금 이 프로젝트가 완벽하진 않지만, 내 인생의 첫 프로젝트로서 완벽하다.
함께 해준 팀원분들께 진심으로 감사의 인사를 전하고 싶다.
앞으로 마주하게 될 수 많은 프로젝트가 기다려진다.