빅스비 캡슐 공모전 시즌2 참여기

빅스비 캡슐 챌린지 시즌2 홍보물

개발 동기

이 캡슐을 만들때 인공지능에 관해 관심이 많이 있었다. 그중에서도 보이스 어시스던트 라고 하는 ‘빅스비’나 ‘시리’에 특히 더 관심이 많았었다. 텐서플로우를 배우면서 나도 파이썬으로 인공지능 하나 만들어 보아야지 라는 생각으로 빅스비나 시리의 작동 원리에 대해 관심이 생기게 되어 검색하다 우연히 이 대회를 보게 되었다. 마침 빅스비에 관심이 많이 있던 터라 빅스비 캡슐 공모전 시즌2에 참가해 보기로 하였다.

개발 과정

우선 나는 평소에 느꼈던 불편함인 ‘어떤 책을 읽을까’하는 고민을 도와 줄 수 있는 캡슐을 만들어 보고 싶었다. 그래서 내가 좋아하는 책을 바탕으로 책을 추천해주는 캡슐인 ‘북매니저‘를 만들어 보기로 하였다.

먼저 책을 추천할 방법에 대해 고민해 보았다. 직접 책을 추천하는 인공지능을 만들기 위해 도서 분류 코드를 활용해 보기로 하였다. 도서관에서 흔히 관련있는 책을 찾을때 도서 분류 코드를 이용해 카테고리화 해서 분류하고 찾는다는 점을 이용해 분류코드를 이용하면 관련있는 책들을 찾을 수 있지 않을까 생각이 들었다. 하지만 이 방법은 도서량이 너무 많고 방대해서 쓰기가 어렵다는 생각이 들었다. 또한 같은 코드라고 해서 그 책이 사용자가 좋아하는 책이랑 비슷한 종류가 아닐 수도 있기 때문이다.

그래서 나는 도서관 정보나루 라는 곳에서 연관대출도서 라는 API를 이용해 책을 추천하기로 하였다.

https://www.data4library.kr

최고의 연관 도서는 아마 많은 사람들이 연관해서 빌린 것이 데이터 양도 많고 사람의 통계이기 때문에 사람들을 위해 서비스를 제공하는데는 더 좋은 방법이 될 것 같았다.

마이북이라는 내 도서 목록을 만들때는 MySql과 PHP를 이용했었다. 캡슐에서 POST요청을 보내면 백엔드에서 명령어에 따른 추가, 조회, 삭제를 해주고 그에따른 결과를 리턴해 주었다. 원래는 빅스비에서 바로 데이터베이스에 접근하는 방법을 알아보려 했으나 딱히 마땅한 방법이 없고 빅스비 스튜디오에서는NPM을 사용 할 수 없기에 따로 백엔드 서버를 구축하는 방법을 사용하였다.

책을 검색하는 것은 알라딘 OpenAPI를 사용했다. 북매니저 추천하거나 검색하게 해주어 연결된 링크로 구매하면 수익도 조금 들어온다. (아직까지는 제대로된 수익은 없었다)

지금은 PHP의 유지보수가 힘들고 자바스크립트가 훨씬 편해서 백앤드 서버를 Node.js로 수정하였다.

빅스비의 뷰를 개발하는 것은 제일 힘든 단계였다. 빅스비의 전용 언어는 처음써보는 언어이고 지금까지 사용한 언어와는 많은 차이점이 있었다. 그래도 공식사이트에서 제공하는 솔루션들을 사용해 개발해보니 제법 깔끔하게 UI가 나와주었다.

소스코드는 깔끔하지 않다

내가 제일 신기해한 기능은 바로 trainng 이었다. 빅스비를 학습시키는 곳인데 내가 처음에 제일 걱정했던 학습이 매우 간단한 방법으로 할 수 있어서 안심되면서 신기했다.

학습된 말들

우선 빅스비는 골 이라는 개념이 있다. 골은 어떤 명령을 실행시키는 것이다. 예를 들어 mybo 라는 골은 마이북을 조회하라는 명령이다. 사용자의 네이티브 언어(한국어, 영어 등 우리가 평소에 대화하는 언어) 에 따라 이 골을 실행하도록 학습시키는 것은 매우 간단하다.

‘수학귀신 책 찾아줘’ 를 학습시키는 과정

위 예시에서 원하는 골은 FindBook 이고 이 골에 전달해 줄 변수는 책의 이름인 ‘수학귀신’ 이다.(그당시 한동안 이 책만 읽을정도로 좋아했던 책이었다) 이를 학습시킬려면 골을 선택해주고, 예시문장을 입력하고, 변수로 전달해줄것을 드래그 해주면 끝! 학습이 된다. 그리고 위에 컴파일을 눌러주면 알아서 학습을 해준다.

빅스비를 그대로 재현한 테스터

내가 제일 좋아했던 부분이다. 그냥 빅스비를 가져다 놨다. 왼쪽에 원하는 말을 입력해주고 Run NL을 누르면…

우리가 빅스비를 실행했을때와 똑같은 화면에서 내가 만든 캡슐을 볼 수 있다. 여기서 원하는 책을 터치하면 더 자세한 정보를 볼 수 있다.

자세한 정보를 알 수 있다

이렇게 책에 대한 자세한 정보를 알 수 있고 마이북에 등록을 진행 할 수 있다.

오류가 나거나 디버깅을 할때도 디버거가 매우 잘 구성되어있다. 블럭형 그래프 구조로 순서를 쉽게 볼 수 있다.

이러한 좋은 툴이 있어도 혼자 하는것은 어려웠다. 하지만 우리에겐 오피스 아워가 있다!! 삼성전자 사옥에 가서 직접 개발자 분들과 이야기 하며 질문해볼 기회를 놓치지 않고 바로 신청했다

오피스 아워 시간표
나는 1시 타임을 신청했다
메일로 친절히 안내해 주셨다 (이름은 개인정보 보호를 위해 가렸다)

결과

아쉽게도 결선 진출은 놓쳤지만 입상을 했다. 입상도 내게는 아주 큰 상이라 느껴진다. 그 이후로 더 참여하고 싶었으나 코로나 때문인지 더이상의 캡슐 챌린지는 없었다.

개발자 포탈에 올라온 나의 캡슐
내가 받은 상장이다 (이름은 개인정보 보호를 위해 가렸다)

느낀점

우선 나는 이때가 처음으로 자바스크립트를 접했을 때이다. 이때부터 지금까지 계속 사용하고 있지만 처음에는 접할때 까다로웠던 언어였다. 특히 자바스크립트의 비동기 처리는 나를 제일 골치아프게 하였다. async, 프러미스, 콜백 등 모든것이 이해하기가 어려웠다. 아직까지도 자바스크립트를 하면서 제일 어려운것이 프러미스와 비동기 인것 같다. 또한 새로운 언어인 빅스비의 언어는 적응하는것이 너무 어려웠다. 빅스비의 UI를 개발하는 것은 지금까지의 프론트엔드 개발보다 새로운것이 많고 플랫폼 자체가 달라서 이를 개발하는데 많이 애썼다.

하지만 빅스비 디벨로퍼 센터에서 모든것이 다 나와 있어서 개발 하기가 훨씬 수월했다. 또한 빅스비 스튜디오라는 전용 개발 IDE가 있어 개발, 테스트, 배포까지의 과정이 간편했다. 특히 On-Device 테스트를 통해 내가 생각하지 못했던 불편함이나 오류 등도 잡을 수 있었다.

댓글 남기기