01 어린 시절
코딩을 배우기 전부터, 만드는 걸 좋아했습니다.
처음에는 사각블럭이었습니다. 블럭을 맞춰 새로운 모양을 만들며 노는 게 좋았습니다.
그러다 로봇을 조립하기 시작했습니다. 조립한 로봇을 제 뜻대로 움직여 보고 싶어서 코딩을 배웠습니다.
부품을 조립하고 코드를 고치며, 직접 만든 로봇을 움직였습니다.
track.run()
arm.raise()
arm.sweep()
laser.on()
krisamin
호기심이 던진 질문을,기술로 풀어냅니다.
궁금한 게 생기면 직접 만들어 봤습니다.
만들다 막히면 필요한 걸 배웠고, 배운 걸로 다음 것을 만들었습니다.
저의 이야기를 들려드릴게요
01 어린 시절
처음에는 사각블럭이었습니다. 블럭을 맞춰 새로운 모양을 만들며 노는 게 좋았습니다.
그러다 로봇을 조립하기 시작했습니다. 조립한 로봇을 제 뜻대로 움직여 보고 싶어서 코딩을 배웠습니다.
부품을 조립하고 코드를 고치며, 직접 만든 로봇을 움직였습니다.
track.run()
arm.raise()
arm.sweep()
laser.on()
02 2020
평범했던 일상이 갑자기 멈췄습니다.
2020년, 코로나19로 수업이 온라인으로 바뀌었습니다. 집에 머무는 시간이 길어지자, 해보고 싶던 앱과 웹페이지를 하나씩 만들기 시작했습니다.
필요한 정보는 여기저기 흩어져 있었습니다. 확진자 동선을 확인하고, 마스크가 남은 약국을 찾는 일부터 쉽지 않았습니다.
02 유바이러스, 마스크찾아줌, 유바이러스 AI
학생 개발팀 세미콜론에서 유바이러스와 마스크찾아줌을 만들었습니다. 글로 적힌 확진자 동선을 지도에서 볼 수 있게 했습니다.
마스크찾아줌에서는 주변 약국의 재고를 보여 주는 화면을 만들었습니다. 어느 약국에 마스크가 남아 있는지 살펴볼 수 있게 했습니다.
다른 팀과 만든 유바이러스 AI에서는 재난문자를 분석해 확진자 수와 주소를 뽑았습니다. 문장으로 온 정보를 데이터로 다뤄 본 작업이었습니다.
분석한 값을 사람이 입력한 정답과 나란히 비교하는 화면도 만들었습니다.
03 서버
만든 페이지를 직접 운영하는 일도 해보고 싶었습니다. 노트북과 NAS로 작은 홈서버를 돌리기 시작했습니다.
03 보안
서버를 켜고 페이지를 띄우는 것까지는 해냈습니다. 하지만 이대로 열어 두어도 안전한지는 알 수 없었습니다.
그래서 보안을 공부했습니다. 제가 띄운 서버가 어떻게 움직이는지, 어디서 예상과 다른 일이 생길 수 있는지 알고 싶었습니다.
CTF와 해킹방어대회에 나가 프로그램을 뜯어보고 문제를 풀었습니다. 만드는 쪽에서만 보던 코드를, 깨지는 쪽에서도 보게 됐습니다.
03 워크스테이션
직접 만든 서비스를 그 위에 올리고, 접근 권한과 보안, 배포와 복구까지 함께 챙깁니다.
Talos와 Kubernetes 위에 서비스를 올리고, GitOps로 설정과 배포를 관리합니다. 백업한 데이터는 임시 환경에 실제로 복원해, 다시 쓸 수 있는지도 확인합니다.
처음에는 웹페이지 하나를 띄우는 게 목표였습니다. 지금은 서비스가 돌아갈 환경을 만들고, 문제가 생기면 원인을 찾아 복구하는 일까지 합니다.
04 한국디지털미디어고등학교 해킹방어과, DIN
고등학교에서는 함께 생활하는 사람들이 쓸 서비스를 만들었습니다. 한국디지털미디어고등학교 해킹방어과에 진학해 교내 개발팀 DIN에서 활동했습니다.
급식 확인, 잔류와 귀가 신청, 세탁 신청. 기숙사 생활에 필요한 기능들이 여러 곳에 나뉘어 있었습니다. 팀과 디미고인을 다시 만들며 하나의 서비스로 모았습니다.
React Native 앱과 서버 API를 만들고, 고친 코드가 사용자에게 전달되도록 빌드와 배포를 연결했습니다. 스토어 심사 없이 JavaScript 코드를 갱신하는 기능도 붙였습니다.
같은 코드로 앱을 만들어도 운영체제마다 차이는 남았습니다. 네이티브 기능도 다뤘고, SwiftUI로 만든 급식 iOS 앱에서는 잠금 화면에도 메뉴를 띄웠습니다.
제가 고친 코드를 친구들과 선생님들이 매일 썼습니다. 개발팀은 기수마다 바뀌었기에, 다음 사람이 읽을 기록과 인수인계도 중요했습니다.
05 소리를 전달하는 다른 방법
안내 방송과 수업, 옆 사람과의 대화. 소리로만 전달되는 정보는 듣기 어려운 사람이 놓치기 쉽습니다.
주변 상황을 알고 대화에 참여할 수 있도록, 소리를 다른 방식으로 전달하는 방법을 팀과 연구했습니다.
그렇게 팀 RUKU에서 AIBA를 만들었습니다.
05 AIBA, 팀 RUKU
AIBA에서는 소리가 난 방향에 카메라로 본 정보를 더했습니다. 방향만 가리키는 데서 나아가, 주변에 무엇이 있는지도 알려 주려 했습니다.
카메라 영상에서 거리를 추정하고 물체를 찾는 처리를 만들었습니다. 결과를 보여 줄 모바일 앱과, 기기의 정보를 받아 처리할 중앙 서버도 개발했습니다.
팀이 계산한 소리 방향과 영상 정보를 이어 화면에 띄웠습니다. 카메라와 마이크, 보드와 서버를 함께 다뤘습니다.
05 HearBridge, 팀 RUKU
HearBridge는 주변 대화를 글자로, 사용자의 수어를 음성으로 전하는 방법을 연구했습니다.
녹화 영상에서 얼굴과 입 주변을 잘라 모델에 넣는 립리딩 처리를 만들었습니다. 수어 영상에서는 프레임을 고르고 사람과 자세를 찾는 코드도 작성했습니다.
화면을 눈앞에 띄울 기기도 만들었습니다. Triton Project 프레임을 Fusion에서 고치고, 3D 프린터를 두 달 빌려 부품을 뽑았습니다. 팀원들과 센서, 보드, LCD, 반사판을 헤드셋에 담았습니다.
05 ISEF 2024, Finalist
팀과 함께 HearBridge로 ISEF 2024에 Finalist로 참가했습니다. 영상 처리와 직접 만든 헤드셋을 활용한 소통 연구를 소개했습니다.
매일 쓸 수 있는 물건이 되려면 남은 일이 많았습니다. 실제 사용자의 의견을 더 듣고, 다양한 입력 조건에서도 동작하는지 살펴봐야 했습니다.
무게와 발열, 전력도 해결해야 했습니다. 코드가 동작해도, 매일 머리에 쓰기에는 더 다듬어야 했습니다.
06 지금, 개인 프로젝트
개인 프로젝트에서도 앱을 만들고 서버를 운영했습니다. 할 수 있는 일은 늘었지만, 조사와 구현, 운영과 검토는 여전히 제 시간을 써야 했습니다.
하나를 붙잡고 있는 동안 나머지는 기다렸습니다. 기술을 더 배운다고 풀리는 문제가 아니었습니다. 이미 할 수 있는 일을 동시에 굴릴 방법이 필요했습니다.
07 생성형 AI와 에이전트
앞선 연구에서는 AI로 영상과 소리를 처리했습니다. 생성형 AI와 에이전트가 발전하면서, AI를 기능으로 쓰는 것뿐 아니라 함께 일하는 방법도 생각하게 됐습니다.
AI가 답이나 코드만 제안하는 데서 나아가, 자료를 찾고 도구를 써서 일을 이어 간다면 어떨까.
채팅 화면에서 답을 받는 것만으로는 부족했습니다. AI가 자료를 읽고 기기에서 도구를 쓸 수 있어야 했습니다. 저도 그 진행과 결과를 확인할 수 있어야 했고요.
07 ara, AI 에이전트 인프라
ara에서는 큰 일을 나눠 여러 작업 세션에 맡깁니다. 에이전트는 문서와 지난 기록을 읽고, 연결된 기기의 도구를 써서 일을 이어 갑니다.
돌아온 결과를 확인하고 다음 일을 정합니다. 모자란 부분은 다시 맡기며 여러 작업을 함께 이어 갑니다.
웹과 앱부터 서버와 기기 데몬, 검색과 모델 연결, 배포와 운영까지. 그동안 따로 해왔던 작업들을 ara 하나를 만드는 데 함께 쓰고 있습니다.
이제는 서비스를 만드는 일과 함께, 일을 나눠 진행할 환경도 만듭니다. 한 번에 하나씩 붙잡고 있던 일을 AI와 함께 더 많이 해보고 싶습니다.
다시, 지금
로봇을 움직이고 싶어 코딩을 배웠고, 만든 웹페이지를 직접 운영하다 보안도 공부했습니다. 학교에서 쓰는 앱을 만들고, 소통 방법을 연구하며 영상 처리와 기기 제작도 해봤습니다.
지금은 AI와 함께 더 많은 일을 해볼 환경을 만듭니다.
이제는 AI와 함께 어디까지 만들어 볼 수 있을지 궁금합니다.
박성민 Seongmin Park