프로젝트 방향 (기획의도)
- 과일을 사먹기 힘든 1인 가구들이 좀 더 쉽게 과일을 살 수 있게 해주는 공동구매 플랫폼.
- 깃 마일스톤과 Slack을 이용해서 의사소통을 하기로 했다.
- Notion을 이용하여 기획의도를 정리하였다.
- ERD cloud를 이용하여 DB구조를 짰다.
- API 명세서 작성.
- 서버개발은 Postman을 사용하여 구현을 확인했다.
사용한 기술
Node.js + express.js
React + Sass
Javascript + HTML
MongoDB
나는 백엔드를 맡았다. 그리고 contextAPI를 만드는데 도움을 주었다.
주요기능
- 회원가입 CRUD, 게시판 CRUD, 댓글구현 으로 유저간의 의사소통이 가능하게 구현.
: 이번엔 회원가입과 게시판 작성시 multer 를 이용하여 사진을 넣을 수 있도록 했다.
- Nodemailer를 이용하여 비밀번호 재설정.
: 인증번호 발송하여 매치 후에 맞으면 비밀번호 재설정.
재설정한 비밀번호역시 bcrypt 이용.
- RESTful API 이용.
- 회원가입시 보안을 생각해서 bcrypt와 JWT를 이용.
: JWT는 cookie-parser를 이용.
dotenv를 활용 (→ process.env로 환경변수를 로드하는 제로 종속성 모듈이용 )
- 카카오 페이를 이용한 결제기능.
: I'm port사용
- Follow 기능을 이용해서 팔로워들만 1:1채팅 구현.
- Socket.io를 이용한 채팅 구현.
- 찜하기 기능 구현.
- React와 서버 연결시 Axios와 Context API를 사용.
- AWS EC2에 서버 배포.
프로젝트 중간점검
(10/17~18)
- MongoDB이용와 서버연결
: 환경변수(.env)를 이용해서 mongoDB연결
- 회원가입, 로그인 CRUD 완성
- bcryptjs이용하여 비밀번호 암호화
- JWT를 cookie-parser를 이용하여 구현
: utils 폴더를 만들어서 verifyToken.js파일을 따로 관리
(10/19 ~ 21)
- 게시판, 댓글 CRUD
: 게시판 작성, 수정, 삭제
댓글 작성, 삭제
MongoDB의 user table의 objectId를 이용해서 게시글 구현
- 회원가입, 로그인 프론트 완성
(10/22 ~ 26)
- Socket.io를 이용하여 채팅기능 활성화
: 1:1 채팅이 가능하도록 구현.(room기능 사용하지 않음)
follow해야 채팅이 되도록 controller 구조짜기
- 회원가입, 로그인시 중복확인 프론트 구현
- 게시판 프론트 구현
- Nodemailer를 이용해서 비밀번호 재설정
: 인증번호 함수를 짜고 프론트에서 인증번호와 매치시 비밀번호를 재설정하도록 구현
- 회원가입, 로그인 프론트와 연결시 발생한 오류사항 수정
- 아임포트를 이용한 결제모듈 완성
: 공동구매하기를 클릭하면 카카오 페이창으로 넘어감
- 참여하기 버튼을 누르고 결제 진행하면, 참여한 사람수가 올라가도록 구현
(10/27 ~ 29)
- Socket.io완성
: follow한 사람과 채팅이 가능하도록 연결
- 찜하기 기능 완성
- 게시판, 댓글 프론트와 연결시 발생한 오류사항 수정
- 대부분의 프론트 구현
: header와 footer까지
(10/30 ~ 11/1)
- AWS 서버연결
- 서버 연결시 발생하는 오류들 수정
: 소켓서버를 따로 썼는데, 그게 연결이 안됐던 문제를 서버 연결로 해결
게시판과 댓글이 작성이 안되는 일시적인 오류가 생겼으나 알수없는 이유로 해결
아임포트 결제가 서버 연결후 아직도 진행되지않음. 따라서 공동구매 참여한 인원이 아직도 올라가지 않음. → 수정중
팔로잉기능과 찜하기 기능이 잘 구현되지 않음. → 수정중
(11/2)
- 발표 및 시연
: 팀원들이 만들어준 ppt를 이용하여 발표를 맡아 발표, 시연.
기술위주로 잘설명하는 발표를 하여 좋은 피드백을 받음.
획기적인 아이디어나 기술은 없었지만 기획이나 기술구현의 완성도가 높았다, 는 피드백을 받음
프로젝트 데모 : http://43.200.171.56:3000/
잘했던 점 (저번에 비해 보완한 점)
- 저번에 CRUD를 혼자 하지못한게 마음에 걸렸는데 이번에는 우리조에서 사용한 회원가입, 로그인, 게시판, 댓글의 CRUD 혼자 구현했다.
- MySQL이아닌 MongoDB로 구현한부분이 좋았다. 새로운 데이터베이스를 더 빨리 배워 나갈 수 있었다.
- 좋은 팀원들을 만나서 기획단계때 Notion으로 정리된 문서를 받을 수 있어서 좋았다. ( https://hamayj.notion.site/1-a-fruit-a-day-2-b2d5764cb3e549c7a1b1325081f20202 :기획시 사용했던 notion. 팀원분이 작성해주셨다. 너무 깔끔하고 좋아서 초반에 뭘로할까 듣다가 다들 이걸로 하기로 바로 선택했다.)
- 저번에는 발표했을때 두루뭉술하게 했는데 이번발표때는 기술적으로 설명한 부분이 많아서 만족스러웠다.
- ContextAPI를 사용하여 소통해서 좋았다. 물론 user정보에만 한정적으로 사용했지만 좋은 경험을 했다.
- 팀원들과의 의사소통이 너무 잘이루어져서 좋았다. 저번 팀원들도 정말좋았는데 이번팀원들도 좋았다. 다들 자신의 의견을 말하고 남의 의견이 좋으면 왜 좋은지, 혹은 거기서 뭔가를 더 보완하면 좋을지에대해서 말해서 좋았다.
- 다들 깃사용이 능숙해서 git merge시에 충돌이 2번났다.
부족했던 점
- 회원가입, 로그인, 게시판, 댓글의 모든 CRUD 를 혼자 다 구현하였지만, 프론트와 연결했을때 오류가 너무많이나서 고치느라 시간을 많이썼다.
- 수정시 빠른 수정을 못해줘서 아쉬웠다. 이번에는 다른 학생에게 물어보면서 하기보다는 유튜브를 많이 참고했는데, 거기서 오류가 나니까 내 스스로 빠르게 생각해서 코드를 바꿔주지 못했던 점이 아쉬웠다.
- React와 같이 연결할때 내가 모르는 부분들이 많아서 서버 오류가 뜨면 바로 파악하지 못했던점, 그리고 바로 수정을 못했던 점들이 아쉬웠다.
그리고 프론트엔드분들에게 의사소통시 두루뭉술하게 전달해서 아쉬웠다. react를 더 공부해야겠다는 생각을 했다. - Node.js로 할 수 있는 것들을 더 찾아서 공부해야겠다. 계속 비슷한것만 사용하는거같다.
마치며
이번 프로젝트는 쉬운듯하면서 어려웠다. 서버는 빠르게 만들어졌으나 프론트와 연결시 많은 오류들이 발생했고, 내가 그걸 빠르게 파악하고, 수정하지못해서 답답했다. 정말로 React를 더 공부해야겠다고 느꼈다. 서버개발자가 서버만 하면되지, 라는 좁은 시야를 반성했다.
기술블로그를 프로젝트한다고 많이 쉬었는데, 이제 또 열심히 해야겠다.
취업을 해야하는 시기가 다가오는 만큼 더 탄탄하게 실력을 쌓아야겠다는 생각을 정말많이했다.
다음에 프로젝트를 또할지는 모르겠지만 그때엔 정말 유튜브도 참고하지않고 내 스스로 해낼 수 있도록 공부하려고한다.
그리고 얼른 도메인을 사서 나만의 주소를 사용해야겠다.