카이스트 몰입캠프

seoyeon hwang
8 min readFeb 28, 2020

--

2018년 12월부터 2019년 1월까지 5주동안 카이스트 몰입캠프에 참가했다. 컴퓨터학과를 전공했지만 개발 실력이 늘 부족하다고 생각해서 지원하게 되었고, 운좋게 합격했다.

그리고 이 5주 동안의 경험을 통해 개발에 대한 자신감이 어느정도 생겼고, 매주 스타트업 종사자분들의 강연을 들으며 스타트업의 매력에 빠지게 되었다. 그 중 가장 마음에 드는 회사였던 나우버스킹에 지원하여 현재 개발 인턴으로 일을 하고 있다.

이 글에서는 5주동안 내가 어떤 것을 했고, 무엇을 느꼈는지 간단하게 적어보려한다.

1주차

1,2주차는 공통 과제였고 안드로이드 앱 만들기였다. 조건은 탭 3개로 구성 되어 있어야 하며 첫번째 탭은 연락처, 두번째 탭은 갤러리 마지막 탭은 자유주제로 구현해야했다. 우선 나는 연락처를, 플메분이 갤러리 구현을 하기로 하였다. json형태로 저장된 데이터를 파싱해서 listview로 보여주었다. 안드로이드를 처음 해봐서 초반에 개념 잡기가 힘들어서 무척 헤매었다. listview는 무엇이고, fragment, activity 등 다 헷갈렸다. 같은 분반 사람들께 물어보면서 연락처를 구현하고 나니, 약간 자신감이 생겼다.

3번째 탭에 무엇을 할까 고민을 하던 중 영화 ‘보헤미안 랩소디’가 떠올랐고, 퀸의 노래를 넣으면 좋겠다는 생각을 했다. 그래서 유튜브에서 퀸의 노래들을 가져와서 recycler view로 보여주었다. 내가 유명한 노래들로 직접 선정하여 내맘대로 신나는 노래, 잔잔한 노래 이렇게 나눠서 구현하였다.

유튜브에서 추천순이나, 재생순으로 정보를 크롤링해서 보여주면 더 좋았을 것 같다는 아쉬움이 남았지만 유튜브 api를 사용해본 것에 의미를 두었다. 또한 누군가와 git을 통해 협업해 보았다는 것도 의미가 있었다. 내가 만든 프로젝트를 git에 올리는 것만 해봤는데 처음으로 남이 짠 코드도 pull해보았다. 안드로이드와 git에 대한 전체적인 틀을 잡을 수 있는 첫 주였다.

2주차

2주차 과제는 1주차 과제의 업그레이드 버젼으로, 서버와 database를 이용하여 안드로이드 앱 만들기였다. 조건은 1주차와 동일하였다. 학교에서 데이터베이스 수업을 들었기 때문에 database에 대한 기본적인 개념은 알고 있었지만, 서버에 대한 개념은 거의 없는 상태였다.

그래서 2주차 초반에 mongodb로 데이터베이스를, nodejs로 서버를 구축한 후, postman으로 이를 확인하기까지 무척 헤매었다. 이 과정에서 RestAPI에 대한 공부를 많이 했다. 그래도 보이저엑스 팀장님의 서버에 대한 기본적인 수업이 초반에 있었고, 남세동 대표님의 질의응답 시간이 2번 정도 존재하여서 이때 많은 도움을 받았다.

플메분과 첫날은 기본적인 셋팅을 각자 한 뒤, 나는 연락처를, 플메분은 갤러리를 구현을 하기로 했다. 우선, 핸드폰에서 연락처를 추가할 경우 DB에 저장되도록 한 뒤, DB에 있는 연락처 정보를 json parsing하여 이쁘게 보여주는 것 까지 구현하였다. 연락처 삭제와 수정을 시간상 구현하지 못하였던 점과 volley를 사용하여 구현하고 싶었는데 어려워서 하지 못한 점이 아쉬웠다.

우리 조는 3번째 탭에 모니터와 핸드폰의 미러링을 구현하였다. 데스크탑에서 약 1초에 3번 스크린샷을 찍어 핸드폰으로 이미지를 소켓 전송을 하게 하니 그럴싸하게 핸드폰에서 모니터 화면이 미러링되었다. 이때 python을 사용하여 소켓 전송을 구현하였다. 이걸로는 약간 부족함을 느껴서 모니터와 핸드폰의 양방향 통신을 구현하기로 했다. 만약 핸드폰에서 특정 위치를 클릭하면 그 곳의 좌표를 다시 소켓 전송하여 데스크탑에서 그 좌표를 클릭하도록 하였다. 시연때 플메분의 갤럭시탭을 이용하여 지뢰찾기를 하였는데 생각보다 그럴싸하게 미러링이 되었다.

플메분이 저번 학기때 소켓 통신에 대해 배우신 상태였고, 나는 소켓 통신에 대해 무지한 상태였다. 그래도 플메분께서 친절하게 많이 알려주시고, 전체적인 방향을 잡아주셔서 헤매지 않고 많이 배울 수 있었다. 정말 앱 다운 앱을 만들어 본 것 같아서 무척 뿌듯한 두번째 주였다.

3주차

1, 2주차와 다르게 3주차 부터 자유롭게 누구랑 무엇을 할지 정할 수 있었다. 평소 우리 반에서 마음이 잘 맞고, 친하게 지내던 분과 플메를 하게 되었다. 어떤 것을 할까 고민을 하던 중 카이스트 학교 지형 특성상 학생들이 스쿠터, 자전거, 전동 킥보드를 많이 타는 이야기가 나왔고, 카이스트 학생들을 위한 스쿠터 카풀 앱을 만들어 보기로 하였다.

막상 시작하니, 어떻게 해야 할지 감이 잡히지 않았다. 다행히 플메분께서 아이디어가 많으셔서 전체적인 기획을 해주셨다. 종이에 화면을 하나씩 직접 그려가며 어떻게 해야할지 회의하였고, 나는 백엔드쪽을, 플메분이 프론트엔드쪽을 맡기로 하였다.

우선 카풀 앱이므로 회원가입이 필요하다고 생각되었고, 내가 회원가입 기능을 구현하였다. 생각보다 회원가입 기능을 만드는데 오래 걸렸다. 회원가입을 하면, 회원의 정보를 DB에 저장하고 또 로그인을 하면 아이디와 패스워드가 맞는지 체크해야 했기 때문이다.

그 동안 플메분이 전체적인 어플 레이아웃을 구성 해주셨고, 그 레이아웃에 맞춰 내가 기능을 추가하는 방식으로 일을 진행하였다. 카풀을 원하는 사람에게는 출발지, 도착지와 시간을 선택하여 요청할 수 있는 페이지를, 카풀을 제공하는 사람에게는 여러 개의 요청들과, 요청자의 개인 정보까지 볼 수 있는 페이지를 보여주었다. 결제 방식은 간단하게 포인트를 충전하여 요청한 사람의 포인트를 차감하여 제공한 사람에게 주는 방식이었다.

이때 처음으로 retrofit을 이용하여 restAPI와 통신하는 법을 배웠다. 또한 혼자 스스로 database 스키마 구성부터 앱 작동에 필요한 모든 기능을 서버를 통해 구현해보았다. 그전까지는 탭 별로 나눠 일을 분담하였는데 이번 주차 때 처음으로 백앤드와 프런트앤드로 일을 분담하였다.

막상 이렇게 나눠서 코딩을 해보니, 백앤드가 더 나와 잘 맞는다는 것을 깨달았다. 지도나 gps를 이용하여 좀 더 고퀄리티로 구현하고 싶었지만 시간상 하지 못한 점이 아쉬웠다. 그래도 팀워크도 잘 맞고, 백앤드도 재밌어서 3주차때 제일 열심히 했었다. 그 결과 우수작에 뽑히는 영광을 누릴 수 있었다.

4주차

3주 내내 안드로이드를 계속해서 이번 주차에는 조금 다른 주제인 machine learning이나 웹 크롤링을 해보고 싶은 마음이 있었다. 하고싶은 주제가 비슷한 분들과 같이 하는 분위기였고, 두 분이서 ml을 하신다고 하셔서 셋이서 같이 하게 되었다.

이번 주차는 다른 때와 다르게 초반에 방향성을 잡기 위해 회의를 정말 많이 했다. 우선 세명 다 ml에 무지했고, ml 스터디와 ml을 이용하여 일주일 안에 결과물을 낸다는 것은 정말 다르기 때문이었다.

회의 결과, 우리 셋 모두 평소 사람들이 셀카 필터 앱과 풍경 필터 앱, 음식 필터 앱 각각 따로 쓰는 것이 비효율적이라고 생각했다. 그래서 이를 하나로 묶어주는 필터 앱을 만들기로 했다. 즉, 사람이 풍경 앞에서 사진을 찍으면 사람 부분만 잘라내서 사람과 풍경에 각각 다른 필터를 적용할 수 있는 앱을 만들기로 하였다.

우선 처음에는 셋이서 각각 인물, 풍경, 음식 사진을 약 1000장씩 크롤링하여 모델링을 하였다. 그 뒤 나는 camera preview를 이용하여 우리가 평소에 쓰던 카메라 앱과 유사하게 화면을 구성하는 일을, 플메 한 분은 파이썬으로 사진에서 풍경을 분리한 후 풍경, 인물, 음식인지 각각 알아내는 코드를, 나머지 한 분은 안드로이드 앱에서 인물 부분과 배경을 각각 따로 필터를 씌우는 코드를 구현하셨다.

나는 B612처럼 카메라 화면을 구현하는 것이 목표였고 이를 구현하는데 꼬박 하루가 걸렸다. Camera api를 사용하여 카메라 화면을 구현한 뒤, 카메라로 찍거나 갤러리에서 사진을 선택하면 서버로 이미지를 전송한 뒤, 전송된 사진을 다시 디코딩하여 사진으로 변환한 후 서버에서 저장하고, 그 경로를 DB에 저장하는 것 까지 구현하는데 꼬박 이틀이 걸렸다. 1, 2주차에 계속 연락처 부분만 구현해서 사진을 서버로 전송하는 것에 대해 무지한 상태였지만 주변 사람들에게 물어보면서 해결하였다.

우리가 원하는 목표만큼 결과가 나오지는 않았지만 이때 ml에 대한 개념과 코드를 배우면서 신기하고 흥미로웠다. 파이썬으로 코드를 짜신 플메 분께서 코드 설명도 같이 해주시고 질문하면 엄청 친절하게 알려주셔서 즐겁게 많이 배운 한 주 였다. 하루 이틀 정도 시간이 더 있었다면 훨씬 완성도 있는 어플을 만들 수 있었을텐데 라는 아쉬움이 남았다.

5주차

5주차는 마지막 이라는 이유로 다들 약간 방황의 시기였다. 모두가 안드로이드에 질린 상태였고, 새로운 주제를 하고싶어했다. 이때 함께 한 플메분께서 AR을 해보자고 하셔서 유니티로 AR구현을 하기로 했다. 회의 결과, AR로 피카츄를 띄우고 피카츄를 만지면 반응하는 피카츄 놀아주기 앱을 만들기로 결정했다.

첫째날에는 vuforia를 이용하여 해당 이미지 타겟에 피카츄를 ar로 보여주는 것을 하였다. AR은 진짜 처음 해보는 것이여서 신기하고 엄청 재밌었다. 하지만 그 이후로 문제가 발생했다. 우리반 대부분의 사람들은 유니티 안에 있는asset store에서 제공하는 캐릭터와 애니메이션을 사용하여서 게임을 만들었다. 하지만, 우리 조 같은 경우 스토어안에 피카츄와 그의 애니메이션이 없었기 때문에 우리가 직접 애니메이션을 만들었어야 했다.

우리반 모두가 말렸지만, 주제를 바꾸기엔 조금 늦었다고 판단하여 blender로 직접 애니메이션을 만들었다. blender에서 피카츄에 직접 skeleton을 심고 한컷 한컷 저장하여 움직임을 구현하였다. 그 후 AR속의 피카츄를 클릭하면 귀여운 소리와 함께 우리가 직접 만든 애니메이션이 작동되도록 했다.

이때 처음으로 blender를 다루어 보았는데 애니메이션을 만드는 일이 이렇게 힘든 일이라는 것을 깨달았다. 또한 평소에 게임을 즐겨하는 편이 아니어서 그런지, 유니티 자체가 재미 없었고 의욕도 생기지 않아서 조금 아쉬움이 남았다. 하지만 장병규 의장님 말씀처럼 픽사 같은 애니메이션 회사의 고충을 알게 된 소중한 경험이었다.

--

--

seoyeon hwang
seoyeon hwang

Written by seoyeon hwang

데이터 보는거 좋아해요

No responses yet