본문 바로가기
회고

졸업 프로젝트 '외국민'

by Jihunc 2024. 6. 19.

서두

이번 4학년 1학기에 약 50여팀이 참가하는 졸업프로젝트이자 대회인 캡스톤 디자인을 진행하게 되었다. 본인은 3월부터 6월까지 약 3개월간 팀장을 맡았고, 결과적으로는 장려상 수상을 하며 성공적으로 프로젝트를 마쳤다.

프로젝트를 진행한 과정과 팀장으로서 무엇을 하였는지, 또한 어떤한 것들을 겪었는지 서술하도록 하겠다.

 

팀원 구성

본인 포함 팀원은 총 6명이고, 각 프론트 2명, 백 2명, AI 2명이었다. 본인은 프론트엔드 개발자이다.

 

주제 선정

우리 팀은 주제를 선정하는데 오래 걸렸다. 그만큼 최대한 모두의 마음에 들고, 의미가 있는 주제를 찾고자 하였기 때문이다. 아이디어는 모두가 생각나는대로 전부 기록하고, 계속 공유하였다. 이 때, 아이디어를 공유하며 중요하게 논의한 항목은 다음과 같았다. 나는 아래의 3가지의 질문에 답변을 못 하면 의미가 없는 프로젝트라고 생각하였기 때문에 굉장히 강조하였다.

  • 그것을 왜 만들어야 하는데?
  • 그것을 만들면 뭐가 좋은데?
  • 그것은 남들과 뭐가 다른데?

위의 질문에 가장 만족스러운 답변을 내놓은 주제는 '외국민' 프로젝트였다. 굉장히 바로 나온 것 같지만, 굉장히 많은 고민들이 있었다. 결국 주제 선정은 3월 20일 경에 되었고, 최종 발표가 5월 24일 이었으니, 실질적으로 개발을 할 수 있는 기간은 2개월이었다. 시간이 부족했다.

 

외국민

'외국민'프로젝트는 국민대학교 외국인 유학생들의 한국생활과, 특히 학교생활의 적응을 돕고자 기획된 앱서비스이다. 이 서비스에서는 학교의 공지사항, 학식정보 등 여러 정보를 계속 크롤링하고 번역하여 보여주고, Q&A, FAQ 게시판, 헬퍼 게시판, 유저간 채팅, 한국어 발음 연습, 전용 챗봇 '쿠쿠'를 제공한다.

 

해당 서비스는 구글 플레이스토어에 공개 되어있으며, 소스코드 또한 공개되어있다.

 

외국민 - Google Play 앱

국민대학교 외국인 유학생을 위한 정보제공앱입니다.

play.google.com

 

GitHub - kookmin-sw/capstone-2024-30: 외국인 유학생을 위한 앱서비스

외국인 유학생을 위한 앱서비스. Contribute to kookmin-sw/capstone-2024-30 development by creating an account on GitHub.

github.com

 

💻 캡스톤 30조 결과물 소개

외국인 유학생을 위한 앱서비스

kookmin-sw.github.io

 

서비스 기획

주제를 정했으니 본격적으로 기획을 해야한다. 시간이 촉박하여 무엇이든지 효율적으로 진행해야했다.

 

문제 정의

우리는 외국인 유학생들이 느끼는 문제를 3가지로 정의했다.

  1. 언어적인 문제 -> 한국말을 잘 못 말한다
  2. 타지에서의 외로움 -> 친구가 없다
  3. 정보의 낮은 접근성 -> 뭐라고 써있는지 모르겠다

우리는 위 3가지의 문제를 해결하기 위해 아래의 6가지 기능을 기획하였다. 즉, 아래의 기능이 외국인 유학생들에게 도움이 될 것이라고 가설을 세웠다. 기능들을 정의하고 구체적인 화면을 구상하는것까지 2일이 걸렸다.

  • 발음 연습(한국어)
  • 정보 번역(공지사항, 학식 등)
  • Q&A, FAQ 게시판
  • 헬퍼, 헬피 게시판
  • 유저간 채팅
  • 전용 챗봇

가설 검증

실제 외국인 유학생들에게 필요한 기능이 무엇이고 불편한 점이 무엇인지 조사를 해야했다. 가장 쉽고 효율이 좋은 것은 외국인 유학생들에게 설문조사를 돌리는 것이다. 우리는 구글 폼 설문을 고심끝에 제작하였고, 외국인 유학생 지원센터, 외국인 관련 동아리에 설문조사를 부탁하고자 연락하였다. 하지만 전부 거절당했다. 개인을 위해 홍보를 해줄 수는 없다는 이유였다.

 

하지만 우리는 외국인 유학생들의 의견이 무조건 필요했다. 실제 유저가 될 사람의 불편함이 무엇인지도 모른채 멋대로 기획하면 그야말로 '뇌피셜'이 아니겠는가?

 

따라서 우리는 발품을 뛰었다. 외국인 교수님 1명, 외국인 유학생 2명을 대상으로 실제 인터뷰를 진행하였다. 인터뷰에 고생해준 영락이에게 고맙다. 결과적으로 우리의 가설이 많은 부분 적중했다는 것을 알 수 있었다. 매번 학식정보를 캡쳐하여 번역기를 돌려 확인하였다는 등 여러 정보들을 얻을 수 있었다. 이로써 우리의 기획에 자신감을 갖게 되었다.

 

서비스 이름 및 색상, 디자인

이름

서비스 이름은 무조건 정해야한다. 나는 번뜩이는 뇌로 '외놀자(외노자 + 야놀자 = 외국인들아 놀자!)'를 주장했다. 하지만 많은 욕을 먹고 묻혔다. 하지만 한 번더 뇌가 번뜩였다. '외국민'(외국인 + 국민대). 이 아이디어는 만장일치 패스트트랙으로 통과되었다. 

 

색상

보라색은 난색과 한색 모두 포용할 수 있는 색으로 다른 특성을 가진 모두에게 적절하다 - 필라이즈 부대표

 

우리 서비스는 보라색을 사용한다. 저 말을 보는 순간 보라색만큼 붙이기 좋은 색상이 없을 것 같아 보라색으로 결정하였다. 또, 보라색이 너무 가볍지도 않으면서 무겁지도 않아서 진지한 느낌을 주기에 좋았다.

 

디자인

필라이즈(좌), 외국민(우)

피그마로 처음부터 제작하면서, 마진과 패딩을 조정해가며 디자인을 했을 수도 있다. 하지만 우리는 시간이 없었다. 그리고 무엇보다도 우리 팀원 6명은 모두 소프트웨어학부 공대생이다. 따라서 디자인과 아트에 조예가 있는 사람이 없다. 큰 문제이다. 어느 팀은 디자인 외주를 맡기기도 하였다.

 

시중에 있는 서비스들의 디자인은 많은 디자이너가 영혼을 갈아 넣은 작품일 것이다. 따라서 우리는 그들의 노력을 잠시 가져가기로 했다. 대상은 필라이즈이다. 각 화면에 대한 정보는 WWIT를 참조하였다.

 

프로젝트 관리 및 개발 전략

실제 개발을 들어가기 전에 전략을 잘 짜야했다. 왜냐하면 우리는 시간이 없기 때문이다(2개월). 1월 부터 5개월간 개발한 팀도 있었다.  따라서 나는 초장부터 팀원들을 닥달하기로 마음먹었다... 사실 원래 나의 꿈은 다같이 합숙하면서 데일리 스크럼을 진행하며 7일간 개발만 하는 것이었다. 다들 시간표가 비슷해서 가능했지만, 마땅한 공간이 없었다...

 

애자일? 스크럼?

애자일 프로세스이다

나는 이번학기에 같이 수강한 소프트웨어공학 과목이 4년간 들었던 과목중에 가장 흥미로웠다. 이곳은 내가 느끼기에 바쁘게 삽질하는 구현세상을 떠나 설계도를 펼쳐놓고 고민하는 세상이었다. 그 중에서도 개발방법론인 애자일 스크럼을 꼭 프로젝트에 적용해보고싶었다.

 

다른 중요한 것도 많지만 개발할 때의 애자일에서의 핵심은 반복이라고 생각한다. 짧은 주기로 계속 클라이언트에게 릴리즈하여 수정하는 것이다. 하지만 현실은 실제 클라이언트는 없었고, 반복은 커녕 기능 개발도 구현에 허덕이며 워터폴로 진행되었다.

 

하지만 회의에서 할 일을 나눌 때 유저스토리를 기반으로 일을 나누는 등 애자일 비슷한 것을 해보았다. 나중에는 구현 능력이 향상된 상태로 약간은 더 긴 호흡으로 애자일하게 프로젝트를 진행해보고싶다.

 

월, 금 마다 회의록이 있는 모습

 

회의는 회사처럼 데일리 스크럼을 하면 좋겠지만 현실은 그럴 수 없어서, 긴 회의를 매주 월요일, 금요일 주 2회 주재했다.

금요일 회의는 월 ~ 금(평일) 동안 해온것에 대한 리뷰이자 주말간 할 것 분배 회의이고,

월요일 회의는 금 ~ 일(주말) 동안 해온것에 대한 리뷰이자 평일간 할 것 분배 회의이다.

즉 우리는 주말 없이 2개월간 살았다. 엄청난 닥달에도 불평불만 없이 따라와준 팀원들에게 너무 고맙다.

 

회의의 구성과 순서는 다음과 같았다.

  1. 회의 안건 읊기
  2. 한 일 리뷰
  3. 회의 진행 및 여러 결정 기록
  4. Next Action 결정

모든 회의의 처음에는 회의의 안건을 한번 읊으며 모두에게 기억시켜주었다. 또한 안건은 누구나 언제든 노션에 기록만 해놓으면 상정할 수 있었다.

 

이후 모든 팀원들은 자신이 해온 일을 약 5분간 설명해야한다. 또한, 각 리뷰가 끝나고 질의응답 시간을 가졌다. 이는 내가 한 일을 모두가 이해하고 알아야하기 때문이다. 남들이 어디서 무엇을 하고 있는지 앎으로서 자신이 어디에서 무엇을 하고 있는지 알 수 있기 때문이자, 또한 결과적으로는 팀장으로서 프로젝트의 리스크 관리를 위함이었다. 따라서 나는 AI를 개발하는 형의 전담 물음표 살인마가 되었다.

 

안건들을 기반으로 회의를 진행하였다. 회의가 길어지면 집중력이 떨어지고, 효율이 안 좋아진다는 것을 알고 있다. 따라서 회의를 효율적으로 진행하고자 하였다. 나는 만약 안건과 많이 벗어난 이야기가 나오면 다음에 이야기 하자고 하며 쳐내었다. 예를 들면, 기획 회의를 하고있는데 이를 어떻게 구현할지 이야기가 나온다거나, 두개의 그룹으로 나누어져 각개전투를 할 때이다. 

 

아무래도 개발자이기 떄문에 구현에 관심이 많이 갈 수 밖에 없다. 하지만 회의의 효율과 집중력은 초반이 가장 좋기 떄문에 가능하면 처음에 핵심 아젠다를 전부 논의하고, 중간에 나온 핵심을 벗어난 이야기는 마지막에 하고자 하였다.

 

마지막에 할 일들을 모두에게 분배하는 시간을 가지고 회의를 마무리하였다. 각 회의는 대부분 1시간 30분 이내로 끝났다.

 

 

소통

새벽에 떠들기

우리는 다들 알다시피 개발과 관련된 소통은 카톡대신 슬랙을 사용하였다. 우리 모두 야행성이었고 다같이 친했다. 서로 욕하면서 소주 한잔 하는 사이. 따라서 소통과 관련해서는 문제가 될게 없어서 예의나 격식을 차릴 필요가 없었다. 새벽 3시에 슬랙을 보내서 고쳐달라고 해도 바로 고쳐주었고, 새벽에도 허들이 빈번하게 일어났다. 또한 어떠한 문제로 혼자 30분 이상 고민하게 되면, 즉시 공유하자고 하였다.

결과적으로 봤을 때, 소통이 빠른 개발의 핵심인것 같다.

 

 

문서

우리 '외국민'의 노션 페이지이다

문서관리는 노션을 사용하였다. 회의록 작성을 가장 많이 하였고, 기획 정리, 기능 정의 등 스태틱한 문서도 많이 정리해 두었다. 이 때, 내가 굉장히 중요하게 생각하는 점이 하나 있는데, 그것은 외부 공개 문서이다.

 

내부에서는 문서를 격식갖춰 힘들게 쓰지 않더라고 괜찮았다. 하지만, 외부에 공개되는 문서는 외부인들이 해당 문서를 보고 우리 팀에 대해 어떤 인식을 가질 수 있는 중요한 것이다. 따라서 외부에 우리의 문서를 노출시켜야 할때는 최대한 프로처럼 보이고자 노력하였다.

예를 들면(다른 프로젝트도 있지만), 팀원 구인 공고, 지도교수님 제안서, 설문조사 요청 이메일, 발표 자료 등이다.

 

Git 

머지된 PR 목록이다. 마지막 PR이 239번이다
생성한 이슈들이다. 마지막 이슈가 232번이다

우리는 깃을 사용하면서 PR, commit, issue에 규칙을 적용해 사용하기로 약속하였다. 브랜치 관리로는 git flow전략을 사용하였다. 구현하고자 하는 기능이 있거나 수정해야할 버그가 있다면 무조건 Issue를 올려야한다. 해당 이슈번호를 포함하는 브랜치로 작업을 하고, PR이 머지되면 Issue를 close 했다.

 

프로젝트 개발(구현)

개발에 관한 직접적인 이야기는 기회가 된다면 다른 글에서 다루도록 하겠다.

하지만 '외국민'프로젝트 백엔드 관련 개발 내용은 팀원인 mclub4의 블로그에 일부 기술되어있고, 백엔드 README에 상세히 기술되어있다.

 

기능들에 대한 설명은 시연영상으로 대신하겠다.

외국민 시연영상

 

발표

발표자료 썸네일

발표는 청중이 누구인지에 따라 구성과 내용이 달라져야한다. 따라서 청중의 관심사를 분석하고 발표시간 분배의 전략을 짜야한다. 우리의 발표 대상은 교수님들이었다. 교수님들은 우리의 '구현 내용'(Flutter의 무엇을 어떻게..., Spring의 어떤 기술을 어떻게 사용하여..., 그래서 코드가 이렇게...)에 관해서는 관심이 없다. 이건 개발자들만 관심있다.

 

교수님들이 관심이 있는 것은, 그것을 왜 만들었고, 어떤 가치가 있으며, 전반적인 난이도는 어땠으며, 그리고 요즘 핫한 AI를 어떻게 적용하였는지였다. 주어진 발표 시간은 10분이었다.

 

결과적으로 우리는 처음 주제를 선정했을 당시에 고민하였던 아래의 3가지의 질문을 답하며 설득하고자 하였고, 구현한 기능들에 대해서는 시연영상으로 빠르게 설명하였다. 추가적으로 직접 아키텍처를 설계한 AI 기술에 대해서 상세하게 설명하였다. 발표자료 또한 팀원들과 계속 공유하며 아쉬운 부분을 체크하였다. 또한, 다같이 예상질문들을 만들며 발표 연습을 하였다.

  • 그것을 왜 만들어야 하는데?
  • 그것을 만들면 뭐가 좋은데?
  • 그것은 남들과 뭐가 다른데?

결과적으로 반응은 나쁘지 않았다. 1학년 때는 구현한 코드를 하나하나 설명하면서 발표를 하는 참사를 일으켰었는데, 지금은 많이 나아진것 같다. 하지만 모 교수님의 질문에 대해서는 만족할 만한 답변을 하지 못 하였다.

실제로 외국인 유학생들에게 써보게 해보셨나요?

 

아뿔사, 구현에만 집중하느라 본질을 놓치고 있었다. 그래서 나는 이를 곧 있을 전시회 때 테스트 해보고자 하였다.

 

전시회

외국인 유학생들이 사용해보고 있는 모습

전시회 때는 6시간 동안 모든 팀들이 이젤에 포스터를 얹고 앞에서서 자신의 프로젝트를 사람들에게 설명한다. 우리에겐 챗봇과 바로 대화를 해볼 수 있는 키보드가 있는 태블릿과, 앱을 사용해볼 수 있는 휴대폰들이 있었다. 그리고 나는 아름다운 그림을 생각하고 있었다.

외국인 유학생들이 알아서 찾아와서 이게 뭐냐고 묻고, 써본다고 하겠지?

 

하지만 그런일은 절대 일어나지 않았다. 오후가 되도...

우리는 답변하지 못한 질문에 답변을 해야만 했었고, 또한 개발자로서 우리가 만든 서비스가 실제 유저에게 어떤 평가를 받을지 굉장히 궁금했었다.

 

나는 밖으로 나갔다. 그리고 외국인이 보이면 어설픈 영어로 바로 말을 걸었다.

두유 해버 타임? 컴퓨터 사이언스 익스비전 헬드 인 미래 홀. 위 메이드 앱 서비스 포 포리너 스튜던트

 

외국인 유학생을 직접 밖에서 데려와서 프로젝트를 설명해주고 실제 서비스를 써보게 하였다. 반응이 굉장히 좋았다. 항상 정보들을 번역해서 보고, 검색 또한 한국어로만 가능했는데, 자신의 언어로 바로 볼 수 있으니 좋다고 하였다. 한국어 발음연습도 재미있게 해보았다.

땀을 뻘뻘내며, 이렇게 10명의 외국인들을 계속 데려와서 소개해주었다. 뿌듯했다.

 

중간에 변수가 있었다. 사우디아라비아 친구들이었는데, 왜 아랍어는 없냐는 것이었다. 우리는 비용문제로 한국어, 영어, 중국어만 지원했다. 미안하다 사우디 친구들...

 

본인이 한참 외국인 친구들을 밖에서 데려오는(사냥?) 와중에 안에서 어떤 모 교수님이 이 프로젝트와 서비스를 자신의 원어강의(외국인 유학생들이 많음)에서 소개할 수 있는 기회를 주시겠다하여 승낙했다고 했다. 듣자마자 신났다.

 

아이폰

영어 발표하고 있는 영락이

전시회를 성황리에 마무리하고, 전시회날에 얻은 기회로, 며칠 후에 원어 강의 시간(외국인 유학생들 대상. 한국인 일부 있음)에 우리의 프로젝트를 발표하게 되었다. 반응이 좋았고, 자신있게 다운로드하여 사용하라고 구글플레이 QR을 띄워놓았다. 하지만 아무도 휴대폰을 꺼내들지 않았다. '이럴수가 우리 서비스를 이렇게 다운로드 하기 싫어하나? 뭐가 문제지?' 당황했다. 하지만 누군가 손을 들고 말했다.

Isn't it available on the App Store?

 

우리는 비용을 문제로 애플 앱스토어에는 등록을 하지 않았다. 교수님이 안드로이드 휴대폰 사용자는 손을 들어보라고 하였다. 아무도 손을 들지 않았다. 아이폰 사용자가 100%였다. 기적의 수치다.

따라서 하반기에 앱 스토어에 출시 계획이 있다.

 

팀장의 역할

나는 팀장을 몇 번 정도 해보았다. 팀장으로서 프로젝트를 참여하면서 느끼는 점은 항상 배워가는 것이 있고, 나는 부족하다는 것이다. 내가 생각했을 때 팀장의 역할은 많이 있지만 중요한 것 3개만 뽑아보면 아래와 같다.

  1. 프로젝트 관리(or 리스크 관리)
  2. PT 잘하기
  3. 닥달하기(응원 or 격려하기)

당연하게도 프로젝트를 관리해야한다. 개발 계획을 잡고 일정을 세운다. 매 회의마다 일정에 맞게 진행되고 있는지 확인하고, 할 일을 분배한다. 또한 미래에 혹시 있을 수 도 있는 프로젝트가 실패할 수 있는 리스크를 가능한 줄인다.

 

발표를 잘 해야한다. 팀원들과 열심히 만든것을 주변 그리고 모두에게 알려야 할 때, PT는 항상 하게 되어있다. 모두가 한 일이 억울함이 없도록, 아쉬움이 없도록, 듣는 사람이 만족하도록 충분히 잘 설명을 해야한다. 팀장은 발표를 잘 해야한다.

 

마지막으로 닥달하기다. 프로젝트는 사람이 만든다. 아무리 일정을 잘 잡고, 리스크를 잡아도 결국에 직접 만드는 것은 사람이다. 팀원들과의 관계를 원활히 유지하고, 항상 충분한 격려와 응원을 해야한다. 또한 필요하다면 닥달도 해야한다.

 

소감

전시회(좌), 시상식 수상(우)

외부 평가위원의 평가중에서 이 서비스를 학교에 팔아보라는 의견이 있었다(화성 갈끄니까???). 또, 기능이 너무 많아서 중요하지 않은 기능(발음평가)은 쳐내는게 완성도가 높아보인다는 의견도 있었다. 발음평가같은 경우는 더 좋은 서비스들이 많으니.

 

6명 팀의 팀장은 처음해봤다.

상당히 중요한 프로젝트라서 잘 해야된다는 압박도 상당했다.

하지만 만들어보고 싶은 것을 만들었다.

팀원 각각의 실력이 최고조에 도달했을 때(4학년) 작업한 프로젝트라서 결과물이 굉장히 만족스럽다.

열심히 만든 서비스를 실제 외국인 유학생에게 써보게 하니 프로젝트에 더 정이간다.

처음엔 막막했던 일정들을 소화한게 신기하다.

불평불만없이 따라와준 팀원들에게 고맙다.

국민대 소프트웨어학부 흥했으면 좋겠다.