바이코로나 개발기

개발 동기

작년 초 나는 바이코로나 라는 실시간 코로나 상항 웹사이트를 만들었다. 내가 만들때도 다양한 사이트가 있었지만 가장 아쉬웠던 것은 코로나 관련 뉴스였다. 코로나 관련 다양한 정보를 주지 않는다는 것이었다. 그래서 코로나 뉴스를 중점적으로 알려주는 사이트를 만들기로 하였다.

개발 과정

우선 코로나의 실시간 정보를 얻을 곳에 대해 알아보았다. 우선 나는 보건복지부 사이트에 들어갔다.

나는 이를 크롤링하여 API로 만들기로 하였다. 보건복지부 사이트를 파이썬에서 requests 를 이용해 데이터를 받았다. 그뒤  BeautifulSoup 를 이용해 내가 원하는 정보만을 추출했다. 이를 분류해 시도별과, 지역별로 코로나 현황을 알 수 있도록 하였다.

corona.py 의 모습

그뒤 php를 이용해 웹사이트를 만들어 이 데이타를 호출하도록 만들었다. 이 데이터를 조금더 편하게 보도록 하기 위해 구글 차트를 사용해 표시를 해주었다. 지역별로 코로나 발생 현황을 볼수 있다. 또한 각 지역을 확진자에따라 등급을 부여해 안전, 경고, 위험으로 나누었다. 그리고 뉴스의 경우 NewsAPI에서 검색어를 ‘코로나’로 해서 받은 정보를 보여주었다

바이코로나의 초기모습

하지만 나는 이로 만족하지 못했다. 그래서 ‘카카오톡 채널’을 이용해 보기로 했다. 카카오톡 채널을 통해 코로나 확진자의 상황을 알 수 있도록 하기로 하였다. 그래서 kako.py 라는 카카오 채널용을 위한 새로운 백엔드를 작성했다.

이렇게 하여 코로나의 현황을 더 쉽게 볼 수 있도록 하였다.

업데이트

나는 그뒤 바이 코로나를 업데이트 하였다. 우선 뉴스를 더 쉽게 볼 수 있게 하도록 하였다. 그리고 PHP에서 리엑트로 개발 환경을 변경하였다.(요즘은 PHP보다 자바스크립트가 더 편하다)

카카오톡은 앞으로 수정해야 한다(카카오 API 메뉴얼이 바뀌었다 ㅠ)

개발 소감

코로나 사이트를 나혼자 만들어 본 것 자체가 나에게는 좋은 경험이 되었다. 특히 웹 크롤링에 대해 잘 배울 수 있는 좋은 기회가 되었다. 그리고 나만의 ‘뉴스’ 라는 특별한 주제로 코로나 사이트를 만든것이 다른 사이트와의 차이점을 준 것 같다.

빅스비 캡슐 공모전 시즌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 테스트를 통해 내가 생각하지 못했던 불편함이나 오류 등도 잡을 수 있었다.