“서비스 성공을 위해 영역을 넓혀라!”…박규빈 개발자

키오스크 프로그램 개발을 묻기 위해 윈도 환경 개발자 박규빈 개발자를 만났다. 박 개발자는 네임스티커와 포토스티커 전문 키오스크 업체인 영인터내셔널에서 일하고 있다. 그는 회사에서 전반적인 개발을 맡아 사내 개발자들을 서포트하고 있다. 그에게 윈도 환경 키오스크 프로그램 개발 과정과 사용하는 도구 그리고 그의 프로젝트들에 대해 자세히 들어 봤다.   

Q. 키오스크 프로그램 개발이라고 막상 말을 하면 막막하다. 키오스크 개발은 어떻게 구성돼 있는가?

영인터내셔널의 경우, 개발자 4명, 디자이너 2명이 모여 일하고 있다. 프론트엔드는 키오스크 화면 부분을, 클라이언트라 불리는 백엔드 그리고 서버로 나누어 개발한다. 나는 이 세 가지 모두를 조화시키고 봐주는 팀장 같은 역할을 맡고 있다. 4명의 개발자는 각각 프론트엔드, QA와 클라이언트 개발, 인턴 개발자로 구성돼 있다. 난 전반적인 개발에 참여하고 있다. 

Q. 키오스크 구동 운영체제가 주로 윈도인 것으로 알고 있다. 윈도 XP와 윈도 10 환경 키오스크를 자주 본다. 장점이나 단점이 있는가?

영인터내셔널에서 만든 네임 스티커 자판기다. 사진 기준 오른쪽이 ‘폴라폴라’며 왼쪽이 ‘해피네임스티커’다.

우선 영인터내셔널 상황을 말해야 이 대답을 할 수 있겠다. 올해로 내가 회사에 들어온 지 약 2년 정도 됐다. 불과 2년 전 다른 개발자님이 계실 때에는 윈도 XP와 윈도 10을 혼용해서 키오스크 프로그램을 개발했다. 그때는 개발부서가 아닌 운영 부서가 윈도 XP를 더 선호했다. 운영 부서가 윈도 XP로 운영하기가 더 안정적이라고 판단했던 것 같다.

내가 입사 후 윈도 XP와 윈도 10을 혼용하는 방식을 개선하고자 했다. 예전 장비는 윈도 XP였지만, 새로 준비하는 과정에서 완전 제품 PC를 사면 윈도 10였다. 새로 꾸린 장비를 키오스크에 넣을 때, 기존 윈도 XP와 달리 윈도 10이었던 탓에 운영이 불안정 했다. 

윈도 XP는 업데이트를 막을 수 있었지만, 윈도 10은 자동으로 업데이트 됐다. 그래서 키오스크 라우터가 전부 소진됐다. 라우터는 키오스크를 인터넷에 연결하기 위해 사용하는 3G 통신 모뎀이다. 당시 라이선스 개념이 부족해, 윈도 홈 버전 라이선스를 사용하던 상황이었다. 윈도 홈 버전은 업데이트가 강제돼 있어 수십GB 용량을 다운로드해, 라우터의 잔여 데이터가 다 소진되는 상황을 경험했다. 이런 경험을 통해, 윈도 10 홈 버전 라이선스 정책을  바로 알고 윈도 임베디드 버전으로 변경했다. 윈도 XP 환경에서 윈도 10 환경으로도 변화를 추구했다. 현재는 윈도 10 1607 LTSB를 사용 중이다.

윈도 XP 환경을 계속 쓰다 보면 개발자 입장에서는 장기적인 발판이 사라진다. 윈도 XP는 닷넷(.Net Framwork) 3.5버전까지만 잘 지원한다. 닷넷 4 버전 이후 부터는 잘 지원되지 않는 걸로 알고 있다. 윈도 XP와 윈도 10을 혼용해 사용하면, 품질 보증(QA) 측면에서 비용이 많이 든다. 직접 조직 내부에 요청해 모든 환경을 윈도 10으로 일치시켰다. 

Q. 닷넷 프레임워크와 닷넷 코어는 어떻게 윈도 환경 기반 키오스크 개발에 이용되는가? 

닷넷 코어(.Net Core)는 출시된 지 그리 오래되지 않았다. 닷넷 코어는 모든 플랫폼에(리눅스, 윈도 등) 사용할 수 있도록 만들어졌지만, 닷넷 프레임워크는 오로지 MS 기반으로 윈도 환경을 위해 만들어졌다. 많은 사례로 봤을 때, 닷넷 프레임워크가 더 적합한 기술이라 봤다.

물론, 닷넷 프레임워크도 최신 기술만 쓰는 것이 아니다. 회사의 경우, 닷넷 4.6.1만 사용했다. 닷넷 프레임워크는 4.8 이상 버전까지 나왔지만, 최신 버전을 사용하지 않는 이유는 업데이트 측면에서 부담되기 때문이다. 네트워크 환경이 불안정한 상태에서 라우터로만 업데이트 한다. 매번 윈도 업데이트를 하도록 내버려 두면, 라우터가 감당하기 어렵다. 키오스크 개발 경험이 많으며, 오래되고 안정적으로 할 수 있는 4.6.1을 기반으로 작업하고 있다.

닷넷 코어는 서버 부분에서 사용하고 있고, 키오스크 기술 부분에서는 닷넷 프레임워크를 사용하고 있다. 이 둘을 호환하는 규격이 ‘닷넷 스탠다드(.Net Standard)’다. 닷넷 코어와 닷넷 프레임워크가 동일하게 C#이란 프로그래밍 언어를 사용할지라도, 특정 프레임워크에 종속되지 않으려면 둘 다 나눠서 개발해 파편화를 이뤄야 한다. 예를 들어, 서버에서 쓰는 도메인 로직과 키오스크에서 쓰는 도메인 로직이 동일한 경우가 있다. 서버와 키오스크를 동시에 개발하려면, 이 둘을 통합 후 서버와 키오스크 혼용 로직을 활용해 구현해야 한다. 

Q. 윈도 환경 프로그램 개발에 있어, C# 이외에 자바스크립트(JavaScript)는 키오스크에 어떻게 사용하는가?

먼저 왜 자바스크립트를 채택했는지 이야기해야 할 것 같다. 입사 전 키오스크 개발은 윈폼(WinForms) 기반으로 했다. 윈도 환경 키오스크 UI는 윈폼과 WPF(Windows Presentation Platform) 등 두 가지로 나눌 수 있다. 처음 만든 키오스크가 윈폼 기반이었는다. 개발 레거시(기술 부채)가 너무 크다 보니 신규 프로그램을 개발하기에 한계점이 많았다. 이참에 새롭게 개발하면서 겸사 겸사 WPF를 접목했다. WPF는 UI를 더 이쁘게 손볼 수 있고, MVVM(Model + View + ViewModel)이란 패턴을 사용해 프로그램 개발이 용이하다는 이유로 채택했다.

WPF로 자사 프로토타입인 ‘해피 인스타그램’이란 키오스크를 만들었다. 제품을 출시하고 제품에 대해 평가하는 동안, 생각보다 고객 요구사항이 자주 바뀌면서 업데이트 문제가 발생했다. WPF로 개발하면 용량이 한번 업데이트 할 때 무려 100~200MB나 된다. 라우터 용량에 한계가 있는 경우가 많아서, 업데이트로 라우터 용량을 다 소진할 수는 없었다. 사업의 다양한 상황에 발 빠르게 대응하려면 업데이트가 잘 돼야만 했다. 그래서 찾아낸 방법으로, 자바스크립트로 키오스크 화면인 프론트엔드를 구성하고 백엔드에 서버를 구성하기로 했다. 키오스크를 화면과 백엔드로 분리시킨 후, 업데이트 용량이 10MB로 1/10이나 줄었다. 지금은 이미지와 상품 개수가 늘어 50MB로 늘었다. 화면 부분 업데이트를 자주 하기 위해서 자바스크립트를 도입했다. 스티커 이미지를 그려주는 로직도 다 프론트엔드에 뒀다.   

Q. 키오스크에서 주문 내역 관리는 어떻게 하는가?

상품 주문형식의 키오스크와 다른 게, 본사보다는 직영에서 관리하는 체제에 가깝다. API를 제공하는게 아니라, 자체 대시보드(Dashboard)를 제공한다. 제품 판매 내역, 키오스크 고장 또는 장애 위치를 대시보드 통해 보여줬다.

Q. 키오스크 DB(업체, 매장, 품목 정보, 매출 데이터 등)는 무엇을 주로 사용하는가? 

라이트DB(LiteDB), 코스모스DB(CosmosDB), 애저 테이블 스토리지(Azure Table Storage)를 활용 중이다. 초창기 빠르게 개발해야 하다 보니, 데이터 테이블을 하나 씩 만들거나 관리하기가 힘들었다. 일단 데이터를 다 넣고 나서 관리하자고 해서, 코스모스DB를 도입했다. 코스모스DB는 문서DB지만, SQL 명령어로 쿼리를 써서 활용할 수 있다는 장점이 있다. 그래서 개발 용이성과 효율성을 기준으로 코스모스DB가 괜찮다고 판단했다. 서비스를 전개할 때 DB를 고칠 필요 없이, 프론트엔드에서 데이터 값을 어느 정도 정의하고 서버 API 수정만 하면 됐다. DB에 힘을 쓰기 보다, 프론트엔드나 클라이언트에 집중할 수 있었다. 애저 테이블 스토리지(NoSQL)는 캐시 용도로 사용했다. 키오스크의 경우, 레디스(Redis)를 도입할 만큼 가용성이 중요하지 않았다. 네트워크가 불안정하므로 데이터 동기화가 즉각적일 수 없기 때문이다. 가끔 업데이트와 로그를 남기는 정도라면 테이블 스토리지로 충분했다. 코스모스DB와 테이블 스토리지를 서버 단에서 사용했다.

그전에는 키오스크 기기에는 SQL라이트(SQLite)를 사용했다. SQL라이트는 관계형DB(RDB)로, 로컬에서 테이블을 쓰기가 번거로웠다. 로컬과 서버 모두에서 NoSQL로 맞추고자 라이트DB를 도입했다. 

물론 무엇을 쓰든지 간에 단점은 존재한다. NoSQL로 사용하니 데이터 정리가 잘 안 됐다. 쌓인 데이터를 정리해서 보려고 할 때 무려 10분이나 소요됐지만, MySQL(관계형DB)의 경우 1분이면 충분했다. 이런 최적화 측면에서 아쉬움은 있지만, 그렇게 중요한 이슈는 아니다.

Q. 키오스크는 확실히 네트워크 환경이 중요해 보인다. 키오스크에 사용되는 클라우드 서비스는 무엇이 있는가? 

내가 입사하기 전에는 AWS, 애저, GCP를 사용하지 않고 있었다. 그당시 프로그램 업데이트를 하기 위해 온클라우드(ownCloud)라는 파일 동기화용 클라우드 서비스를 사용했다. 온클라우드는 프로그램을 업데이트할 때 굉장히 불편했다. 자체적으로 쓴 온클라우드를 완전히 걷어내고 애저 블롭(Blob) 스토리지를 사용했다. 블롭 스토리지는 싸고 간단하며, 편리하게 도입할 수 있어 사용하게 됐다. 

장기적으로 볼 때 클라우드 서비스를 쓰는 이유는 클라이언트 개발에 주력 하다 보니, 서버 관리자를 따로 뽑거나 일을 추가하기 어렵기 때문이다. 대기업 클라우드 서비스를 사용하면 알아서 잘 관리를 해주므로, 사업 핵심 역량에 집중할 수 있어 좋았다. 또한 애저 펑션(Azure Functions)을 많이 활용하고 있다. 

Q. 일부 키오스크 개발자들은 UI 디자인 공부도 한다고 들었다. 박규빈님도 UI 디자인 공부를 하는가?

내가 UI에 관심을 가지게 된 이유는 고객에게 인정을 받기 위해서였다. 내가 아무리 좋은 프로그램을 만들더라도 고객이 디자인을 별로라 말하면, 그 프로그램은 그저 그런 프로그램인 셈이다. 고객들에게 좋은 인식을 얻으려면, UI를 절대 빠뜨릴 수 없다. 

키오스크에서 UI는 고객과 키오스크 업체 간에 ‘1:1로 접대한다’고 생각한다. 키오스크 개발자에게 UI 디자인 공부는 필요하다. UI는 서비스 구현을 잘 실현하기 위한 도구다. 그렇기에 디자인 공부를는 하지 않겠다고 말한다면, 서비스 실현을 안 하겠다는 말과 같다. 키오스크 개발자는 개발자로서만 공부한다기 보다, 사업 측면에서 성공적인 개발을 하는 사람이 되고 싶다면 UI 디자인 공부를 해야 할 것이다. 

내가 만든 서비스가 어떻게 사용되는지 현장에 나가서 봤다. 제품을 내놓았을 때 3초 이내로 ‘저 제품을 사야 한다’고 고객의 마음을 건들면 성공한 것으로 판단했다. 개발 공부를 붓을 들고 그림 그리는 것에 비유하자면, UI 공부는 그림을 그리기 위한 다양한 표현을 배우는 것이라 생각한다. 서비스가 성공하기 위해서는 끊임없이 사용자 스토리를 고민해야 한다. 어떤 스토리를 제공해줘야 사용자가 사용할 수 있을지 말이다.

Q. 개발자를 희망하는 대학생이나 고등학생 중 “개발만 할 거다!”라 주장한다면, 해주고 싶은 말이 있는가?

개발자 직군은 여러 분류로 나눌 수 있다. 개발만 할 수 있다면, 개발만 하는 것이 맞다. 다만, 지금 개발 환경과 10년 전 혹은 20년 전 개발 환경은 사뭇 다르다. 10년 전 20년 전 개발 환경은 하드웨어에 가까웠다면, 지금 개발은 표현 수단에 가까워지고 있다. 하드웨어에 있던 많은 이슈를 선배들이 많이 해결했고, 우리는 그 위에서 일을 하고 있다. 누군가에게 서비스를 제공하는 일을 하게 된다면, 내가 서비스를 받는 사람에게 어떤 서비스를 제공할 건지에 대해 고민하는 것이 중요할 것이다. 결국 서비스 업계에 일하는 사람이 인간에 대한 이해가 없이 오로지 개발만 할 수 있을 지 의문이다. 

Q. 이미 했거나 아직 준비 중인 프로젝트가 있다면, 소개해달라.

어반리스트(urbanlist.kr)란 팀에서 몇 가지 프로젝트를 진행했다. 먼저 진행 중인 프로젝트를 소개하자면, ‘수잔 에니어그램 검사지’가 있다. 소비자를 이해하기 위해 심리 검사에 관심을 가졌다. 에니어그램 커뮤니티에 활동하다 보니 수잔 에니어그램이 좋다고 들었다. 기존 에니어그램 단점은 사람이 일일이 엑셀 파일을 다운받아 수작업으로 체크하는 불편 사항이 있었다. 그걸 해결하고자 웹에서 쉽게 에니어그램을 할 수 있도록 만들었다. 아마 10월 12일 기준으로 약 4주 후면 배포할 것이다. 

One Fine Day’란 프로젝트가 있다. 디자이너 친구가 “매일 하늘 색은 아름다운데, 이 세상에는 나쁜 일이 가득하다.”는 말을 듣고 시작했던 프로젝트다. 라즈베리 파이에 작은 카메라를 붙여 하늘을 찍었다. 기계로 하늘색만 분석해 배경으로 판별 후 하늘색을 구현하고, 그 밑에 기사들을 붙여 함께 보여줬다.

‘소녀돌봄약국’이란 프로젝트도 했다. 서울시에서 소녀돌봄약국이란, 13~18세 여학생에게 월 1만 원 정도 약품을 지원하는 정책이 있었다. 좋은 정책이지만, 관련 사업을 시행하는 약국은 알려주지 않았다. 서울시 내에 모든 소녀돌봄약국을 지도에 보여주고, 1만 원으로 무슨 약을 살 수 있는지 나열해 편의를 제공하는 프로젝트였다. 

Q. 앞으로(향후, 당장 1년 뒤) 어떤 개발자가 되고 싶은가?

서비스에서 성공한 개발자가 되고 싶다. 과거에는 개발자로 어떻게 개발만 할지 찾아봤다면, 지금은 초점이 변화되고 있다. 어렵게 구현한 프로그램이 고객에게 어떻게 인정받는 서비스가 될지, 고객이 왜 쓰는지, 내가 만든 서비스를 통해 고객은 요구를 다 충족했는지에 관심을 두고 있다. 지금 나는 개발자 영역에만 종속된 것이 아니라, 개발자 영역에 중심을 두고, 다른 영역으로 천천히 확장하고 있다. 내가 만든 서비스를 어떻게 고객이 사용했는지 정리한 다음, 고객 인터뷰와 SNS 활용 사례를 찾아보며 더 좋은 개발을 위해 학습하고 있다. 앞으로 어떤 상품을 내야할지 지금도 고민하고 있다. 나는 앞으로 좋은 서비스를 개발한 개발자로 남고 싶다.

이예찬 기자 : “그 희망 이루길 바란다!”

주말 점심시간, 쉬어야 하는 시간임에도 인터뷰 시간을 내준 박규빈 님 감사합니다!

박규빈 님이 다니는 회사, “영인터내셔널” 홈페이지 주소 : https://youngint.com

본 회사를 더 자세히 알고 싶다면,  https://www.notion.so/YoungInt-Labs-Teams-642055456ffa4235956d151189c55d87을 참고하라.

박규빈 님이 소개한 프로젝트는 다음과 같다. 

수진 에니어그램 검사지: https://urbanlist.kr/content/enneargram/
One Fine Day: https://urbanlist.kr/content/one-fine-day
소녀돌봄약국: https://urbanlist.kr/content/소녀돌봄약국