BEB 프로젝트2 마무리

be kid·2022년 5월 2일
0

두 번째 프로젝트 기간 - 4월 19일 화요일 ~ 4월 29일 금요일 (주말 제외 9일)

이번 주제는 인센티브 기반 커뮤니티 만들기였다.
로그인, 글 작성, 댓글 달기 등 특정 커뮤니티 활동을 했을 때 토큰을 인센티브로 지급해주는 것이다. 이번 프로젝트에서는 서버를 아예 빼버리고 진행했던 지난 프로젝트와는 다르게 서버가 필요했다.

우선 팀원들과의 회의를 통해 전체적인 틀을 잡으며 구조화시켜보았다.

큰 흐름은 다음과 같다.

  • 로그인/회원가입을 통해 커뮤니티에 접속한다.
  • 회원가입을 할 때 자동으로 지갑이 생성되며 서버에서 관리한다.
  • 글 작성, 댓글 달기, 좋아요 누르기 등 커뮤니티 활동을 할 수 있다.
  • 게시물에 댓글이 5개 달리거나, 좋아요를 5개 받으면 게시물 작성자에게 토큰이 지급된다.

구현은 프론트는 ReactJS와 mui, 백은 NodeJS, ExpressJS를 사용하기로 하였고, 데이터베이스는 팀원들이 모두 사용해보지 않은 MongoDB를 사용해보기로 하였다. 컨트랙트 부분은 Solidity와 EthersJS가 사용되었다.

4명의 팀원을 프론트 1명, 서버 2명, 컨트랙트 1명으로 나누었고 나는 서버를 맡게 되었다. 그 중에서도 내가 구현한 api는 게시물 작성 및 수정, 댓글 작성 및 삭제, 좋아요 기능, 메인 페이지(전체 게시물 표시)였다.

  • 게시물 작성 (POST)
  • 게시물 수정 (PUT)
  • 댓글 작성 (POST)
  • 댓글 삭제 (DELETE)
  • 좋아요 (POST)
  • 메인 페이지 (GET)

이 부분들은 처음 구현할 때는 컨트랙트와는 바로 연관이 있지는 않아서 큰 어려움 없이 구현할 수 있었다. 다른 팀원분이 회원가입, 로그인, 로그아웃, 프로필 및 수정 등 api를 구현하고 전반적인 구현이 완료되었을 때 프론트를 맡은 분과 함께 테스트해보며 오류를 발견하고 수정하는 과정을 거쳤다.

지난 프로젝트 때도 팀원들과 꾸준히 소통하며 구현을 해서 큰 문제 없이 잘 진행됐었는데 이번에는 더 소통이 잘 되었다. 모두가 열심히 해서 거의 하루 종일 줌에서 모여 끊임 없이 소통하며 기능들을 구현하였고 그래서 속도도 빨랐고 안정적으로 잘 진행된 것 같다.

일반적인 기능들이 완성되고서는 컨트랙트와 연결해 댓글 5개, 좋아요 5개마다 토큰을 지급할 수 있도록하는 기능도 구현하며 우리 팀의 1차 목표에 점점 다가갔다. 주말을 제외하고 9일이 주어졌는데 우리는 6일만에 1차 목표를 달성하고 프로젝트를 더 업그레이드해보기로 하였다.

남은 시간은 3일. 바꿔보고자 했던 내용은 게시물을 nft화 해서 추가로 저장하는 것과 토큰을 일정 비율 또는 일정 개수 이상 보유하게 되면 관리자 권한을 부여해 투표 안건을 올리거나 투표에 참여할 수 있도록 하는 기능이었다.

모두 정리하면 위 사진과 같다. 팀원들이 작업하며 참고하기 위해 점차 채워져간 마인드맵이다.

여기부터는 팀장님이 화면을 공유해놓고 모두 함께 클라이언트, 서버, 컨트랙트를 골고루 공부하며 집단 지성을 발휘하면서 구현해나갔다. 이때가 특히 더 재미있었다. 잘 몰랐거나 애매하게 알고있던 부분들을 다른 팀원분들이 해결해나가는 모습을 보며 알게 되기도 하고 내가 찾은 자료가 도움이 되어 문제를 해결하기도 하면서 2차 목표도 시간 안에 달성할 수 있었다. 아마 혼자 구현하려 했다면 몇날며칠이 걸렸을지 상상도 안된다.

  • 회원가입
  • 로그인
  • 로그아웃
  • 회원정보수정
  • 토큰보상
  • 검색
  • 투표안건올리기
  • 투표하기

정리해보면,

  • 회원가입을 하면 서버에서 자동으로 사용자의 지갑을 생성해준다. 지갑에 대해 알지 못해도 커뮤니티의 이용이 가능하다.
  • jwt 토큰을 쿠키를 통해 주고 받으며 로그인 유지와 사용자 인증을 한다.
  • 토큰으로 인증이 된 사용자는 포스팅, 댓글, 좋아요, 프로필 등의 기능 사용이 가능하다.
  • 커뮤니티 활동을 하면 활동에 맞게 일정 시간마다 토큰을 자동으로 지급해준다.
  • 토큰을 일정량 보유하게 되면 관리자 권한도 부여받는다.
  • 관리자 권한이 있는 사용자는 투표를 위한 안건을 올리거나 투표에 참여할 수 있다.
  • 안건이 만장일치로 표를 받으면 통과가 된다.

이번 프로젝트는 이것저것 공부가 많이 된 것 같다. 클라이언트와 서버, 데이터베이스, 컨트랙트를 각각 어떤 상황에서 사용하고 서로 어떻게 연결하며, 소통해야할지 조금 더 선명해진 느낌이다. ERC20과 ERC721을 동시에 한 프로젝트에 적용하는 것도 경험해보았고 마냥 어렵게만 느껴졌던 스마트 컨트랙트도 아주 조금은 익숙해진 기분이다. 특히 많이 고생했던 버전관리 부분에서 생각이 많아졌다. 무턱대고 인스톨한다고 될게 아니라 호환성도 신경써야하고 배포할 때의 상황까지 고려해서 신중하게 결정해야할 것 같다.

최근에 타입스크립트를 공부해야겠다는 생각이 들어 이어지는 마지막 프로젝트까지 완료되면 앞서 진행했던 프로젝트를 포함해 타입스크립트로 리팩토링해볼까 고민 중이다. 물론 웬만해서는 할 예정이고 새프로젝트도 해볼 계획이다. 의욕 넘치는 5월이 될 것 같다.

profile
개쩌는 개발자가 되고 싶다 !

0개의 댓글