2023 5th PATH-HACK 회고록

디아·2023년 8월 13일
0
post-thumbnail

시작

인스타 스토리를 휙휙 둘러보다가 우연히 하나의 대회 공고에 눈길이 쏠리게 되었었습니다. 메이커와 AI가 만난 메이커톤. 왜 임베디드 관련 해커톤은 없지? 라는 생각을 가지면서 대회 이곳저곳을 찔러보고 도전했던 경험들이 있었는데, 이 대회는 완전 메이커들을 위한 대회라고 딱 붙혀져있어서 굉장히 흥미로웠었습니다. 그래서 방학이기도 하니 가볍게 나가보자는 생각을 했어서 친구들을 모아 팀을 꾸린 뒤에 대회를 참여하게 되었습니다.

대회 준비

해커톤 참여 경험이 몇번 있었었는데, 그 당시 주제가 좋더라도 실력이 못따라가 제대로 못만들고 나가떨어지는 일이 많았었습니다. 그래서 응용이나 임베디드쪽에서 사용할 수 있는 기초 예제들(서버 통신 등)을 미리 만들어서 사용할 도구들을 몇개 준비해갔었습니다. 하루에 몇시간씩 투자하여 딥러닝을 실을 수 있는 기초 HTTP 통신을 만들고, 혹시 모를 Socket 통신도 미리 구현해뒀었습니다. ESP 예제들도 몇개 만들었었고요.

그리고 후원사를 살펴보며 어떤 것들을 지원해줄까에 대해서도 팀원들끼리 얘기를 해봤었습니다. 부품 제공, Cloud Credit 등등 대회 현장에서 제공해 줄 법한 것들을 미리 추론해보고, 어떻게 사용해볼까에 대해서도 얘기해봤었습니다.

추가로 저는 메이커 역할로 대회를 출전하게 되어, 현장에서 3D프린팅을 해야했기 때문에 Blender 기초 모델링 및 3D Printing에 대한 준비를 거쳤었습니다.

대회 당일

대회 장소는 부산대학교 근처에 있는 메이커스페이스였었습니다. 지도 거리뷰로 봤었을 때는 건물 상표가 잘 안보였어서 좀 의심했었는데, 시설 내부로 들어오니 상당히 깔끔하고 좋았었습니다. 무엇보다 뷰가... 고층에 있었어서 그런지 탁 트인 전망이 인상깊었었습니다.

들어가서 접수한 뒤 웰컴 키트라고 옷, 배지, 키링, 가방을 하나씩 주셨었습니다. 디자인이 예뻤어서 상당히 맘에 들었었습니다. 그렇게 대회 개최를 기다리고 있었는데, 저희 팀이 들어온 이후 갑자기 사람들이 엄청나게 몰려오기 시작했었습니다. 규모가 작은 대회 아니었나..? 싶었어서 다소 놀랐었습니다. 그렇게 다 들어오시고 보니 대학생처럼 보이는 분들과 나이가 있어보이는 디자이너, 기획자분들도 계셨었습니다. 저희만 고등학생 팀인거 같았어서 좀 위축되었었습니다. 하지만 동시에 이런 분들과 경쟁한다고 생각하니 기분이 벅차기도 했었습니다!

주최측의 간단한 소개를 마친 후, 후원사에서 어떤걸 제공해주나 소개해주셨는데, 저희의 예상대로 클라우드 크레딧, 기본적인 부품 및 장비 대여, 그리고 무려 젯슨 나노 보드까지 당일 지원해주셨었습니다. 메이커를 위한 걸 떠나서 이렇게 지원해주는 대회가 흔치 않았어서 상당히 만족스러웠습니다. 그리고 대회 주제를 소개해주셨는데, 각 스폰서에서 제공했던 3가지 대주제가 있었습니다.

  • 패스파인더 메이커스페이스
    • 메이커스페이스에서 운영할 수 있는 제품 및 서비스
    • 메이커스페이스에서 판매할 수 있는 상품
  • 수학사랑
    • 수학과 함께하는 AI
  • 3Dplus
    • 수해 재난 및 인명사고를 대비하는 제품 및 서비스

주제 선택

모든 소개가 끝나고 팀빌딩(혼자오신 분들끼리 팀을 맺기 위해)시간이 끝난 뒤, 곧바로 대회를 시작했습니다. 저희는 바로 주제 선정 단계를 거쳤었는데, 다음과 같은 아이디어들이 나왔었습니다.

  • 일상생활에 녹아든 수학을 카메라를 통해 잡아내고 알아보기
  • 수학적인 요소가 포함된 DIY 키트
  • 부품의 사용법을 빠르게 알아낼 수 있는 서비스
  • 해안가 사고 대비: 인명구출용 튜브를 빠르게 전달해줄 수 있는 장치

저를 제외한 다른 팀원들이 응용소프트웨어개발과다 보니 확실히 하드웨어 서비스에 잘 떠오르지 못했던 거 같습니다. 그나마 하드웨어가 포함된 네 번째 아이디어도 "수해"에 대응하는 장치와는 다르다보니 주제 적합성에서 멀어지는 듯 했었습니다.

그렇게 팀원들의 투표로 두 번째 아이디어, '수학적인 요소가 포함된 DIY 키트'를 선정했습니다. 그런데 여기서 한 가지 떠올린게, 직접 제작할 키트를 사용자가 직접 구상하고, 모델링과 소프트웨어 코드는 ChatGPT가 직접 만들어주면 어떨까? 라는 생각을 했습니다. 즉, 시중에서 판매하는 DIY 키트가 아닌 사용자가 직접 키트를 통해 만들것을 구상하고, 만들기 위한 재료 및 도면은 ChatGPT가 직접 설계해주는 서비스를 떠올리게 되었습니다. 저는 이 아이디어를 팀원들에게 전달했고, 결국 최종 주제는 이 아이디어로 선정되어 아래와 같이 정리되었었습니다.

직접 만드는 나만의 DIY 키트

실제로 모델링을 하고, 부품 선정과 코드를 작성하는 일은 전문적인 지식을 어느정도 요구하는 편입니다. 이 점때문에 메이커에 입문하시려는 분들이 망설이는 이유가 되기도 하고요.(저 또한 그랬었습니다) 그래서 저희가 만드는 이 키트는 일반인들도 누구나 DIY 키트를 만들어 스스로 자신이 원하는 제품을 구상해보고, 또 만들어서 메이커에 대한 흥미도와 접근성을 높이는 것을 중점 삼아 이 제품을 기획하게 되었습니다.

사용 스택들

어떻게 ChatGPT로 도안을 짜주지?

Blender에서는 처음 출시될 때부터 프로그램 기능을 제어하게 해주는 Blender Python(BPY) 를 제공했었고, 지금까지 활발하게 지원을 하고 있는 상태입니다. BPY에서는 기본 Mesh 생성부터 Mode 변환, Inset, Extrude와 같은 기본적인 작업들을 진행해주고, 여러 설정들도 제어해낼 수 있습니다. 고급 모델링을 만드는데에는 한계가 있지만, 이 스크립트 덕분에 자동화 작업 및 백그라운드 작업 또한 이뤄낼 수 있었습니다.

ChatGPT에게 Blender 모델링을 부탁하면, 이 BPY를 이용하여 스크립트를 짜줍니다. 예를 들어 간단한 큐브를 생성해달라고 부탁하면,

import bpy

# 큐브 생성
bpy.ops.mesh.primitive_cube_add(size=1, enter_editmode=False, align='WORLD', location=(0, 0, 0))
cube_obj = bpy.context.active_object

이런식으로 코드를 제공해줍니다. 저희 팀은 이 점을 이용하여 만들기 시작했습니다.

앱과 서버

사용자는 앱(Flutter)을 통하여 자신이 만들 제품을 선택하고, 또 몇가지 설정들을 해줄 수 있도록 하기로 했습니다. 그리고 서버(Flask)에서는 앱에서 전달해준 키워드들로 조합된 문장을 ChatGPT API에 전달해주고, 답변으로 돌아온 스크립트들을 다시 Blender Server에 요청하여 모델링 파일을 받아오고, 최종적으로 제작 가이드 및 모델링 파일을 앱에 전달해주는 방향으로 제작하였습니다.

대회 진행 과정, 그리고 여러 고난들

BPY에 대해 무지

처음에는 테스트용으로 그냥 '안경을 만들어 줘' 이렇게 요청했었습니다. 그렇게 부푼 마음으로 BPY Script를 받아 Blender에 적용시켜본 결과...


어?

그냥 Mesh들만 움직이는 것이 아니겠습니까.. GPT가 아직 그림이니 모델링이라는 개념이 좀 부족하다고 했었어도, 이 정도로 심각했을 줄은 몰랐습니다. 멘토님의 조언으로 GPT 4.0을 이용하여 모델링을 진행해봤었지만, 결과는 거기서 거기였었습니다. 조금 좋아지긴 했지만 이걸 안경이라고 부를수는 없었습니다.

다른 스크립트를 받아가며 동작시켜본 결과, 모양은 둘째치고 옛날 버전이라서 그런가 옛날 명령어도 많이 들고오고 간단한 모델링 작업조차 제대로 진행되지 않았었습니다. 그래서 원하는 걸 만드는것보다 우선 기본적인 모델링을 하는 법 부터 알려줄 필요가 있어보였습니다. 그래서 저도 BPY를 공부해가며 다음과 같은 과정을 밟았었습니다.

ChatGPT에 물어봄 -> Blender API 공식 문서로 해당 명령어 찾음, 기능 관련 명령어 싹 다 검색 -> Google 검색 -> 다시 문서 읽기

이 과정을 무한반복 했었습니다. 아직 GPT도 한계가 있다보니, 사람처럼 3D모델링과 관련된 역량이 많이 부족해보였었습니다.(이것도 훈련을 거쳐야 어느정도 얻게 되지만 아직 이부분까지 학습시키는 건 한계가 있었나봅니다.) 그렇게 원하는 면을 선택하는 법, 구멍을 뚫는 법, 특정 모양을 만들어가는 작업을 몇 가지 알려주었었습니다. 그러다보니 상태가 많이 호전되었지만, 사용자가 원하는 모양으로 만들기엔 매우매우 무리였었어서 몇가지 키워드를 미리 정해놓고 크기만 변화하는 식으로 제한하였었습니다. 그렇게 저희가 선정했던 제품(선풍기, 조명)의 모형을 만들기 위해 프롬포트 조건 설정 및 많은 도전과 보완 끝에 ChatGPT에 일러줄 조건들을 정했었습니다.

Openai API의 잦은 키 삭제

서버 만드는 팀원의 고난이었는데, OpenAI쪽에서 발급받은 키가 외부에 유출되었다고 판단될 경우(그쪽에서의 기준이 있나봅니다) 키를 바로 삭제한다고 합니다. 그래서 자꾸만 키가 비활성화되어가지고 좀 골치아파 했었다는데, 인증키 파일의 권한을 root 권한으로 설정함으로써 해결할 수 있었다고 합니다.

위젯 애니메이션 제작

앱 만드는 팀원의 고난이었었습니다. 단순한 앱을 만들기에는 금방 끝날거 같아 뭘 더 추가하면 좋을까 고민하던 팀원에게 제가 한 가지 기능을 제안해보았었습니다. 바로 토스 앱 가입때처럼 앱 위젯이 움직이는 애니메이션을 제작하는 것이었습니다. 처음에는 호기로워하다가 나중에 굉장히 머리 아파하고 짜증내더군요 ㅋㅋ. 괜한걸 제안했나 싶었지만 그래도 어떻게든 달라붙어서 해결했었다고 합니다.

다른 팀과의 비교

이건 개인적으로 겪었었는데, 자꾸만 비교를 하게 됐었던 것 같습니다. 눈에 바로 보이는 하드웨어 제작물을 다른팀에서 거의 다 만들고 있었고, 컴퓨터 비전을 통해 예측하는 장면과 제작하는 제품의 스케일에 감탄했던 것 같습니다. 무엇보다도, 저희 팀은 하드웨어 서비스가 아닌 응용소프트웨어 제품이었기 때문에 이번 대회 취지에 맞을까 고민을 많이 했었습니다. 그래도 주제에 자문을 구했었던 멘토분들께서의 많은 칭찬과 격려, 그리고 만드려는 제품의 취지, 그리고 열심히 매달리고 있는 저와 팀원들을 보며 힘을 얻고 저희 제품 구현에만 힘을 썼었습니다.

그외

밤샘 피로, 복부 통증(장이 뒤틀릴 뻔 했습니다)에 간식 거부(다이어트 때문에 유지하고 있었던 식습관 때문인지 몸이 간식을 거부하더군요)로 인한 당 떨어짐... 해커톤 본연의 고난들이 뒤따라왔지만 순수 재미와 개발을 완수해야 한다는 일념하에 대회 활동을 진행하였습니다. 대회 마감시점 쯤에 꼭 구현되어야 할 부분들이 갑자기 동작되지 않아서 급하게 고치고 기능 추가한다고 진땀을 뺐었습니다. 그래도 구현은 했어서 다행이었고요!

예쁜 새벽 하늘

??: 날이 밝았습니다. 마피아는 고개를 들고...

발표

발표를 총 두번을 거쳐서 진행했었습니다. 먼저 사전 점검이라고 하여 팀마다 5분씩 주고 만든 것 소개 및 질의응답을 받는 시간을 가졌었습니다. 신경을 많이 썼었던 탓인지, 아님 준비가 덜 됐었던 참인지 발표할 때 엄청 긴장하면서 했었습니다. 톤은 유지했지만 뭘 말해야 할지 가끔 패닉오고, 준비했던걸 전부 말하지 못하고... 그래도 다행히 심사위원분들께서 좋게 봐주셨었던 것 같습니다. 특히 ChatGPT로 도면을 자동으로 만든다는 점에서 흥미를 많이 끌었던 것 같습니다. 그리고 마지막 최종 발표때는 다같이 모여서 발표하였었는데, 그때 저는 설명 대신 도면이 생성되는 것과 도면으로 만든 제품들(진짜 간단한걸 만들었었습니다. 인터넷으로 조작하는 조명과 날개 없는 선풍기..)을 소개했었습니다. 마지막에 무리수를 뒀었어서 좀 쪽팔리긴 했었지만.. 그래도 어찌저찌 잘 소개한 것 같아 만족했었습니다.

수상

3등!

수상식할 때 장려상 수상을 못한 걸 듣고 아 못탔구나라고 생각했었는데, 뜬금포 저희 팀 이름이 불렸어서 굉장히 당황했었습니다. 신나긴 보다 당황..ㅋㅋㅋ 그래도 긴장이 싹 날아가고 상당히 기분 좋았었습니다!

1, 2등팀 둘 다 수해를 이용한 주제를 선정하여 개발하였었습니다. 2등팀은 취약계층을 위해 싸고 많이 배포할 수 있는 수해 알림 베게 서비스, 1등팀은 지하차도 침수시 풍선을 이용하여 가림막을 생성하는 장치였었습니다. 이 과정 속 컴퓨터 비전을 통해 지하차도 침수 유무를 구별하고, 바람을 생성시키는 장치가 없었어서 당근마켓으로 직구까지 했었다고 합니다 ㅋㅋ. 무튼 이런걸 생각하고 만들어 내셨어서 경외감이 들기도 했었습니다. 반대로 BPY를 이전부터 알았었다면 더 고급진걸 만들어서 승부를 볼 수 있지 않았을까하는 생각도 들었었고요.

마무리

오랜만에 나가는 해커톤이었는데, 정말 순수 해커톤 느낌이 들었던 좋은 경험이었습니다. 중간에 대회 진행을 방해하는 요소가 하나도 없었고 서로 모르는 관계였어서인지 다른 사람들에게 신경을 전혀 쓰지 않았으며, 간식과 식사도 너무 좋았던 것 같습니다. 제 개인적으로는 샘솟는 열정(그 속에 재미가 있었겠죠?)과 방학 중에 기른 체력, 그리고 사전 준비를 통해 Flask, Blender를 미리 다루고 연습했었어서 대회 진행을 원활하게 했었던 것 같습니다. Blender Python은 국내 생태계는 전멸이고 해외에서도 딱히 다루지 않던 이상한 세계관이었지만, 그래도 ChatGPT를 통해 키워드를 얻고 검색 및 공식문서를 통해 더 깊게 알아내어 보람찼고, 또 한편으론 새로운 공부 방법을 알아낸 것도 같아 매우 유익한 경험이었습니다. 스스로 생각하고 움직여 완성하는 개발자가 어떤 기분인지 다시금 체감하게 되었었고요.

이렇게 부딪히며 성장하는 또 하나의 계기가 되었던 것 같아 매우 보람찼었습니다!

profile
생각이 깊은 주니어 개발자

2개의 댓글

comment-user-thumbnail
2023년 8월 13일

훌륭한 글 감사드립니다.

답글 달기
comment-user-thumbnail
2023년 12월 4일

우와~ 수상 축하드립니다!
Chat-gpt로 도면을 만든다는 상상은 정말 획기적인 아이디어인것 같습니다.
??? : 당신도 메이커 할 수 있습니다!

답글 달기