- Published on
- Last updated:
SW 마에스트로 13기 후기 - 가장 행복한 아침, Alardin
올해 6월부터 시작된 SW 마에스트로(이하 소마) 연수과정이 11월 말 최종발표를 끝으로 마무리되었다. 처음 백엔드 포지션으로 진행한 프로젝트기도 하고 기술적으로 얻은 것도, 발표에 관해 배운 것도, 그리고 개인적으로 해낸 것도 많았던 활동이라 소개 및 정리 글을 써보려고 한다.
팀 결성 및 프로젝트 기획 🚀
13기 해치웠나팀의 백엔드 포지션으로 프로젝트를 진행했다. 나를 마지막으로 팀이 결성되고 팀장님께서 '드디어 해치웠나?'라고 하셨고 유레카! 바로 팀명으로 쓰게 됐다.
우리 해치웠나팀은 "가장 행복한 아침을 만드는 알람"을 목표로 Alardin(알라딘)을 개발했다. 알람 소리와 함께하는 기상, 어떤가? 상상만으로 벌써 괴로움과 불쾌함을 느끼는 사람이 많을 것이다. 알람은 단순히 잠을 잘 깨우기는 것으로는 부족하다. 일어나고 싶게 만들어야 한다. 이 앱이 없으면 아침을 마주하기 싫어야 한다.
이를 위해 알라딘은 주 컨텐츠로 “멀티/싱글 게임을 통한 알람 해제”를 삼았다. 예를 들어, 게임 중 하나인 픽콕(Picoke)은 서로가 자신의 사진을 설명하여 상대방이 올바른 사진을 고르도록 하는 게임이다. 참가자 모두가 정답을 맞춰야 게임이 완료되고 알람이 종료되는 방식이다.
문제 발견
괴로운 아침이란 뭘까. 우리가 정의한 괴로운 아침은 '5분만 현상'에서 기인한다. 5분만 현상은 우리가 지은 이름으로 실제로는 Snooze 기능로 알려져있다.
시계 기상알람 기능에서, 잠시 더 자기 위해서 별도로 5분 혹은 10분 정도의 타이머를 돌려 나중에 다시 울리게 하는 기능
아마 나처럼 알람을 5분 간격으로 여러 개 설정하는 사람들도은 무슨 말인지 바로 공감할 것이다.
(9시에 일상을 시작하기 위한 노력..)
TMI) 우리 몸은 기상 시 각성 호르몬, 수면 시 아데노신이 분비하는데 Snooze 기능을 사용하면 두 호르몬이 균형을 이루게 되어 수면 관성 상태(비몽사몽한 상태)가 오래 지속된다. 이런 경우, 잠에서 깨도 개운하지 않고 수면의 질과 시간에 관계없이 잠을 잘 못 잤다고 느끼게 되며 기상 시 불쾌한 기분을 가지게 한다.
이를 해결하기 위해 해치웠나팀은 잠을 한 번에 확실히 깨울 방법 + 행복한 기상을 만들기로 했다.
아이디어 발전
기상은 하루도 빠짐없이 있으면서 하루 중 가장 특별한 이벤트다. 그에 따른 고려사항들은 다음과 같다.
- 사람들은 아침에 몇 분정도 투자할 수 있는가?
- 방금 일어난 사람들이 충분히 수행할 수 있는 과업들은 어떤 것들이 있는가?
- 확실하면서 행복하게 깨울 수 있는 방법은 뭔가?
많아도 3분 이상은 투자하지 않을 것이다. 보통 일어나야 하는 일정이 있어서 알람을 설정하기 때문이다.
기상을 위한 과업이 재미있지 않다면 앱을 다시 사용하지 않을 것이다. 그리고 당연하게도, 과업을 하고 나면 일어나져야 한다.
알람 사용 형태를 알기 위해 서비스와 논문들을 더 조사해봤다.
논문 - 모바일 알람 앱의 기상 과업 사용 행동 이해
이 논문은 불편한 상호작용(Inconvenient Interaction)이 사람을 깨우기 위해 어떻게 사용되는지 조사한다. 특히 우리에게 유의미했던 내용은 신체적/인지적 부하를 감수하더라도 아침 기상 과업을 기꺼이 수행하는 사용자가 많다는 점이었다. 논문에서는 비교 분석을 위해 '알라미(Alarmy)'의 데이터를 사용했다.
알라미는 수학문제 풀기, 인증사진 찍기, 기기 흔들기 등 미션을 완수해야 알람이 꺼지는 기능을 제공하는 모닝 웰니스 앱이다. 벤치마킹을 통해 프로젝트를 발전시키기로 했다.
알라미 벤치마킹
알라미를 직접 사용해 본 결과, 참 잘 일어나진다. 하지만 기상이 괴롭게 느껴지는 것은 매한가지였다. 그래서 우리는 이 점에 포커스를 맞춰 '행복하게 일어나는 방법'을 주제로 확정짓게 되었다.
개발 💻
여기서는 서비스의 핵심적인 기능인 알람 게임이 구현된 방식을 백엔드 입장에서 설명한다. 글 도입부에서 알라딘의 주 컨텐츠는 “멀티/싱글 게임을 통한 알람 해제”라고 했는데, 멀티 게임의 경우 정확히는 "협력형 비대칭" 게임이다. 따라서 게임 진행 시 사용자 간 협력할 수 있는 소통 채널이 필요하다. 또한 알람 1개를 일종의 게임 방(room)으로 생각하고 게임을 통한 알람 해제를 구현했다.
게임 🎮
알람을 해제하기 까지의 라이프 사이클은 다음과 같다.
- 알람 설정 (시간, 게임 종류, 반복 여부, 음악 등)
- 게임 방 생성
- 다른 사용자들이 알람 참가
- 게임 방 참가
- 시간이 되면 알람이 울리고 모든 사용자들의 게임 준비 대기
- 준비 완료 시 게임 시작
여기서 3. 4.에 해당하는 내용을 도식화한 그림은 다음과 같다. 2명의 사용자로 이루어진 멀티 게임을 가정한다.
게임 준비
'알람이 울리는' 과정은 백엔드에 저장된 시간에 푸시 알림을 보내는 것으로도 구현할 수 있을 것 같다. 우리는 모바일에 저장된 시간에 발생하도록 했는데, 이는 앱의 제 1목적인 '알람' 기능이 네트워크 상황에 관계없이 울릴 수 있도록 하기 위함이다.
참가자가 알람을 듣고 게임 준비를 하면, 각종 Storage로부터 알람/게임에 필요한 정보를 읽은 뒤 캐시에 저장한다. 게임에 사용되는 정보는 모든 참가자에게 동일하므로 캐시에 한번 저장되면 다른 참가자들은 캐시로부터 데이터를 읽어올 수 있다.
게임 시작
모든 사용자가 준비하면 게임을 시작한다. 위에서 말했듯, 협력형 비대칭 게임을 진행하기 위해서는 소통 채널이 필요하기 때문에 WebRTC(Web Real-Time Communication)를 택했다.
WebRTC를 핵심 기술로 사용한 서비스 중 대표적인 예가 클럽하우스다. 클럽하우스는 WebRTC 기술을 Agora 플랫폼을 통해 제공하는데, 이는 WebRTC를 실제 서비스에서 제공할 때는 품질과 가용성에서 많은 이슈를 겪기 때문이다. Agora는 WebRTC 퀄리티를 보장하고, 비용적으로도 부담이 없어, 알라딘에서도 Agora를 사용해보기로 했다.
게임 데이터와, RTC 채널에 참가할 준비가 완료되면, 게임이 진행된다. 게임이 진행되는 방식은 아래 그림과 같다.
실제 게임은 웹에서 VanillaJS로 구현된 WebView이다. 게임 사용자 간 상호작용은 모바일에서 이루어지고, 이 때 위에서 설명했던 Agora에서 제공하는 채널이 사용된다. 웹에서 게임의 상태를 갱신하기 위해 모바일과 postMessage
API를 통해 message를 주고 받는다. 백엔드는 게임 시작과 종료 시 요청을 받아 필요한 데이터를 준비하거나 저장한다.
인프라
번외로 SW 마에스트로는 지원이 든든하기로 유명한데 그 중 AWS 지원금이 가장 인상 깊었다(기기 지원금도..)💰. 그래서 인프라 구축 시 웬만하면 AWS를 사용한다.
사실 프로젝트를 시작하기 전에는 DevOps 개념이 전무해서 CI/CD, Docker 등의 기술의 필요성을 체감하지 못 했다. 그런데 프로젝트를 진행하면서 한 서비스의 백엔드와 인프라를 A부터 Z까지 전담하며 왜 그렇게 많은 용어와 기술이 필요한지 뼈저리게 느끼게 됐다. 그 과정에서 도구 선택도 직접 하고 필요에 따라 커스터마이징도 하면서 배운 점이 매우 많은 것 같다.
오른 쪽 Development
박스는 개발/테스트 서버 용으로 프로젝트 초기에 AWS를 잘 모를 때 구축했다. 그리고 왼쪽은 점점 니즈에 따라 발전시켜 프로젝트 종료 시점에 Production
용으로 사용한 인프라이다. 둘 다 노션 API를 사용하여 다른 팀원들도 백에서 발생하는 이벤트를 분석할 수 있도록 했다. 초라하지만 Production
을 만들면서 많은 인사이트를 얻어 이번 소마 과정에서 가장 의미있는 부분이 아닌가 싶다.
느낀 점❗️
서비스를 처음부터 끝까지 기획하고 완성하는 것은 개인 프로젝트를 진행하는 것과 비교할 수도 없이 어렵다. 또한 3명으로 이루어진 작은 팀조차도 정확히 같은 방향을 바라보는 게 힘들다. 그럼에도 기획 발표, 중간 발표, 그리고 최종 발표를 거치면서 팀원들과 싱크를 맞추고 목표를 함께 하는 것은 매우 즐거운 일이었다.
6개월의 시간동안 개발자로서, 팀원으로서, 그리고 기획자로서 발전할 수 있어서 은혜로웠다.
나는 늘 수단과 목표를 구분해야 한다고 생각해 왔다. 실제로 꽤나 규모있는 프로젝트를 진행하다 보니 수단과 목표가 희미해져 길을 헤매는 일이 종종 있었다. 그럴 때마다 이 생각을 되뇌이며 이제는 프로젝트 진행도 더 매끄럽게(?) 할 수 있게 된 것 같다.
마지막으로, 작년에 회사를 3개월 정도 다니고 퇴사한 후 마음이 뒤숭숭한 상태가 꽤나 오래 지속되었다. 그러다 운 좋게 소마를 발견하고 지원하게 되었는데, 소마가 다시금 내 허슬 DNA를 일깨워준 것 같아 감사하다. 소마가 끝난 지금도 개인 프로젝트와 사이드 프로젝트를 함께 병행하고 있는데, 다른 걸 다 제치고 이것만 하고 싶을 정도로 즐겁다! 특히 사이드 프로젝트는 허슬러 친구들과 진행하고 있어 늘 배울 점이 많다. 앞으로도 배울 점이 많은 분들과 함께 가슴 뛰는 일을 하며 살고 싶다.
Thank you for reading!
Reference
모바일 알람 앱의 기상 과업 사용 행동 이해 - https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE08008130&language=ko_KR
알라미 컬쳐덱 - https://team.alar.my/culturedeck