올 초부터 본격적으로 웹개발 공부를 시작한 후 처음으로 참여한 해커톤이었다.
사실 Web2에 대해서도 아직 모르는 부분이 많은데 첫 해커톤이 Web3 해커톤이었다.
Web3는 학교 내 블록체인 학회 활동(무려 1기 멤버)을 하게 되면서 처음으로 공부하게 되었다.
나를 포함한 대부분의 학회원들이 블록체인 입문자이지만,
학회원들끼리 일단 도전해보자하고 입문자 6명들끼리 모여 기획자나 디자이너도 없이 다소 무모하게 참가했다.
하지만 결과적으로 본선에도 진출하게 되었고, 과정도 매우 재밌었다.
우리팀은 해커톤 일주일전부터 본격적인 준비를 시작했다.
팀원들이 모두 개발자 Role이지만 학회장님과 여러 현직자 분들의 피드백을 받으며 함께 머리를 싸매고 기획을 했다. 팀원들 모두 컴퓨터공학 주전공이거나 소프트웨어 복수전공생들이었는데 다들 기획, 디자인 능력이 뒤쳐진다고 생각되지 않았다.
(계속해서 느끼지만 개발자라고 해서 개발만 하면 안되고 함께 서비스를 기획해나가는 능력도 중요해지는 요즘인 것 같다)
SWF 2023 해커톤의 대주제는 '사람과 기술'이었고 소주제는 3가지였다. 소주제 중 하나는 선공개 되었는데 '약자와의 동행'이었다.
우리는 선공개된 소주제를 바탕으로 미리 대략적인 서비스 기획 틀을 잡기 시작했다. (3번이상 뒤엎은건 안비밀...) 우리가 기획을 하며 중요시한 건 Why Blockchain?이었다. "웹2로 충분히 구현 가능하다면, 굳이 웹3로 구현해야할 필요가 있나? 이용자들도 지갑 생성 등 번거로운 과정이 없는 웹2를 더 선호하지 않을까?"와 같은 생각이었다. 즉 웹3로 구현을 한 데에는 납득할만한 이유가 필요했다.
우리팀의 주제를 대략설명하자면 암호화폐 기반 기부 서비스 "기부런"이었다. (서울시에서 개최하는 대회임을 감안해 "서울런"에서 따온 것이었지만, 막상 직접 가보니 심사위원들 중 공직에 계신 분은 없었던 걸로 기억한다...)
"암호화폐를 갖고 있는 사람은 많은데, 그것으로 기부가 이루어지는 플랫폼은 없다. 또한 암호화폐 기반으로 기부가 이루어지면 투명성을 보장할 수 있다."라는 생각에서 나온 주제였다.
기능은 대략 다음과 같다.
사실 처음부터 암호화폐 기반 기부를 생각한 것은 아니다. 처음에는 보통의 기부 플랫폼들처럼 현금(예금) 기부를 생각했으나, 이러한 경우 투명성을 블록체인을 이용해 어떻게 증명할 것이냐가 문제였다.
여기서 오라클이라는 개념이 언급되기도 했다. (오라클은 블록체인 외부에 있는 데이터를 블록체인 안으로 가져오는 미들웨어)
그러나 우리는 Web3 병아리라 이것을 어떻게 구현하느냐와 오라클의 신뢰 문제 등등 복잡해지면서 현금 기부 아이디어는 무산되었다..
다시 암호화폐 기반 기부 아이디어로 돌아왔을 때, 이 암호화폐를 약자들에게 어떻게 전달할 것이냐하는 문제가 대두되었다. 대략 나왔던 의견은 다음과 같다.
그러나 이 의견들에도 각각의 문제점이 있었다.
이외에도 "암호화폐를 갖고 있지 않은 사람들의 경우, 굳이 복잡한 블록체인 지갑 형성 과정을 거쳐 암호화폐로 기부를 할까?" 하는 문제도 대두되었다.
이러한 쟁점들을 그대로 남겨둔 채로 우리는 해커톤에 가게 되었다...
대부분의 팀원들이 피그마 사용이 처음이었기 때문에 내가 먼저 피그마 협업 공간을 만들어 대략적인 틀을 제시했다. 그 후 팀원들 모두 참여하여 메인 색상을 선정하고 페이지 화면을 구상했다.
나를 제외한 모든 팀원들이 git을 통한 협업, React를 통한 프론트엔드 개발 모두 처음이었다.
그래서 해커톤 당일날부터 프로덕트 구축을 시작하는 것은 무리였기에 일주일전부터 빡세게 준비를 시작했다.
나는 git과 react를 이용해 프로젝트를 해본 경험이 있고 해오고 있었기 때문에, 팀원들이 막힐 때마다 알려주는 역할을 했다. 내가 먼저 리액트 프로젝트와 디렉토리를 구성하여 깃허브에 올리고, 팀원들이 이 위에 연습을 하는 식으로 준비했다.
컨트랙트 개발은 몇달전 학회 세션에서 Remix IDE를 이용해 Solidity 실습을 몇번 해본 것과 개인적으로 관련 강의를 보며 몇번 따라해본 것 제외하고는 해커톤을 위한 준비를 거의 하지 못했다..
7월31일부터 8월2일까지 동대문디자인플라자(DDP) A1에서 진행되었다.
식사, 간식, 라면 등이 무료로 제공되었고 밥은 꽤 푸짐하게 나오는 편이었다.
다만 머리를 감는 등의 샤워는 할 수 없고, 잠도 휴게실의 빈백에 쭈그려 자야하는 점은 힘들었다..
이외에도 여러 기업들의 부스에 가면 미니선풍기, 반팔티, 스티커 등을 받을 수 있었다! 여기서 LBank, 크로노스 같은 웹3 기업들을 처음 알게되었다.
기부를 받는 사람들은 결국엔 현금이 필요할 것이기 때문에, 코인->현금 과정에서의 매도를 누가 어떻게 하는지의 문제에 대해 계속해서 의논했다. 그렇게 해서 나온 의견은 기부 수혜자가 직접 암호화폐를 현금으로 매도하는 것이었다.
대신, 매도 전에 수혜자들이 블록체인 지갑의 이용법에 대한 교육을 이수해야한다는 점을 추가했다. 이를 "향후 중앙은행이 발행할 CBDC에 대한 적응에 도움이 될 수 있다.", "약자들이 디지털 환경에 적응할 수 있도록 도울 수 있다."와 같은 기대효과와 덧붙이기로 했다.
일주일 간의 준비를 통해 프론트엔드는 구상을 어느정도 해놓은 상태였기 때문에, 해커톤 당일에는 컨트랙트 개발에 집중하고 싶었다.
기부런에서 기부자에게 즉시 NFT를 민팅해주는 기능을 구상했었기 때문에 이 부분을 내가 맡아 개발하기로 했다.
해커톤 당일 개발 측면에서 고민하고 구현한 내용들은 2편에서 자세히 다뤄보려고 한다. (대단한 것은 전혀 없지만...)
결과적으로 이틀만에 처음해보는 NFT 민팅 기능을 구현하고 프론트엔드와 연결시키는데 성공했다.
한편 다른 팀원은 토큰발행 기능을 infura를 이용해 구현하였다.
8월 1일에서 2일로 넘어가는 날엔 예선 발표 준비로 모두 밤을 샜다.
다른 팀원들은 최종 기획을 바탕으로 기획서를 작성했다. Web3 업계의 특성상 영어가 많이 쓰이기 때문에 기획서는 한글, 영어 버전 모두 작성했다.
기획서의 목차는 크게 1. 프로젝트 소개, 2. 선행사례, 3. 차별점, 4. 기대효과로 구성했다.
사실 나도 기획서 작성에 참여하고 싶었으나 NFT 민팅 기능을 구축하기에도 바빴기 때문에 크게 관여하지 못한 점이 조금 아쉬웠다.
나는 최종적으로 구현한 NFT 발행 기능을 화면녹화하여 발표자에게 제공했다.
오전 7시 30분에 깃허브 주소와 기획서, 발표자료를 USB에 담아 최종 제출했다.
발표자를 맡은 학우와 다른 학우 1명은 발표 준비를 위해 다른 곳으로 갔다.
나와 나머지 팀원들은 함께 아침을 먹고, 발표를 준비하러 간 두 팀원들에게는 미안하지만 DDP 야외에서 쪽잠을 자게 되었다...
예선 발표는 오전 9시부터 진행되었던 걸로 기억하는데, 우리팀은 예상치못하게 가장 먼저 예선장에서 발표하게 되었다. 그렇게 발표자를 갑작스럽게 예선장으로 보내게 되었다..
5분 뒤에 발표자가 돌아왔다. 심사위원들이 생각보다 우리 주제에 대해 질문을 많이 하였다는 것이다. 좋은 신호라 생각했다.
예선을 마친뒤, 본선에 진출한 팀은 사전에 공지되지 않았다. 본선 발표 시간에 사회자가 팀 이름을 호명하면 그 팀이 나와 즉시 발표하는 식으로 긴장감있게 진행되었다. 소주제 별로 6팀 씩 본선에 진출하게 된다.
소주제 '약자와의 동행'의 발표가 시작되었다. 다른 팀들의 발표에 대해 심사위원들은 "이 프로젝트가 웹3일 필요가 있나요?"와 같은 Why Blockchain, Why Web3에 대한 질문도 했다. 역시 중요한 질문이라 생각했다.
우리팀은 중간 차례가 지나서도 호명되지 않았다. 그러다 5번째 본선 진출 팀의 발표 차례가 다가왔고, 우리팀 "2PO"가 호명되었다. 너무 깜짝 놀랐다. 다른 참가자들에 비하면 백지 상태에서 참가한 우리가 본선에 진출하다니...
발표자는 몇 백명 앞에서 우리의 주제에 대해 발표를 하게 되었다. 우리가 함께 고민한 주제를 드디어 여러 사람들 앞에서 소개하게 되는 자리였다. 발표를 맡은 학우는 침착하게 발표를 잘 해냈다. 뒤이어 심사위원들의 질문과 피드백이 이어졌다.
기억나는 질문은 '기부사업을 선정하는 것에는 결국 중개자가 개입해야하는 것이냐'하는 질문이었다. 이 부분에 있어서는 깊게 논의하지 못하기도 했고, 중개자 개입이 필요함을 인정하게 되었다.
피드백에서는 우리가 우려했던 바와 같이 "사람들이 굳이 블록체인 지갑까지 생성해서 기부를 하려할까?"와 같은 의견이 나왔다. Web3가 대중화가 되지 않는 가장 큰 걸림돌은 역시 지갑 생성 과정인 것 같다...
다른 팀들의 발표를 들으면서 많이 나온 키워드는 '영지식증명(ZK proof)'이었다. 나는 영지식증명이 "아무것도 없는 상태에서 개인의 신분을 증명하는 것"이라고 이론적으로만 알고 있었는데, 이 기술을 실제로 해커톤에 적용한 뛰어난 팀들이 많았다.
가장 인상깊었던 팀은 Mass Adoption 소주제에 참가한 NFC 기능을 이용해 트랜잭션 서명을 가능케한 팀이었다. 우리 일상에 스며들어있는 NFC 기능을 블록체인 지갑과 연결시킬 수 있다면 확실히 Web3 대중화에 기여할 수 있을 것이라 생각했다. 이 팀도 영지식증명 기술을 지갑의 authentication을 위해 사용했다.
영지식증명이 중요한 기술임을 알게 되었고, 앞으로 이에 대해 더 공부해봐야겠다.
이외에도 유동성풀 개념을 이용한 팀도 있었다.
첫 해커톤이 막을 내렸다.
우리 학회원들은 웹3와 블록체인에 입문한지 얼마안된 병아리들이고, 웹개발과 git 협업이 대부분 처음이었다. 그럼에도 불구하고 해커톤에서 본선진출(62팀 중 18팀이내)을 했다는 것은 너무너무 놀라운 결과였다. 부족하더라도 각자의 역할을 묵묵히 잘 해낸 결과인 것 같다.
그렇지만 후에 해커톤을 뒤돌아봤을 때 보완해야할 점들이 많이 보였다.
심사위원들이 모든 팀의 코드를 자세히 볼 수는 없을 것이라 생각한다. 그래서 커밋메시지를 통해 우리가 구현한 기술을 보여주는 게 중요하지 않을까 생각이 들었다. 해커톤을 마치고 우리가 제출한 깃허브의 커밋메시지를 봤을 때, 정확히 해당 커밋에서 무엇을 구현한 것인지 모호하다는 생각이 들었다.
실제 배포된 사이트를 발표할 때 보여주는게 확실히 플러스가 된다고 생각했다. 배포사이트를 구축한 팀들은 실제로 대상을 타거나 1등을 했다.
기획서의 내용을 리드미에도 반영을 하면 좋을 것 같다는 생각을 했다.
아직 우리 학회는 블록체인 기술과 컨트랙트 개발 측면에서 많이 부족하다고 생각한다. 이에 대해 더 깊이 공부한 후 구현을 해봤으면 한다.
기술적으로 구현을 완료하지 못했더라도 프레젠테이션 자료를 통해 기획한 내용을 잘 보여준다면 마이너스 되지 않을 것이라 생각했다.
프론트엔드 페이지는 핵심 페이지 정도만 구현하고, 컨트랙트 개발 중심으로 다같이 고민했으면 기술력 점수를 더 얻지 않았을까 싶다. 우리 학회는 해커톤에서 핵심 feature가 아닌 상세페이지에 치중한 점이 아쉬웠다. 만약 페이지를 많이 만들었다면 배포해서 보여주는 게 나을 것이라 생각한다.
eslint나 prettier로 코드스타일을 통일하고, 절대경로 설정 같은 것을 다음 프로젝트에서는 도입해봐야 겠다.
+ 얼마전 쟁글과 LG 사이언스파크가 주관하는 웹3 교육에 참여했는데 해커톤 행사장에서 해당 LG 담당자님을 만나게 되었다. 우리 학회에 대해 기억을 하시는 듯 했는데, 우리가 본선에 진출하는 바람에 더욱 눈도장을 찍게 되었다. 웹3를 더 열심히 공부하지 않으면 안되겠다는 생각이 들었다..!