0. 이 페이지의 목적
우선 이 페이지에 담길 내용의 목적을 명확히 하고자 합니다.
나 자신을 소개하는 글, (취업을 고려한다면) 내 경력과 경험을 어필하는 글, 후배들에게 영감이 될 수 있는 나의 소개… 이 모든 목적들이 혼합이 되어 포트폴리오도 아니고, 경력설명서도 아니고, 일기도 아닌 이도저도 아닌 글이던 시간이 꽤 길었습니다. 자기소개는 이렇게 해야 한다더라, 경력은 저렇게 어필해야 한다더라를 접할 때마다 자잘하게 수정하다 보니 누더기가 된 것입니다.
데이터상 방문자들이 제 블로그에서 가장 오래 체류하는 페이지이긴 하지만, 이 페이지의 제1독자가 저 자신임을 명확히 합니다. 이제 이 글은 제가 어떤 업을 어떤 생각으로 했는지, 무엇을 배웠는지 담담하게 돌아보고, 전후 행보에 어떻게 영향을 주고받았는지에 대해 설명하는 역할만을 도맡습니다. 여기서 업이란 일, 프로젝트, 참여했던 단체, 출판물 등 이 사회에서 1인분을 하며 살아가기 위한 흔적이라면 그 무엇이든 될 수 있습니다. 그냥 슥 해버렸을 것 같은 일 속에 어떤 고민이 있었고, 어떻게 망했고, 어떤 실수들을 했는지, 지금까지 작성된 글들에 치부가 숨겨져 있는 것들도 너무 많은 것 같아서 더 잘 드러내는 방식으로 작성해보려고 합니다.
종종 심신이 지칠 때면 조바심이 발동해 내가 걸어온 길을 부정적으로 바라보곤 합니다. 그런데 ‘Connecting the dots’ 라는 말이 있잖아요. 내가 업을 찾기 위해 걸어온 길이 절대 아무런 연관성이 없지 않음을 발견할 때 다시 조금이나마 힘을 얻곤 하는 것 같습니다. 제 이야기가 길게 펼쳐진 이 페이지의 내용을 읽으시는 제2독자 여러분도 ‘아 이 사람은 이때 이런 고민을 했고, 그래서 이런 일을 했구나! 이런 일로부터 영감을 받았구나!’를 이해할 수 있다면 이 글은 포트폴리오, 경력설명서, 일기 그 무엇도 아니더라도 제 할일을 과분히 다했다고 생각합니다.
그렇기 때문에 이 글은 최신순이 아니라 과거에서 현재로 흐르게 작성되었습니다. 과거에 작성해 두었던 일, 프로젝트, 단체, … 이런 식으로 나누었던 것들도 모두 폐기했습니다. 제 삶은 그렇게 깔끔하게 돌아가는 것 같지 않아서요. 예쁘게만 작성된 내용들이 많다보니 이렇게 바꾸는 작업이 조금 걸릴 것 같아요. 그럼에도 장기적으로 저라는 독자를 위해 가장 좋은 글이 될 것 같았습니다. 내 자랑은 레주메같은 곳에서나 하겠습니다.
1. 이야기
개발행사를 1학년 턱밑에 들이미는 커뮤니티 만들기
커뮤니티 창립
19.03~Now
대학교에 들어온 저는 우물 안 개구리가 될지 모른다는 불안이 컸습니다. 이제 와서 더 솔직해지면, ‘주변 사람들이 훌륭하지 않으면 어떡하지?’ 하는 생각을 했던 것 같습니다. 주변 친구들은 그냥 평범해 보였습니다. 열심히 학교 수업을 듣고, 술을 먹고 놀았습니다. 정말 위대한 생각을 하고, 몇년 뒤 표현으로 ‘머리를 깨’ 주는 사람이 없다고 느껴졌습니다. 맨날 ‘세종대학교 출신 CEO’, ‘세종대학교 출신 유명인’ 같은 것을 확인하고, 다른 학교와 비교해 보곤 했습니다. 너무 즐거운 시기였음에도 동시에 불안감이 떨쳐지지는 않았던 모양입니다.
2학년 때 쌓인 행사 목걸이만 50개정도 지금도 장롱 구석에 쌓여 있을 정도로 개발자 컨퍼런스와 전시회, 강연, 대회를 닥치는 대로 전전했습니다. 무슨 말인지 하나도 모르겠어서 무력감에 빠지기도 했고, ‘듣다 보면 나아지겠지’라는 희망 회로를 돌리기도 했습니다. 이때 LLM이 있었으면 얼마나 좋았을까요? 아주 조금씩 조금씩 들리는 것이 많아짐을 느낄 땐 시야가 조금 넓어지는 기분이 들었지만, 그런 행사의 존재를 알아내는 일부터 저학년에게는 너무 멀게 느껴졌습니다. 이 커뮤니티는 처음부터 다른 학생들을 돕겠다는 거창한 뜻에서 시작한 일이 아니었습니다. 누군가 좋은 기회를 제 턱밑까지 가져다주었으면 했고, 그런 사람이 없다면 제가 먼저 해보자는 마음에 가까웠습니다.
당시에도 공모전과 개발행사를 모아두는 홈페이지는 해커톤에서 흔히 보던 아이디어였습니다. 하지만 정보가 어딘가에 잘 정리되어 있는 것과, 그 정보가 필요한 순간 내 근처에 도착해 실제로 가볼 만한 일처럼 느껴지는 것은 달랐습니다. 그래서 홈페이지를 만들지 않고 학생들이 이미 매일 쓰던 카카오톡에 오픈채팅방을 만들었습니다. 신입생이 들어오는 시기마다 교내 커뮤니티에 방을 알렸고, 초반에는 사람들이 떠나지 않도록 제가 직접 행사들을 찾아 계속 공유했습니다.
그 수작업이 생각보다 잘 통했습니다. 저와 비슷한 갈증을 느꼈던 몇몇 선배들이 먼저 정보를 보태기 시작했고, 저학년 때 들어온 사람들이 고학년이 되어 다시 후배들에게 기회를 건넸습니다. 큰 홍보 없이도 방은 조금씩 커져 2022년 3월에는 약 500명이 모였습니다. 제가 정보를 공급하지 않아도 사람들이 서로 먼저 질문하고 답하며 정보를 나누는 모습을 보면서, 한 사람이 하던 일을 공동체가 이어받는 순간이 있다는 것을 처음 보았습니다.
돌이켜보면 이 성공에는 운이 많이 따랐습니다. 저는 ‘정보가 없다’는 문제를 푼 것이 아니라 ‘정보가 나를 깨우지 않는다’는 문제를 우연히 더 정확하게 건드렸습니다. 저 자신이 첫 사용자였고, 다른 사람에게 필요한 정보를 직접 찾아 건네는 제품의 역할도 했습니다. 나중에야 이런 방식을 컨시어지 MVP라고 부른다는 것을 알았습니다. 무언가를 잘 만들어두는 것보다 먼저 누군가의 문제 안으로 들어가 수작업으로라도 해결해보는 일이 강력할 수 있다는 것을 이때 배웠습니다.
이 일은 이후 제가 제품과 커뮤니티를 보는 방식에 오래 남았습니다. 잘 만든 웹 페이지보다 대충 만든 카톡방 하나가 더 지속가능할 수 있다는 것, 처음에는 사람이 직접 제품이 되어도 된다는 것, 그리고 정보가 흐르는 것과 지식으로 남는 것은 별개의 문제라는 것을 알게 되었습니다.
우리 학교 인공지능 동아리 만들기
동아리 창립
19.01~
저는 남들이 하지 않는 다른 일을 하고 싶다는 마음이 컸습니다. 지금 생각하면 남들과 다르기만 하면 그 자체로 특별해질 수 있다고 믿었던 치기이기도 했습니다. 한편으로는 순수하게 궁금했습니다. 1학년 내내 배운 컴퓨터는 결국 if와 else를 아주 복잡하게 조합한 기계처럼 보였는데, 그런 컴퓨터로 지능을 구현한다는 것은 도대체 무슨 뜻일까요?
1학년 여름 무렵 축제 뒤 술자리에서 선배들에게 인공지능을 공부하고 싶다고 말한 적이 있습니다. 돌아온 답은 대략 “그런 건 SKY 학생들이 하게 두고, 우리는 우리가 잘할 수 있는 공학을 해야 한다”는 것이었습니다. 현실적인 조언이었을지도 모르지만, 저는 오히려 반대로 움직이고 싶어졌습니다. 할 수 없다는 말이 실력 없는 저를 갑자기 유능하게 만들지는 않았지만, 적어도 시도조차 하지 않을 이유로는 받아들이기 어려웠습니다.
동아리의 씨앗은 1학기, 앞서 이야기한 SW 정보공유 커뮤니티에 한 선배가 올린 “머신러닝 스터디를 해볼 사람”이라는 짧은 글이었습니다. 저를 포함한 네 명이 빈 강의실에 모였습니다. 무엇부터 공부해야 하는지도, 우리가 제대로 이해하고 있는지도 모른 채 머신러닝 이야기를 붙들고 앉았습니다. 훗날 수백 명이 거쳐간 동아리의 원초는 이름도 체계도 없던 이 네 명의 모임이었습니다.
학교의 수준을 높이는 데 기여하고 싶은 마음도, 제가 학교에서 오래 기억되고 싶은 마음도 있었습니다. 후배들은 ‘AI는 SKY 학생들이나 하는 것이다’ 라는 이야기를 듣게 만들고 싶지 않았습니다. 학교 어딘가에 숨어 있을 인재들이 모였으면 했고, 단체를 하나 만들어두면 저도 떠밀리듯 공부하게 되지 않을까 하는 계산도 있었습니다. 결국 네 명의 스터디를 세종대학교 인공지능 학술동아리 SAI(Sejong Artificial Intelligence)로 만들었습니다.
학부 2학년이 무엇을 안다고 동아리를 만들었나 싶고, 지금 보면 아무것도 모른 채 꽤 크게 일을 벌였습니다. 처음에는 열심히 공부할 사람을 모아두면 동아리가 저절로 굴러갈 줄 알았습니다. 그러나 사람이 늘어날수록 선발 원칙과 역할, 학습 과정, 운영진의 인수인계처럼 공부와는 다른 문제들이 더 많은 시간을 요구했습니다. 특히 이후 스타트업이랑 병행할 때에는 다 내려놓고 도망가고 싶었던 순간도 여러 번 있었습니다. 그럼에도 지속할 수 있었던 것은 어떻게든 유의미한 환경을 정착시켜 물려주고 싶다, 그리고 내적으로는 내가 기억될 수 있는 환경을 만들겠다는 고집이었습니다.
재임 기간 동아리는 네 명에서 150명 규모로 커졌습니다. 팬데믹에도 15주 동안 온라인 컨퍼런스 콜을 운영하고 NPS 5.2/6을 추적하며, 열정에 기대기보다 다음 사람이 이어갈 수 있는 운영 방식을 만들려고 했습니다. 제가 떠난 뒤에도 동아리가 계속 운영되는 모습을 보면서, 사람을 모으는 것과 내가 없어도 남는 시스템과 조직을 만드는 것은 전혀 다른 일이라는 것을 배웠습니다.
하지만 이 이야기를 커진 동아리에서 시작하면 가장 중요한 장면을 놓치게 됩니다. 첫 대회에 나갔을 때의 동아리는 여전히 네 명짜리 스터디에 가까웠습니다. 그 작은 모임에서 저는 앞서 막연히 찾고 있던 ‘머리를 깨주는 사람들’을 처음 가까이에서 만나게 되었습니다.
첫 대회, 학교 라운지에 자리 있는지 알려주는 프로젝트
네 명이 스터디를 이어가던 중 동아리의 맏형이 “이왕이면 스터디 이름으로 대회에 한번 나가보자”고 제안했습니다. 본인은 신분상 출전할 수 없어 함께할 다른 4학년 선배를 소개해주었습니다.
저희 넷은 목 좋은 학교 2층 카페에 앉아 아이디어를 논의했습니다. 당시 저는 교내 커뮤니티 스페이스를 정말 애용했기 때문에, 라운지에 자리가 없어 헛걸음하는 학생들을 위해, 카메라로 자리에 가방이 있는지 없는지를 탐지해서 빈 좌석과 혼잡도를 파악하고 앞으로의 이용량까지 보여주는 서비스를 만들어보자는 아이디어로 결정이 되었죠. 4학년 선배는 여러 아이디어 사이에서 무엇은 가능하고 무엇은 어려운지 빠르게 가른 뒤 ‘이건 어렵지 않게 만들어볼 수 있을 것 같다’고 하더군요.
저는 아이디어와 이용량 예측을 맡았습니다. 하지만 제가 만든 부분은 제대로 작동하지 않았고, 작동하지 않는 것을 그럴듯한 결과물로 포장할 능력도 없었습니다. 반면 4학년 선배는 오픈소스를 끌어다 금방 노트북 카메라로 데모를 선보였고, 3학년 선배와 특성화고를 나온 한 살 어린 팀원은 프론트엔드를 턱턱 만들어내더니 제가 머릿속에서만 이야기하던 모습을 눈앞에 꺼내놓았습니다.
앞서 저는 주변에 훌륭한 사람이 없을까 봐 불안해했습니다. 그런데 정작 대회에서 만난 사람들은 같은 학교 안에서 제가 못 하던 일을 너무도 자연스럽게 해냈습니다. 내 아이디어가 다른 사람들의 손을 거치며 제품이 되는 모습을 보는 건 정말 묘한 기분이 들었습니다. 한편으로는 팀의 결과를 제 실력이라고 믿고 싶었던 마음도 있었던 것 같습니다.
팀은 53개 출전팀 중 공동 1등으로 대상을 받았습니다. 물론 아이디어를 제공한 일도 팀에 필요했습니다. 기술을 잘 몰랐기에 “가방도 찾을 수 있나요?”, “서로 같은 가방인지는 어떻게 아나요?”처럼 당연하거나 엉뚱한 질문을 계속 던졌고, 그 질문이 제품의 범위를 정하는 데 조금은 도움이 되었을 것입니다. 그렇지만 이 결과는 아이디어 하나만으로 만들어진 것이 아니었습니다. 아이디어의 가능성과 한계를 가르고, 각자의 기술로 끝까지 제품을 완성한 동료들이 있었기에 가능했습니다.
이 대회는 제 무능함을 선명하게 보여준 첫 경험이었습니다. 아이디어를 내는 것과, 그 아이디어에 필요한 AI 기술을 골라 실제로 작동하는 제품으로 만드는 일 사이에는 제가 아직 건너지 못한 큰 간격이 있었습니다. 앞에서 척척 문제를 풀어내던 팀원들을 보며 저도 AI 기술을 문제 해결에 자유롭게 꺼내 쓸 수 있는 사람이 되고 싶다고 생각했습니다. 제가 찾던 훌륭한 사람들은 멀리 있는 유명인이 아니라 이미 가까이에 있었고, 그들을 부러워하는 데서 멈추지 않고 저도 그런 사람이 되고 싶어졌습니다.
헬멧 안쓰면 잔소리 하는 킥보드 만들기
킥보드용 사람 탐지 AI, 그런데 창의적인 학습법
칵테일로 소주 치기
Co-Founder, PO
스타트업 ‘헬로콕’
20.05~21.11
•
IT로 문제를 해결하는 유튜브 채널에서 마케팅 첫 번째 퍼널인 유튜브에 뛰어든 이유가 됨
•
•
IT로 문제를 해결하는 유튜브 채널이 내가 잘 아는 도메인의 문제해결에 집중하는 계기가 됨
문제:
헬로콕은 소주 대신 칵테일을 먹는 문화를 전파하는 것을 비전으로 한 스타트업입니다. 어디서든 칵테일을 말아먹을 수 있는 키트를 판매했습니다. 우리 팀은 아무것도 몰랐습니다. 모든 팀원이 칵테일이라는 음료가 무엇인지도 잘 몰랐고, 음료 상품의 라이프사이클도 몰랐고, F&B 관련 법과 생태계도 몰랐기 때문입니다. 재미있는 예를 들면, 와인앤모어(소매장)에서 구입한 술을 나의 칵테일바(소매장)에서 팔면 유통구조 위반으로 불법입니다. 이외에도 수입주류는 법적으로 온라인 광고 및 판매가 어렵다는 것, 주류 배달의 경우에도 배달주문가격의 50%가 넘지 않는 선에서만 가능하다는 것도 몰랐습니다. 예비창업패키지를 받고 MVP까지 만들고서야 하나씩 발견되는 도메인 문제를 극복해 보고자, 칵테일 키트를 한강공원에 들고 가 사람들에게 팔아 보며 반응을 살피고, 보험 영업팀에 선물용품으로 납품도 시도해 보고, 창고를 쇼룸으로 사용하여 칵테일 바를 만들어 제품을 알리려는 등 오프라인 채널을 통한 홍보를 시도하기도 했습니다.
보험영업팀에 제품을 넘겼을 때의 해프닝이 떠오릅니다. 여름철 직접 음료를 소분하여 보험 영업팀에 판매한 칵테일 키트들이 하루만에 전량 산패되며 가스가 발생해 음료를 담은 공병이 모두 터져 버렸고, 보험 영업팀에 찾아가 이것들을 직접 리콜하는 아찔한 사태가 일어났습니다. 알고보니 음료 소분 작업은 굉장히 난이도가 높은 작업이었습니다. 소분 중 공기와 접촉하면 굉장히 빠르게 음료가 산패되는 것이 유력한 원인이었는데, 이게 바로 음료 소분법이 매우 까다로운 이유였구나 싶었습니다. 그렇다고 소분을 피하기 위해 적정량의 완제품을 사용할수도 없었습니다. 완제품은 미관상 미울뿐더러 ml당 단가가 많게는 5배 이상 비싸기 때문입니다.
이 소분 및 음료 산패 문제를 해결한다고 하더라도, 주류는 온라인 홍보와 택배배송이 불가능하기 때문에 한강에 키트를 싣고 가 사람들에게 키트를 팔아보며 좋은 반응을 얻어 보려고 했던 것입니다. 하지만 탁 트인 공간에서 이 돗자리 저 돗자리 배회하며 사람들에게 싸늘히 거절당하는 경험은 3일 이상 지속하기 어려운 경험이었습니다. 쇼룸도 마찬가지였습니다. 생각보다 반응이 좋았던 쇼룸에 오픈 후 5개 팀이 다녀갔지만 칵테일 키트는 단 한개도 판매되지 않았습니다.
보험팀 실패, 한강공원 실패, 쇼룸을 통한 판매 실패로 팀의 분위기는 우울했고, 사무실에서는 항상 ‘잠재고객들이 우리 제품을 구매하지 않는다’를 불평했습니다. 벌써 예비창업패키지를 통과하고 사업기간의 절반이 흘렀는데, 무언가를 열심히 하긴 하지만 칵테일 키트가 팔리지 않는 지옥에 빠졌습니다. 하지만 우리는 꽤 오랫동안 그 문제의 원인을 통쾌히 진단하지 못한 채 방황하는 시간이 길었습니다.
성과와 배움:
판매부진을 극복하는 가장 큰 매출 변화를 가져왔던 순간은 마케팅 퍼널에 대한 인식이었습니다. 잘 생각해 보면 한강공원과 쇼룸 도합해봐야 총 80명도 안 되는 사람들에게 우리 제품을 보여주었을 뿐입니다. 그나마 첫 반응이 좋았던 보험 영업팀 60명에게 보여준 모습은 산패돼 엉망이 된 칵테일 키트고, 한강 공원의 사람들은 애초에 음료를 준비해온 사람들이기 때문에 지불용의가 없을뿐더러, 칵테일 키트를 보여주며 효과적으로 어필할 시간도 부족했습니다. 좋은 제품도 100명에게 노출시켰을 때 4명이 살까 말까라는데, 적절하지도 않은 50명에게 키트를 보여줘 놓고 반응이 없다고 서운해했던 것입니다.
‘분명히 우리 제품을 본 사람들은 다 좋다는데, 왜 안 팔릴까?’ 반응이 좋았던 고객이 존재하긴 했었다는 점부터 머리를 싸매고 스무고개를 했던 것 같습니다. 그 결과, 우리의 매출이 나오지 않는 가장 큰 이유는 학생 창업이었기 때문이 아니라, 좋은 제품을 만들지 않아서가 아니라, 브랜딩이 구려서가 아니라, 타겟팅이 되지 않았기 때문도 아니라, 그냥 충분히 많은 사람들에게 우리의 칵테일 키트 안에 뭐가 들어있는지조차 보여주지 못했기 때문이라는 결론에 이렀습니다. ‘충분히 많은 잠재고객들에게 우리 제품을 보여주지 못했다’ 로 문제를 다시 정의하는 순간이었습니다.
결국 지불용의가 있는 고객들에게 칵테일 키트를 충분히 많이 노출하는 것을 방해하는 가장 큰 병목은 온라인 광고를 금지한 주류 관련법이라는 생각이 들었습니다. 팀은 오프라인에서 무언가를 하려는 시도를 멈추고, 온라인 알콜프리 칵테일 키트로 피벗하며 퍼포먼스 마케팅을 시작했습니다.
팀은 알콜 칵테일키트를 포기하고 논알콜 키트로 피벗합니다. 소분이나 온라인 홍보 문제로부터 자유로워져 세일즈 퍼널을 파기 위함이었습니다. 이때부터 개발자는 퍼포먼스 마케팅 자체에 집중했고, 디자이너는 또다른 노출 전략인 컨텐츠 제작에 집중했고, 저와 대표는 영업을 멈추고, 논알콜 상품을 개발하고 스마트스토어 노출 최적화에 집중했습니다. 적은 시드로 3개월간 상품과 컨텐츠를 50만회 노출시키고, 수백개의 칵테일 키트가 판매됐습니다. 형편없던 전환율이 조금씩 높아질 때, 수십개의 키트를 벌크로 주문하며 익일 도착을 부탁했던 고객을 위해 쏘카에 키트를 가득 싣고 인천에 새벽배송을 떠날 때의 설렘이 아직 생생합니다.
논알콜 키트로의 피벗과 세일즈 퍼널을 수치로 추적하는 퍼포먼스 마케팅은 앞서 나타난 문제를 한번에 해결하는 액션이었습니다. 우리는 평소 문제해결을 잘 해야 한다고만 교육받습니다. 하지만 문제를 잘못 정의하고 문제를 풀면, 풀어도 전혀 쓸모없는 문제가 풀려 버립니다. 문제를 어떻게 풀지 고민하는 단계 이전에, 문제를 올바르게 정의해야만 하는 압박감 속에서야 비로소 진짜 공부가 이루어진다는 것을 느꼈습니다. 올바르게 문제를 정의해보려는 과정에서 사람은 미친듯이 배우려고 하는 것 같습니다.
‘충분히 많은 잠재고객에게 제품을 효과적으로 보여주지 못했다’는 모호한 문제를 조금 더 구체적으로 정의하려고 할 때 세일즈 퍼널이라는 개념을 주의깊게 들여다보고 배울 수 있었습니다. 이외에도 팀에는 ‘팀원 간 소통’이라는 모호한 문제도 있었습니다. 왜 이런 문제가 발생할까, 정확히 정의하려고 할 때 《규칙 없음》이나 《OKR》같은 경영서를 읽었고, 필요에 의한 학습으로부터 많은 것을 빠르게 배워 적용하는 감각을 배울 수 있었습니다.
팀을 구성할 때, 개인과 팀의 지속가능성이 정말 중요하다는 생각이 들기도 했습니다. 1주일에 30~50개 남짓의 키트가 팔리는 상태에서 추가적인 성장이 없고 정체 구간을 마주했습니다. 매일매일 실험으로 너덜너덜해지는 2주를 보냈지만 시장반응은 도통 오지 않았습니다. 정체기라기에 2주는 정말 짧은 시간입니다. 하지만 당시 대표는 졸업과 입대를 앞두고 있어 4학년 넘어서까지 프로젝트를 끌고가는 리스크를 짊어지고 싶지 않아했고, 개발자와 디자이너는 커리어에 보다 도움이 되는 일을 하고 싶어했습니다. 저도 마음속으로는 이 지치고 한치 앞 보이지 않는 일을 해야만 하는 이유가 무엇인지에 대해 확신을 잃은 상태였습니다. 그렇게 팀은 해체되었고 헬로콕이라는 프로덕트는 사라졌습니다. 팀에 힘든 시기와 정체기는 반드시 옵니다. 이것을 버텨낼 수 있는 힘은 개인의 역량뿐 아니라 지속가능성이기도 합니다.
감사:
헬로콕의 알콜 칵테일 키트
쇼룸에서 고객에게 발송하기 위해 포장한 칵테일 키트들
자율주행 공유킥보드 만들기
로보틱스 엔지니어
100만 회원 공유킥보드서비스 스타트업 ‘디어코퍼레이션’
20.07~22.04
•
엎드려뻗친 친구 피규어로 만들어버리기 프로젝트를 하는 계기가 됨
•
설거지 돕고 물절약 돕는 MLOps 싱크대 프로젝트를 하는 계기가 됨
문제:
공유킥보드는 사회적으로 부정적인 영향을 많이 미쳤습니다. 공유킥보드 서비스를 제공하는 디어는 불법주차 문제, 수요공급 불균형 문제 등의 문제를 가장 똑똑하게 해결하는 방법은 자율주행이라고 생각했습니다. 이외에도 왜 자율주행을 개발하고자 했는지 더 궁금하면 글 “
공유 킥보드 회사에서 자율주행을 개발하고 자빠진 이유” 을 살펴보세요.
성과:
디어 자율주행팀은 사람 도움 없이 약 1km 를 주행할 수 있는 자율주행 킥보드 시스템을 만들었습니다. 기술적으로 시스템은 Jetson Xaiver AGX이라는 소형 GPU 컴퓨터와 ROS라는 로봇 운영체제를 기반으로 동작했습니다. 저는 인지(Perception) 시스템을 맡았습니다. 당시 자율주행 문제의 커다란 골조는 정밀지도 기반 vs 실시간 인지 기반이었습니다. 저는 정밀지도 기반의 주행이 아니라 실시간 영상처리 기반의 주행으로 방향성을 잡았는데, 큰길을 다니는 자율주행차와 달리 라스트 마일 주행을 도맡는 킥보드 특성상 가림(Occlusion) 같은 변수가 많고 정밀지도의 변화가 빈번하기 때문입니다.
기술적으로 재미있는 기여 중 하나는 점자블록을 활용하는 아이디어였습니다. 로봇의 측위는 일반적으로 가속도계, 바퀴의 회전수, 우리가 흔히 말하는 GPS 신호라는 것을 통해 이루어집니다. 문제는 킥보드가 지도의 목적지로 향하고자 하는 방향에 비해 핸들이 얼마나 회전해 있는지를 측정할 방법이 가속도계밖에 없다는 점이었습니다. 가속도계에는 미세한 오차가 있는데 그 오차는 정말 눈덩이처럼 불어나 몇 분만 지나도 절대적인 핸들 회전량을 확인하기 어려워집니다. 팀은 이걸 킥보드 머리방향 오차 누적 문제라고 불렀습니다. 이 머리방향 오차를 보정할 시각 신호가 필요했습니다. 저는 점자블록이 도로의 방향을 잘 나타내는 강력한 힌트임을 발견했고, 간단한 사영기하를 적용하여 킥보드의 회전 방향을 지도와 비교하여 킥보드의 정확한 머리 방향을 찾아낼 수 있었습니다.
기술적 기여를 넘어 가장 잘했다고 생각하는 일 중 하나는 단순히 자율주행을 만들어 문제를 해결하고자 하는 팀 방향성을 되짚었다는 점입니다. 잘 생각해 보면, 꼭 앞서 언급한 공유킥보드 시장의 문제들을 자율주행이라는 기술로 풀어야 할 필요가 없습니다. 가령 원격제어 기술만으로도 킥보드 재배치 문제는 충분히 해결할 수 있습니다. 한편 자율주행 기술이든 원격제어 기술이든, 성공적으로 개발을 마치더라도 이미 배치가 완료된 킥보드에는 기술을 적용하기 어렵기 때문에, 비즈니스 가치가 만들어지는 순간은 원격제어 기능이 탑재된 새로운 킥보드들이 배치된 이후라는 점도 고려해야 합니다.
저는 기술이 만드는 가치가 얼마나 큰지 정량적으로 가늠할 수 있는 모델을 제안하고, 우리가 직접 기술을 개발하여 잠재적으로 만들 수 있는 가치가 초기 손실을 회복하는 데 얼마의 시간이 걸릴지 가늠할 수 있도록 추상적인 틀을 제공했습니다. 자율주행 킥보드를 만들기 위해서는 한국의 그 어떤 로보틱스 기업들보다 압도적으로 라스트 마일을 오가는 기기(자율주행 기업들은 Fleet이라는 표현을 쓰더군요)가 많다는 강점을 살려, 원격제어 기능을 탑재한 킥보드를 배포하여 도시를 배회하며 동영상을 수집할 수 있도록 해야 하며, 이 동영상들로 4D 가상 공간을 모델링하고, 이를 기반으로 자율주행 모델 학습을 위한 데이터를 수집해야 한다는 방향성을 제시했습니다.
배움:
기술적으로는 TensorFlow 모델을 가성비 좋은 TPU에서 학습시켜볼 수 있었습니다. 데이터-실험-모델-배포 전 과정은 너무 복잡했기 때문에 MLOps에 대한 이해의 필요성을 느꼈습니다. 앞서 설명한 ‘원격제어 → 데이터수집 → 자율주행 구축’은 작은 기업이 어떻게 Autonomy 2.0를 구현할 수 있을까에 대한 고민의 결과이기도 했습니다. 자율주행 구현은 이미지 한장한장 받아 처리하는 2D비전 기술만으로는 부족하고 시간축을 결합하거나 공간을 생성하는 일이 필요하다고 느꼈습니다. 한편으로는 한방에 갈 수 있는 길과 갈 수 없는 길을 판단해 버리는 인간과 달리, AI 모델을 학습시키기 위해 이렇게 많은 데이터가 필요한 이유가 무엇일까 하는 의구심을 가지게 되었습니다. 어쨌든 현재 딥러닝 기반의 자율주행 시스템 구축을 위해서는 머신러닝 파이프라인에 대한 고도의 이해가 필요함을 느꼈고, MLOps에 대해 관심갖는 계기가 되었습니다. 더불어 기술을 이용한 문제해결 역량뿐 아니라, 올바르게 문제를 정의하고 타당성을 따져 보는 작업의 중요성에 대해서 뼈에 새길 수 있는 시간이었습니다.
운좋게 텐서플로 실수 발견
엎드려뻗친 친구 피규어로 만들어버리기
배경:
디어에서 자율주행 문제를 풀며 3D 공간에서 RGB 카메라로부터 취득된 데이터를 레이블링하면 효율적일 수 있겠다고 생각했습니다. 그래서 3D 기술을 공부할 팀을 결성합니다. 파이널 프로젝트 주제는 2021 테슬라 AI Day에서 안드레 카파시가 2초간 언급한 NeRF라는 기술이었습니다. 하지만 3D에 대한 지식이 전무하여 NeRF 의 I/O가 무엇이고, NeRF 결과물과 3D 프린트 혹은 3D 오브젝트 사이의 관계, NeRF에 얼마나 많은 데이터가 요구되는지 등을 모르는 상황이었습니다.
성과:
스터디는 본질적으로 지향점과 구심점이 모호하여 쉽게 와해됩니다. 게다가 모르는 것을 공부하고자 사람들끼리 모였기 때문에, 해당 분야의 많은 부분이 unknown-unknown(무엇을 모르는지도 잘 모르는 일)이라는 문제가 있습니다. 이 프로젝트는 이런 스터디의 본질적인 한계를 벗어나, 적절한 난이도의 프로젝트 마일스톤을 잡고, 작지만 명확한 결과를 빠르게 얻어냈다는 점에서 유의미합니다. 팀은 2달간 엎드려뻗친 친구를 3D 프린터로 뽑아내는 마일스톤, 이 과정을 github에 공유하고 외부에 발표를 하자는 명확한 마일스톤을 깔끔하게 달성했습니다.
NeRF는 정적 피사체를 동시에 촬영한 이미지 집합으로 3D 공간을 생성하는 기술입니다. 프로젝트팀은 RGB 카메라 이미지 세트만을 이용해 3D 프린트 출력물을 얻어내는 데 성공했습니다. 이 결과물을 ‘데이터야놀자 2022’ 행사에서 발표했습니다. 책임감 있게 문서를 만들어 사람들이 따라해볼 수 있도록 만들자고 주도했고, 최근까지도 메일로 지원문의가 들어오는 등 저희가 만든 튜토리얼을 따라해 보는 사람들이 있습니다. 과거에 작성해 두었던 문서를 따라가며 문의에 대응하고 있습니다. 대중에게 공개될 문서를 잘 작성하지 않거나 소스코드를 책임감 있게 작성하지 않으면 이후에 지원이 어렵겠다고 느꼈습니다.
배움:
기술적으로는 머신러닝 실험 관리 도구의 강력함을 톡톡히 확인했습니다. wandb라는 도구로 300개가 넘는 실험을 모두 모아 관리했습니다. 실험 관리 도구의 비교 분석 덕분에 일부 프레임에 촬영자의 팔이 피사체를 가리는 등 작은 노이즈가 NeRF 결과물에 중대한 영향을 미친다는 것을 알 수 있었습니다.
NeRF와 오픈소스 구현체 자체를 깊이 뜯어보는 시간이기도 했습니다. 각각의 파라미터가 하는 역할을 알기 위해 소스코드를 많이 들여다보았는데, Ray와 같은 개념이 TensorFlow에서 어떻게 표현될 수 있는지를 알 수 있었습니다.
이 unknown-unknown을 뚫고 가는 힘은 우리가 모르는 것이 무엇인지 정확히 정의하려는 노력으로부터 온 것 같습니다. 일례로 문제를 데이터 측면, 모델 측면, 파이프라인 측면으로 MECE하게 나누었을 때의 쾌감을 잊을 수가 없습니다. 이렇게 분해된 문제를 각 팀원에게 할당했고(R&R), 각 팀원들의 실험 결과는 실험 관리 도구에 쌓았습니다. 잘 분해된 문제 덕분에 모든 실험 기록이 단 하나도 빠짐없이 값진 데이터가 될 수 있었습니다.
OCR 오픈소스에 좋은 기능 추가
2022.11
문제:
mmocr은 객체 탐지 라이브러리 mmdetection을 유지관리하는 것으로 유명한 open-mmlab의 딥러닝 기반 OCR 라이브러리입니다. 한글이 포함된 이미지의 OCR결과물을 시각화하기 위해서는 한글을 지원하는 글꼴을 사용해야 하는데, 기본 서체를 적용하는 경우 한글이 모조리 깨져 버린다는 문제가 있었습니다. mmocr 사용을 시도하는 한글 사용자의 경우 이리저리 해결책을 찾다가 그냥 포기해 버릴 가능성이 매우 높은 상황이었습니다.
해결:
변인을 통제한 다양한 실험을 통해 한글 깨짐 현상이 글꼴 문제임을 확인했습니다. 라이브러리를 분해해서 글꼴을 받을 수 있는 부분을 파악한 뒤, 사용자와 상호작용하는 가장 높은 추상화 수준의 파일에서 글꼴을 제어할 수 있도록 연결했습니다. 기술적인 이야기는
MMOCR 프레임워크에서 한글 사용하기 에서 확인할 수 있습니다.
성과:
케라스 영어 예제 한글 번역하기
오픈소스 기여
2021.09
문제:
케라스의 공식 예제들은 제가 딥러닝을 처음 공부할 때 많은 도움이 되었습니다. 처음에는 MNIST 수준의 예제밖에 없었지만, 다양한 분야의 예제들이 빠른 속도로 추가되었습니다. 이에 비해 번역 속도는 예제의 출시속도를 따라가지 못했습니다. 번역 작업을 위해 사람들이 모였습니다. 하지만 번역 후보 노트북 목록에 있는 많은 주제들 중에서 대조학습을 번역하시려는 분들은 많이 없었습니다. 어려운 주제라고 해서 영어로 공부해야만 할 필요는 없습니다.
해결:
대조학습은 저도 익숙하지 않은 분야였습니다. 하지만 자율주행 문제를 풀면서 데이터가 없는 문제를 지속적으로 겪으며 대조학습이 미래에 이 문제를 경감시켜줄 수 있는지 확인해보고 싶은 마음 겸사겸사 대조학습 예제 번역을 나서게 되었습니다. 예제 3개에 원어보다 훨씬 더 충분한 설명을 덧붙여 한글번역했습니다. 비록 아직 반영되지는 않았으나 다른 튜토리얼을 번역한 동료에게 설명이 이해하는 데 도움이 많이 된다는 피드백을 받을 수 있었습니다.
좌: 번역과 추가적인 설명이 첨가된 노트북, 우: 원본 노트북
노트북 원본
노트북 번역본
나름 전문서 『MLOps 실전 가이드』 번역
문제:
난이도가 참 모호한 책이었습니다. 초급자들에게는 불친절하고 중상급자들에게는 너무 깊이가 얕게 느껴질 수 있는 책이었습니다. 원문의 응집성이 많이 떨어지는 것을 느낄 수 있었습니다. 아마존의 책 리뷰에는 해당 내용이 여실히 나타나 있습니다.
해결:
응집성이 부족하거나 설명이 부족해 기술의 효용을 잘 설명하지 못하는 글을 한국 독자를 위해 크게 수정하고 역자 노트를 추가했습니다. 자칫 번역자의 DRI를 초과하는 행위로 여겨질 수 있음에도 편집자님과 공동역자님들께서 “결국 번역서는 한국 독자들이 읽는 것”이라며 이러한 생각을 지지해 주셨습니다.
저자의 글을 번역한다는 마음가짐이 아니라, 한국 독자가 이해하지 못하면 온전히 내 책임이라는 모토 하에 모르는 부분은 빠르게 습득하여 채워넣고, 책임감 있는 글을 쓰기 위해 노력했습니다.
주석
역자노트
성과:
한 리뷰어분께서 ‘번역을 예술 작업하듯 해 주셨다’라는 후기를 남겨 주기도 하셨습니다. 그렇게 느껴주는 분이 계신다니 보람차고 뿌듯합니다. 책은 yes24/교보/네이버 주간베스트셀러, 일부 서점에서 IT섹션 TOP100에 선정되었습니다.
배움:
책 출판이라는 프로세스를 경험한 것 자체가 큰 배움이었습니다. 어떻게 돌아가는지를 알 수 있는 계기가 되었습니다. 하지만 책 출판에 대한 이해도가 높지 않은 채로 높은 수준을 추구하다 보니 시간이 많이 지연되었던 것은 분명 큰 패착입니다. 다음 참여 시에는 충분히 높은 품질을 유지하면서도 기한 내에 완료하는 책을 만들 수 있을 것이라고 생각합니다.
설거지 돕고 물절약 돕는 MLOps 싱크대
배경:
디어에서 자율주행 킥보드를 만들 때, 원격제어 기능을 탑재한 킥보드가 도시를 다니며 영상과 사람의 조작 기록을 함께 모으고, 이 데이터를 지도 제작과 모방학습, 지속적인 모델 개선에 사용하는 데이터 플라이휠을 구상했습니다. 좋은 머신러닝 모델 하나를 만드는 것보다, 제품이 사용되는 과정에서 자연스럽게 데이터가 쌓이고 그 데이터가 다시 더 좋은 제품을 만드는 구조가 훨씬 중요하다고 생각하게 된 계기였습니다. 다만 디어에서는 이 생각을 설계로 남길 수밖에 없었습니다.
디어를 나온 뒤에는 이 답을 MLOps에서 찾고 싶어 『MLOps 실전 가이드』 번역을 맡았습니다. 번역을 맡으면 어쩔 수 없이 깊이 공부하게 될 것이라는 마음도 있었습니다. 하지만 책은 넓은 분야의 수많은 키워드와 도구를 차례로 소개할 뿐, 데이터 수집부터 학습과 평가, 배포와 모니터링, 다시 학습으로 돌아오는 과정이 하나의 시스템 안에서 어떻게 맞물리는지는 충분히 보여주지 못했습니다. 불친절한 설명과 실습을 보완하며 개별 부품에 대한 지식은 늘어났지만, 이 조각들이 현실의 제품 안에서 한 번에 돌아가는 모습을 직접 이해하고 싶다는 갈증은 오히려 더 커졌습니다.
그래서 번역과 함께 Full Stack Deep Learning 강의를 찾아보고 MLOps 스터디도 꾸렸습니다. 머신러닝 생애주기를 처음부터 끝까지 훑으며 전체 지도는 조금씩 보이기 시작했지만, 강의와 책을 이해하는 것만으로는 디어에서 구상한 데이터 플라이휠이 실제로 작동하는지 알 수 없었습니다. 결국 데이터가 생기는 제품 안에서 수집과 학습, 배포와 피드백의 전 과정을 직접 연결해봐야 한다고 느꼈습니다.
이 싱크대 아이디어는 거대한 시장을 노린 아이디어라기보다, 디어에서 그려본 데이터 플라이휠을 작지만 완결된 현실의 시스템에서 끝까지 만들어볼 수 있는 문제라는 생각이 들어 출발하게 되었습니다. 설거지 중 비누칠을 하거나 식기를 옮길 때는 물이 필요하지 않지만, 매번 수도꼭지를 잠그고 다시 여는 일은 번거롭습니다. 카메라가 설거지 상황을 보고 물을 자동으로 조절하되, 사용자가 직접 수도꼭지를 조작한 순간을 모델의 오판에 대한 피드백으로 되돌린다면 어떨까 생각했습니다.
만든 것:
Raspberry Pi의 카메라 입력과 모델 추론, 솔레노이드 밸브 제어를 연결하고, 사용자의 조작 기록을 수집해 이후 학습에 사용할 수 있도록 만들었습니다. 실제 설거지 영상은 같은 영상 안에서도 장면 변화가 심했고 클래스 불균형도 컸습니다. 7개 영상에서 약 1만 장을 라벨링했지만 중요한 클래스 하나에는 13장밖에 남지 않았습니다. 이 경험은 한 번 만든 데이터셋으로 모델을 완성하려 하기보다, 사용 중 생기는 피드백을 계속 모아 다시 학습해야 한다는 생각을 오히려 더 분명하게 만들었습니다.
약 7분 길이의 설거지 영상에서 수천 프레임을 빠르게 분류할 수 있는 라벨링 도구를 만들었고, 데이터 수집과 라벨링, 검증, 학습, 모델 관리, 엣지 배포가 이어지는 MLOps 파이프라인을 설계했습니다. 완벽한 평가 지표부터 만들려다 전체 시스템의 완성이 늦어지는 순간에는 순서를 바꾸었습니다. 먼저 카메라 인식과 밸브 제어, 피드백 수집이 실제로 이어지는 end-to-end PoC를 완성하기로 했습니다.
사람과 완주:
이 프로젝트에서 기술만큼 많은 시간을 쓴 일은 팀의 얼라인을 맞추는 일이었습니다. 당시 연인이 팀에 있었고, 서로의 집에 우르르 들어가 프로젝트를 진행하기도 했고, 프로젝트가 끝나고는 팀원들과 함께 여행을 갈 만큼 서로 가까웠습니다. 하지만 사람 사이의 가까움과 프로젝트의 얼라인은 같은 것이 아니었습니다. 오히려 연인과 동료, 리더의 역할이 겹치니 서로가 이 프로젝트에서 무엇을 얻고 싶은지, 얼마나 시간을 쓸 수 있는지, 어떤 결과라면 함께 완주했다고 느낄지를 더 명확히 이야기해야 했습니다. 그래서 각자의 현재 기대를 갱신하고, 목표와의 개인 상황의 얼라인 상태를 1년이라는 긴 시간동안 주기적으로 맞추고 비교했습니다.
성과와 배움:
돈을 받고 하는 것이 아닌 개인 프로젝트는 길어지면 원래 목표는 흐지부지해지고, 사람들의 기여도도 떨어지기 마련입니다. 그럼에도 이 프로젝트는 그런 위험들을 잘 피해 나간 프로젝트였습니다. 그래서 좋은 성과가 있지 않았나 싶습니다.
이 프로젝트는 이후 제가 실패한 팀 활동과 비교했을 때, 팀원이 산만해 보일 때 개인의 태도부터 탓해서는 문제를 풀 수 없다고 정리하며 리더가 구성원에게 줄 수 있는 가치 × 프로젝트가 팀원 개인의 이익과 얼라인된 정도 × 팀원의 GRIT으로 나누어 어느 부분이 약한지 살펴봐야 한다고 정리하게 될 때 모범 사례로 쓰이게 되었습니다. 돌이켜보면 이 프로젝트에서 서로의 목표와 효익을 맞추기 위해 들인 시간은 앞의 두 요소를 높이려는 일이었습니다. 가까운 사이라는 이유로 몰입을 기대하거나 압박하는 대신, 리더가 줄 수 있는 가치를 만들고 이 프로젝트가 각자에게 왜 의미 있는지를 계속 설명해야 했습니다.
저 자신에게도 이 프로젝트를 계속하는 이유를 자주 물었습니다. “지금 기술을 공부하고 있는가, 프로젝트의 목표를 달성하기 위해 움직이고 있는가”를 구분하지 않으면 전체 MLOps 파이프라인에서 일부 요소의 기술적 탐구가 프로젝트 전체의 목표를 삼키기 쉬웠습니다. 완주에 필요한 기술만 선택하고 먼저 동작하는 시스템을 만들려 한 덕분에, 카메라 인식과 밸브 제어, 사용자 피드백이 연결된 PoC를 완성할 수 있었습니다.
결과물은 전국 대학생 물환경 정책·기술 공모전 환경부장관상으로 이어졌고, 자동 라벨링과 모델 지속 재학습 방법을 담은 「인공지능을 이용하는 수전 제어 방법 및 수전 장치」를 제1발명자로 특허 등록했습니다. 디어에서 설계로 남았던 데이터 플라이휠을 실제 장치로 구현한 일이면서, 관계와 이해관계가 복잡한 팀에서 왜 이 일을 계속하는지 설명하고 끝까지 완주하는 법을 배운 프로젝트였습니다.
자동으로 물을 틀어줘요
자동으로 물을 꺼줘요
재학습 전에는 잘 안됐어요
몇번 쓰다보면 좋아져요
IT로 문제를 해결하는 유튜브 채널
느슨한 연대 공동체 CREW
24.02~
…
개인이 모여 시너지를 내는 조직
느슨한 연대 공동체 CREW
23.07~24.12
…
네이버는 어떤 사람들이 어떻게 일할까
연구개발인턴 / 네이버 클라우드
24.01~24.07
…
여기서도 컴퓨터
AI 개발팀 / 공군 IT개발관리병
24.11~26.08
…
3. 그 외
교육
교육
Search
활동
대외활동
Search
포상
수상, 장학, 지원
Search
DB















