Labeler NearBy 구축

Table of Contents

나의 첫 해커톤

2022년 여름 후반부 동안, 저는 정말 흥미로운 프로젝트에 참여하고 싶었습니다. 학부를 막 졸업했고 소프트웨어 엔지니어로 풀타임으로 일하고 있었습니다. 부업 프로젝트에 전념하고 싶었고, 당시에는 그럴 만한 여유 시간이 충분히 있었습니다. 무엇을 해야 할지 정말 몰랐는데, 2022년 8월에 데브포스트라는 웹사이트를 발견했습니다. 데브포스트는 해커톤이라는 소프트웨어 경진대회를 주최하는 웹사이트입니다. 데브포스트를 둘러보던 중, NEAR MetaBUILD III 해커톤이라는 해커톤을 발견했는데, 이는 NEAR 프로토콜 조직에서 주최한 해커톤이었습니다.

NEAR란 무엇인가?

NEAR 프로토콜은 스마트 컨트랙트와 NEAR 암호화폐를 지원하는 블록체인입니다. 주로 매우 낮은 트랜잭션 수수료, 스마트 컨트랙트 지원, 자체 공식 테스트 네트워크 보유, 그리고 Rust 및/또는 JavaScript로 스마트 컨트랙트를 작성할 수 있다는 점 때문에 훌륭한 개발자 환경으로 알려져 있습니다. CoinGecko의 훌륭한 동영상을 통해 NEAR 프로토콜에 대해 더 잘 이해할 수 있습니다:

이 시기에 코인베이스는 공식적으로 플랫폼에서 NEAR 프로토콜을 거래 가능한 코인으로 지원하기 시작했습니다. 코인베이스가 어떤 코인을 플랫폼에서 지원할지 매우 엄격하게 고르는 것으로 알려져 있기 때문에 이는 큰 사건이었습니다. 이는 NEAR를 더 신뢰할 수 있는 플랫폼으로 만드는 데 도움이 되었습니다. 오늘날에도 Coinbase에서 NEAR를 거래할 수 있습니다.

왜 참여했나?

어떤 생각을 해본 끝에, 저는 NEAR MetaBUILD III 해커톤에 참여하기로 결정했습니다. 제 이유는 다음과 같습니다:

  • 암호화폐(크립토)는 사라지지 않을 것이며 지속될 기술입니다. 따라서 이 기술을 배우는 데 시간을 투자하는 것이 타당했습니다.
  • 해커톤의 보상이 훌륭했으며, 수상자 중 하나가 되면 NEAR로 $20,000에서 $100,000 사이의 보상을 받을 수 있었습니다.
  • 해커톤은 명확한 마감일이 있어, 많은 부업 프로젝트들처럼 몇 달 동안 끌어질 수 없었습니다.
  • 이 프로젝트는 훌륭한 학습 경험이자 해커톤에 대한 좋은 입문이 될 것이었습니다.
  • 최악의 경우에도, 해커톤 참가를 통해 이력서에 올릴 수 있는 훌륭한 프로젝트를 만들 수 있었습니다.

이 모든 점을 고려하여, 저는 2022년 8월 26일에 대학 때 가까웠던 친구에게 전화를 걸었고 우리는 이 해커톤을 위해 계획을 세우기 시작했습니다. 해커톤은 2023년 9월 23일에 시작하여 2022년 11월 21일에 종료될 예정이었습니다. 다만 해커톤 막바지에 마감일이 2023년 11월 24일로 연장되었습니다. 우리는 한 달 일찍 준비를 시작했기 때문에, 이 기간을 학습하고 무엇을 할지 브레인스토밍하는 데 쓰기로 결정했습니다. 그 첫 달 동안 우리는 암호화폐와 블록체인에 대한 전반적인 개요를 익혔고, NEAR의 테스트넷을 검토 및 실습했으며, NEAR SDK를 살펴보고 몇 개의 스마트 컨트랙트를 배포해 보았습니다.

아이디어

블록체인과 NEAR에 대한 훌륭한 소개를 받은 후, 우리는 아이디어를 브레인스토밍하기 시작했습니다. 저는 이 프로젝트가 단순한 “해커톤 프로젝트"가 아니라 다른 사람들이 사용할 수 있는 제품이 되면서, 암호화폐가 단순한 거래 외의 용도로도 유용할 수 있음을 보여주는 예제가 되기를 원했습니다.

이런 생각으로, 처음에는 언리얼 엔진의 블루프린트(언리얼 블루프린트)와 유사하지만 코딩 없이 NEAR 블록체인에서 스마트 컨트랙트를 쉽게 생성하고 배포할 수 있는 도구를 만들기로 했습니다. 그러나 해커톤 시작 일주일 전에 우리는 이 아이디어를 포기했습니다. 단순히 그 아이디어는 말이 되지 않았기 때문입니다. 실용적인 사용 사례가 아직 없다면 누가 우리의 도구를 사용해 NEAR 스마트 컨트랙트를 만들겠습니까? 이는 많은 사람이 필요로 하지 않는 도구를 개발하는 것과 같았습니다.

해커톤 시작 한 주만 남았을 때, 우리는 다시 브레인스토밍을 시작했고 다음 아이디어로 결정했습니다:

A decentralized platform where AI researchers can outsource
data labeling to labelers around the world

우리는 프로젝트 이름을 “Labeler NearBy"라고 지었습니다. 이 아이디어를 선택한 이유는 다음과 같습니다:

  • AI 개발은 학습을 위한 데이터의 사람 손 라벨링을 필요로 합니다.
  • 특정 데이터셋에 대해 숙련된 라벨러를 찾고 관리하는 것은 어렵습니다.
  • 이 아이디어는 이미 Scale AI라는 회사에 의해 성공적으로 구현되었고, 그들이 제품-시장 적합성을 찾은 방법으로 입증되었습니다.
  • Scale AI와 같은 중앙화된 서비스는 조직이 라벨링 회사에 데이터를 보내야 하는 문제를 야기합니다. 라벨링 회사는 전 세계의 사람 라벨러들에게 외주를 주고 라벨링이 끝난 후 라벨된 데이터를 조직에 반환합니다. 이는 귀중한 학습 데이터를 라벨링 회사가 통제하게 만들며, 라벨링 회사가 그 데이터를 사용해 자체 모델을 학습시킬 가능성을 남깁니다. 이 서비스를 분산화하는 것이 합리적인 해결책으로 보였습니다.
  • 분산형 앱(dApp) 공간에서 이 아이디어를 다루는 프로젝트를 거의 찾지 못했기 때문에, 우리가 이 분야에서 혁신하고 선도할 기회가 있었습니다.

복잡성을 줄이기 위해, Labeler NearBy는 당분간 이미지 데이터만 지원하기로 결정했습니다.

제출

아이디어를 정하고 해커톤이 공식적으로 시작되자, 제 친구와 저는 Labeler NearBy를 개발하기 시작했습니다. 우리는 2개월 동안 프로젝트에 매진했고 2022년 11월 24일에 최종 초안을 데브포스트에 제출했습니다. 데브포스트에 프로젝트를 제출했으며 제출 사본을 GitHub에도 작성했습니다. 이 블로그는 Labeler NearBy의 모든 기술적 측면과 개발 과정을 다루지는 않습니다. 이를 염두에 두고, Labeler NearBy가 어떻게 작동하는지 더 배우거나 우리의 최종 제출을 보려면 다음 링크 중 하나를 방문하세요:

Labeler NearBy는 ln-researcher와 ln-labeler의 두 코드베이스로 구성되어 있습니다. 이 코드베이스들은 MIT 라이선스 하에 완전히 오픈 소스이며 다음 링크에서 볼 수 있습니다:

다음은 Labeler NearBy(LN)가 어떻게 동작하는지에 대한 일반적인 개요입니다:

연구자는 자신의 AI 모델 학습을 위해 라벨된 이미지가 필요합니다. 이를 위해 연구자는 데이터를 호스팅하고 라벨러들이 데이터를 라벨링할 수 있도록 LN을 이용합니다. 이는 API, 연구자의 스마트 컨트랙트, 그리고 로컬 Postgres 데이터베이스로 구성된 자체 호스팅 웹 서비스인 ln-researcher를 통해 이루어집니다. 라벨러를 위해 웹 프론트엔드가 제공되어 그들이 연구자의 이미지를 접근하고 라벨링할 수 있도록 합니다. 라벨링 과정에서 하나의 이미지는 서로 다른 라벨러 세 명에 의해 라벨링됩니다. 투표 시스템을 통해 가장 우수한 라벨을 제공한 라벨러에게만 NEAR 코인이 보상으로 지급됩니다. 이 과정을 담당하는 웹 앱은 ln-labeler라고 불립니다. 연구자는 각 라벨링 작업에 자금을 제공하며 NEAR 코인은 코인베이스를 통해 쉽게 달러로 전환할 수 있습니다. 모든 거래 물류는 NEAR 프로토콜 블록체인에 호스팅된 스마트 컨트랙트에 의해 처리됩니다.

해커톤을 위한 Labeler NearBy의 데모 비디오는 여기에서 볼 수 있습니다:

가장 큰 성과

제가 구현한 것 중 가장 자랑스러운 기능은 getImage()라는 함수입니다. 이 함수는 ln-researcher의 API 엔드포인트로 동작하며, Labeler NearBy(LN)에서 연구자와 라벨러 간 데이터 파이프라인에서 중요한 역할을 합니다.

이 API 엔드포인트는 연구자가 자신의 이미지를 안전하고 신뢰성 있게 라벨러에게 배포할 수 있도록 합니다. 라벨링 할당은 NEAR 프로토콜 블록체인의 NEAR 스마트 컨트랙트를 통해 관리되며, 이미지 데이터는 ln-researcher를 통해 연구자가 호스팅합니다.

이 엔드포인트는 할당된 라벨러만 이미지에 접근할 수 있도록 일련의 보안 검사를 수행합니다. 여기에는 요청의 서명 검증 및 관련 스마트 컨트랙트를 확인하여 작업의 존재 여부와 요청한 라벨러에게 할당되었는지를 확인하는 과정이 포함됩니다.

연구자의 자체 호스팅 ln-researcher API에서 요청이 검증되면, 함수는 로컬 Postgres 데이터베이스에서 이미지를 검색하고 이미지를 암호화한 뒤 권한이 있는 라벨러에게 전달합니다. 라벨러는 이미지를 복호화하여 라벨링할 수 있습니다. 동시에 이 함수는 데이터베이스에서 이미지의 상태를 업데이트하여 이미지가 라벨링되는 진행 상황을 표시합니다. 이 과정 전반에서 연구자와 라벨러의 RSA 키가 인증에 사용됩니다. 이미지 암호화에는 AES 암호화가 사용됩니다.

이 엔드포인트는 연구자에서 라벨러로의 이미지의 안전하고 통제된 배포를 관리하는 데 중요한 역할을 합니다. 이는 안전한 데이터 전송을 보장하고 이미지 라벨링 프로세스를 효과적으로 추적 및 관리합니다. 또한 이 프로세스는 적어도 이 엔드포인트에 관해서는 HTTPS 사용 필요성을 제거할 가능성을 가지고 있습니다.

이 특정 엔드포인트/함수는 테스트되었고 기능이 입증되었습니다. 아래는 앞서 언급한 엔드포인트/함수가 어떻게 작동하는지를 명확하게 보여주는, Labeler NearBy의 전체 기능을 설명하는 다이어그램입니다:

결과

안타깝게도 현실은 해커톤 마감일까지 이 프로젝트를 완전히 완성하지 못했다는 것입니다. 대부분의 프로젝트는 완료되었는데 ln-researcher와 같은 부분은 그렇지만 프론트엔드(ln-labeler)는 완료되지 않았고 라이브 데모를 배포하지 못했습니다. 백엔드(ln-researcher)는 기본적으로 완료되었지만, 제대로 작동하는 프론트엔드와 라이브 데모가 없었기 때문에 아무도 Labeler NearBy의 아이디어를 실제로 사용해볼 수 없었습니다. 게다가 심사위원들도 프로젝트를 직접 사용해보지 못하고 제출물을 읽거나 코드를 살펴보거나 스스로 실행해보아야 했습니다. 이 때문에 우리의 수상 가능성은 사실상 0%로 떨어졌습니다. 이 사실은 해커톤 수상자가 발표된 2022년 12월 15일에 확인되었고, 우리는 수상자 명단에 포함되지 않았습니다.

패배

이 해커톤의 최종 결과가 실망스러웠다는 사실을 숨기지 않겠습니다. 이 프로젝트에는 수개월이 투입되었고, 연구자들에게 매우 유용한 도구가 될 것이라는 큰 비전을 가지고 있었습니다.

제가 수행하는 프로젝트에는 분명한 기준이 있습니다: 성공하거나 실패하거나; 중간은 없습니다. 따라서 이 프로젝트는 마감일까지 완전히 완료되지 못했고 잠재 사용자들이 접근할 수 없었기 때문에 실패했습니다.

하지만 실패는 삶의 자연스러운 일부라는 점을 기억하는 것이 중요합니다. 우리의 성공은 실패에서 얻은 교훈 위에 세워집니다. 이 해커톤의 결과는 실망스러웠지만, 프로젝트/제품을 개발하고 구축하는 데 관해 여전히 귀중한 통찰을 제공했습니다.

배운 교훈

이 경험을 통해 얻은 주요 교훈은 다음과 같습니다:

  1. 우리가 선택한 프로젝트는 반복 개발을 하기 전에 사전에 많은 기능을 구축해야 했습니다. 이게 무슨 뜻이냐면, 이 프로젝트는 아이디어를 시험해보기 전에 아이디어의 거의 모든 구성 요소를 구축해야만 했다는 것입니다. 기능적으로 덜 필수적인 구성 요소가 있는 프로젝트를 선택하는 것이 더 합리적이었을 것입니다. 그렇게 했더라면 필수 구성 요소를 더 빨리 구축하고 더 빨리 프로젝트를 반복할 수 있었을 것입니다. 그렇게 하면 마감일을 더 쉽게 맞추고 더 단순하지만 더 완성된 프로젝트를 만들 수 있었을 것입니다. 기술 스타트업 액셀러레이터인 YC는 빠르게 출시하고, 사용자와 대화하고, 반복하라를 강조합니다. 우리는 이 해커톤 프로젝트에서 그 방법을 적용했어야 했습니다.
  2. 우리는 이 프로젝트를 구축하는 데 걸리는 시간을 과소평가했습니다. 이번이 우리의 첫 해커톤이자 최초로 분산형 애플리케이션(dapp)을 만드는 경험이었습니다. 게다가 저는 소프트웨어 엔지니어로 풀타임 근무 중이었고 제 친구는 석사 과정을 마무리하고 있었습니다. 그럼에도 불구하고 우리는 2개월이면 충분할 것이라고 생각했습니다. 프로젝트 범위를 줄이거나 작업량을 줄여줄 한 명의 팀원을 더 찾는 것이 더 합리적이었을 것입니다.
  3. 윈스턴 처칠은 유명하게 말했습니다: “완벽함은 진보의 적이다”. 저는 이 프로젝트를 기업-소비자(B2C)용 제품처럼 다루고 있었는데, 실제로 이것은 단지 해커톤 프로젝트였고 기껏해야 최소 요건 제품(MVP)에 불과했습니다. 그래서 초기에 핵심 기능을 충분히 작동하게 만드는 데 집중했어야 할 시간을 사소한 세부사항에 너무 많이 낭비했습니다.

이러한 귀중한 교훈들 외에도, 개인적인 사이드 프로젝트와 전문적인 노력 모두에 있어서 매우 유용한 새로운 기술들을 얻었습니다. 이 기술들은 다음과 같습니다:

  1. Node.js, JavaScript, 및 Express.js를 통한 API 개발
  2. 데이터 관리를 위한 PostgreSQL 설정 및 사용
  3. API 개발에 PostgreSQL을 통합하기 위해 PG와 같은 패키지를 사용
  4. 향상된 데이터 보안을 위해 RSA(비대칭 암호화)와 AES(대칭 암호화)를 활용

결론

전반적으로, 최종 결과에 실망했음에도 불구하고 이 해커톤에 참가한 것이 기쁩니다. 저는 Labeler NearBy에서 작업하면서 얻은 귀중한 교훈과 기술에 감사하고 있으며, 그것들은 저를 더 나은 개발자로 만들었고 다음 프로젝트인 Notify-Cyber 개발에 크게 기여했습니다.

기타 사항

  • 저는 Labeler NearBy로 돌아올 수도 있지만, 현재로서는 이 프로젝트가 “장기 휴지” 상태에 있습니다.
  • 현재 Labeler NearBy는 오직 NEAR의 테스트넷에서만 실행되어야 합니다. 추가 개발, 테스트 및 감사가 필요합니다.