정신없던 프로젝트1(OpenSea Clone Coding)이 끝이 난 후, 제대로 환기할 시간도 없이 월요일부터 프로젝트2가 시작이 되었다.
다행히 어느 정도의 여유는 있었다. 프로젝트1은 2명의 인원으로 4일동안 모든 기능을 구현해야 했고, 이번 프로젝트2는 요구하는 과제의 퀄리티는 더 높지만 4명의 인원으로 11일이 주어졌기 때문이다.
💡 블로깅 인증을 통한 토큰 보상 서비스 오늘의 로그 OLOG
ERC-20 토큰과, NFT 를 이용해 토큰 이코노미 형태의 커뮤니티 서비스를 구축하는 것이 과제였다. 기본적으로 구현해야 할 기능은 커뮤니티 기능(포스트 게시, 댓글 등), 회원가입 및 로그인, ERC20 토큰 주고 받기, NFT 토큰 주고받기 등이 있었다.
우리는 이 기본 기능에 서비스 컨셉을 녹이기로 했다. 클론 코딩을 해야했던 지난 프로젝트와 달리, 이번 프로젝트는 기획의 영역이 커진 것이다.
나는 기본적으로 구현해야 할 기능들을 처음에 봤을 때, 바로 ‘스팀잇’과 ‘스테픈’이 생각났다. 과제를 내준 측에서 요구했던 것은 ‘스팀잇’에 가까웠을 텐데, 다소 식상하게 느껴졌다.
나는 최근에 NFT계에서 핫했던 (지금은 아니지만) 스테픈의 컨셉을 적용해보고 싶었다. 토큰과 NFT와 커뮤니티 세 가지 요소를 다양하게 구성할 수 있는 서비스가 나올 것이라고 생각했기 때문이다. (스테픈 컨셉: 걸음 수에 따라 토큰 채굴, NFT(신발) 구매 시 채굴할 수 있는 토큰 수 강화, NFT는 토큰으로 구매) 팀원들에게 이 컨셉을 설명해주었고, 팀원들 또한 동의를 해주었다.
구조는 스테픈 구조에, 컨셉은 주니어 개발자와 뗄레야 뗄 수 없는, ‘블로깅'이라는 흥미로운 컨셉을 다른 팀원분들께서 제안해주셨다.
그렇게 우리는 블로깅을 한 후 링크를 제출하면 토큰으로 보상을 해주고, 토큰으로 만년필 NFT 구매 시 보상을 강화해주는, ‘O-Log(오늘의 로그)’서비스를 기획하게 되었다.
블로깅 인증 : 링크만 업로드 해도 이미지, 제목, 파비콘까지 렌더링 해준다. Open graph scraper 모듈을 활용했다. 포스팅 업로드 후 5OLG가 보상으로 주어진다.
토큰 sync 기능: 블로그 링크를 업로드할 때마다 토큰을 부여해준다면 온체인에 과열이 생긴다. 이를 방지하기 위해 DB에만 토큰 보상 내용을 저장해두었다가 사용자가 ‘sync’버튼 클릭 시 온체인상에서 그동안 모아둔 토큰만큼 민팅을 해주는 방법을 썼다.
댓글 기능: 서비스에 좀 더 interactive한 요소를 주기 위해 다른 사용자와 소통하는 기능을 넣어주고 싶었다. 그게 바로 댓글 기능이고, 타 사용자의 mypage에다 댓글을 남길 수 있도록 하였다.
첫 날 2시간이 넘게 회의를 하며 대략적인 기획이 완성되었다. 기본 기능인 블로그 링크 업로드, ERC-20 토큰 보상 기능까지 완료하는 게 첫 번째 주 미션이였다.
두 번째 주부터는 NFT 마켓플레이스 기능을 구체화했고, 댓글 기능도 추가하였다.
이번에는 CSS 요소를 생각하지 않고 figma로 대략적인 위치만 잡고 CSS는 프론트분들이 임의로 해주셨다.
figma로 다같이 전체 서비스 구조를 보는 것은 커뮤니케이션 과정에서 매우 필요했다.
- 프론트 2명
- 백엔드 1명 (포스트, 로그인, 댓글 등의 기본 API 구현)
- 백엔드 1명 (스마트 컨트랙트, NFT 관련 API 구현)
4명 중 2명은 프론트, 2명은 백엔드를 맡기로 했다. 다행히 2명이 프론트를 원했고, 2명이 백엔드를 원했다. 1분 만에 역할 분담이 끝났다.
내가 맡게 된 역할: 2번 백엔드
백엔드를 늘 두려워만 했었는데, 최근에 ‘리액트를 다루는 기술’을 참고하며 블로그를 구축하는 실습을 진행하며 Koa와 MongoDB를 접하게 되었다. 기존에 부트캠프에서도 Express와 Mysql을 배우긴 했지만, 정말 이해가 되지 않았는데(오히려 두려움만 증폭됐다;)
실제 서비스를 만들어 보면서 적용해보니 과거에 배웠던 것들이 조각이 맞춰지면서 백엔드 세계의 맛을 보게 되었다. 이해도++ 흥미++ 자신감++이 되었다. 물론 리액트책에서 배운 백엔드가 진짜 백엔드냐?라는 반박이 있을 수 있겠지만, 내 뇌에 백엔드라는 영역이 명확해진 이 순간이, 이 과정이 너무나도 소중했고, 가치가 있었다. 이를 발판 삼아 이번 프로젝트에서 백엔드를 더 공부해보고자 주저하지 않고 백엔드를 지원하였다.
프로젝트가 끝난 지금, 백엔드 구현을 큰 무리없이 재미있게 진행했기에, 나의 도전에 큰 만족을 얻었다. 하지만 고민은 더 커진 것 같다. 내 커리어를 백엔드로 가야 할지, 프론트로 가야 할지 말이다. 둘 다 저마다 매력이 있음을 깨달았기 때문에 선택이 더 어려워진 것 같다.
“완벽한 팀워크는 유니콘과도 같다.”
과거의 나는 완전무결한 협업을 꿈꿨다. 팀 구성원 간 충돌이 없어야 하고, 커뮤니케이션도 활발해야 하고, 팀원 간의 분위기가 좋아야 한다. 적어도 내가 팀장일 때는 더더욱 그래야 했다. 나는 내 특유의 아이스브레이킹 능력, 상대방의 성격과 스타일에 맞춰 나 자신을 바꾸는 능력에 능하다고 생각했기 때문에 어떤 조직이든 어떤 사람이든 다 완벽한 협업을 할 수 있을 것이라고 생각했다.
하지만 그 믿음은 반복되는 팀 프로젝트를 겪으면서 깨졌던 것 같다. 어떻게 항상 완벽한 팀워크가 있을까. 이제 그런 환상을 버리고, 최소한 나로 인해 팀에 부정적인 영향을 주지 않도록 힘을 써야겠다고 생각했다.
이번 팀 프로젝트도 마찬가지였다. 우리 팀의 협업 방식은 다소 사무적이고 딱딱했다. 100% 만족스러운 커뮤니케이션 방식은 아니었지만, 다른 팀들의 결과물과 비교해봤을 때 우리 팀의 협업이 그나마 최고의 수준이었던 거 같다.
“실력이 다가 아니다. 같이 일하고 싶은 사람이 되어야 한다.”
다양한 분들을 만나고, 다른 팀들은 어떻게 했는지 들으면서 개발 실력이 아무리 좋아도 같이 일하기 싫은 사람만큼 매력 없는 사람이 없다는 생각이 들었다. 나는 같이 일하고 싶은 사람이 되고 싶다. 물론 실력도 중요하지만, 혼자서 살 수는 없는 세상, 협업 능력이 개발자로서 최고의 덕목이 아닐까 싶다.
이제 돌아오는 월요일부터 새로운 프로젝트가 시작된다. 팀장을 원하는 사람들이 아이템과 함께 발표를 진행한다. 나는 팀장이 될 것이다. 팀장이 된다는 것. 그것도 이 코스에서 가장 중요한 프로젝트3의 팀장이 된다는 것은 너무나도 긴장되는 일이다. 프론트, 백엔드 도전을 넘어서 더 어려운 도전이 될 듯 하다. 다음주도 파이팅이다.
아이디어가 신박하네요 💡