본문 바로가기메뉴 바로가기


Techtalk – 음(mm)으로 시작하는 크고 작은 ‘개발’ 이야기

카카오 사내 기술 세미나 Techtalk 여덟 번째 이야기입니다.

카카오 기술 조직은 월 2회씩 사내 기술 세미나(TechTalk)을 통해 사내 개발자들의 지식과 경험을 공유하는 시간을 갖고 있습니다.

8회를 맞이한 TechTalk에서는, 지난 6월 출시된 카카오의 소셜 오디오 서비스인 음(mm) 개발자분들을 패널로 초대해 대규모 서비스를 론칭하는 전반의 과정기를 공유하였는데요, 7명의 음(mm) 개발자들과 사내 크루들과 함께 한 TechTalk을 여러분에게도 공개합니다. 

“지난 6월 7일이었죠. 카카오의 소셜 오디오 서비스인 ‘음(mm)’이 출시됐습니다. 오랜만에 출시된 카카오의 신규 서비스인데요, 프로젝트를 시작할 때 고민 포인트는 무엇이었나요?”

– James 
음(mm) 서비스는 카카오에서 오랜만에 출신 된 신규 서비스였습니다. 오디오 플랫폼이 대두되는 시장 상황에 빠르게 결과물을 만들기 위해서 TF 형태로 조직되었는데요, 0에서부터 아예 새로운 서비스를 빠른 시간 안에 출시하는 것이 목표였기 때문에, 빠른 의사소통과 제한된 리소스 활용이 주요 고민 포인트였습니다. 동시에 기술적으로 서비스의 안정성과 확장성을 고려해야 상황이 버겁기도 했지만, 다행히 기존 서비스에서 쌓은 노하우를 모두가 십분 발휘해 주셔서 처음 목표했던 기간 안에 서비스를 릴리즈 할 수 있었습니다. 그리고 단순히 빠른 릴리즈만이 아니라 군데군데 기존 조직에서 레거시 때문에 적용하지 못했던 아키텍처나 다양한 기술적 요소들을 실험해보고 적용하려고 고민한 부분도 생각이 납니다.

“짧은 기간 동안 조직을 구성해서 신규 서비스를 출시하는데 많은 어려움이 있었을 텐데요, 프로젝트를 진행하면서 기억에 남는 챌린지가 있었나요?”

– R
저는 원격근무를 하면서 처음 만나는 동료와 일을 진행해야 하는 것이 어려운 점 중 하나였는데요, 아닌 분도 계시지만 저 같은 경우에는 발령이 나고 새로운 조직에 속하게 되었는데, TF에 아는 분이 한 분도 없었습니다. 각자가 어떤 성향을 가지고 있는지, 어떤 점에 강점이 있는지를 하나도 모르는 상태에서 빠르게 프로젝트를 진행해야 하는 상황이 굉장히 도전적이었어요.

– armin
하나의 팀으로 꾸려지자마자 새로운 플랫폼에 대한 업무가 동시에 시작되었기에 병렬로 돌아가는 업무가 어려움이 있었습니다. 개발뿐만 아니라 기획 디자인 모두 이슈였죠. 예를 들면, 1주일 전에 프로필 화면 다 작업하고 설정화면 하고 있었더니 프로필 화면이 새로운 페이지가 되었더라 등… 멘탈이 살짝 흔들렸지만, 모든 직군이 최선을 다하고 있기에 발생하는 당연한 일이었습니다.

“추가로 언급할 챌린지가 있었다면 이야기해 주세요.”

– huey
아민과 스토리에서 같이 일을 했었기 때문에 빠르게 개발을 진행하기 위해 스토리에서 사용했던 아키텍처와 베이스 코드들을 그래도 가져와 사용하기로 했었는데요, 스토리가 오래된 서비스다 보니 mvp 기반으로 되어 있어 구글에서 권장하는 mvvm 과는 맞지 않아 새로 mvvm 기반으로 개발을 진행하였습니다. mvvm으로 하면서 기존에 써보지 못했던 안드로이드 기술들을 쓰면서 고생도 했지만 새 프로젝트를 한다는 느낌이 더 강하게 와서 재미있었습니다.

– armin
기존 진행하던 프로젝트에서는 Android OS version 이 올라가면서 새로 지원되는 기능들을 실제로 써보지 못하여 갭이 많이 생겼는데 0에서부터 개발하게 되니 그간 나온 신규 피처들을 모두 깊게 써볼 수 있었습니다. 개인적으로 성장할 수 있는 챌린지가 되었다고 생각해요. 

“기존에 경험하셨던 도메인이 아닌 카카오에서 첫 시도하는, 음성을 가지고 하는 새로운 형태의 서비스인데요, 개발하시면서 어려움은 없었나요?”

– jed
여러 명의 사용자가 동시에 대화방에 들어와서 대화를 나누고 리액션 하는 등의 데이터를 실시간으로 처리하고 보여줘야 되는 부분이 기존에 제가 개발하였던 프로젝트와는 다른 부분이 많이 있었습니다. 그만큼 새로운 부분에 대한 개발을 하면서 재미도 느끼고 저 스스로도 성장할 수 있는 계기가 되었다고 생각합니다. 또한 저희가 음성 솔루션으로 아고라를 사용하고 있습니다. 아무래도 유료 해외 솔루션 이다 보니 몇 가지 어려운 점이 있었습니다. 영어 커뮤니케이션 및 레퍼런스가 많지 않아서 처음 개발 적용할 때 힘든 점이 있었습니다.

“기술적인 측면에서 보았을 때, 카카오에서 기존에 경험했던 프로젝트와 이번 mmTF에서 경험했던 차이점이 있다면 무엇인가요?”

– james 
Server의 경우 클라이언트랑 실시간으로 화면을 갱신하거나 통신하는 부분이 많아서 이 부분을 처리해야 하는 점이 기존의 경험과 달랐습니다. 개인적으로 기존 서비스 개발과 달랐던 경험은 이벤트 드리븐 형태의 스타일을 추구했고, kafka를 사용하여 모노리틱이 아닌 마이크로 아키텍처를 혼합해서 적용해 보았습니다. 또한 데이터베이스는 처음부터 멀티 데이터 소스 구조로 서버를 설계한 점이 기존 경험과 다르다고 할 수 있을 것 같아요. 

– soo
iOS의 경우 저는 jed와 스토리에서 오래된 프로젝트를 담당하고 있었는데요, 스토리가 아무래도 오래된 프로젝트이다 보니 오브젝티브C와 swift 코드가 혼재되어 있는 상태였어요. 두 언어가 공존하는 프로젝트를 관리하는 게 생각보다 쉽지 않았습니다. 이번에 음(mm) 프로젝트를 시작하면서 가장 좋았던 것은 순수 swift 프로젝트라 코드 작성 관리가 수월해서 좋았고, 근래 많이 사용하고 있는 Moya, Kingfisher, Swinject 등의 새로운 라이브러리를 적극적으로 도입할 수 있어서 개인적으로 좋은 경험이었습니다. 

그리고 좀 더 깔끔하고 통일된 코드 작성을 하고 싶어서, 마치 한 사람이 짠 듯한 코드를 기록하고 싶어서 swiftlint 적용도 적극적으로 도입했습니다. 

– huey
Android도 james가 말씀하신 것처럼 클라이언트와 서버 간 실시간 통신을 하면서 UI를 갱신해야 하는 점이 기존 프로젝트와는 다른 경험이었습니다. 저 또한 기존에 담당했던 스토리는 자바 위주로 코드가 짜여있었는데 이번 프로젝트에서는 코틀린 위주로 진행했고 당연하게 코루틴을 쓰게 되면서 예를 들어, 가장 기본적인 네트워킹 통신을 하게 되면 결과, 실패 값을 콜백으로 받게 되는데 서스펜드를 이용해서 리뉴하게 받을 수 있도록 하는 방법 등 콜백 지옥에서 벗어날 수 있는 방법들을 적용해 보았습니다. 

“여러 직군이 함께 일하는 목적 조직에서 협업이 매우 중요할 것 같은데요, mmTF는 어떻게 개발 문화를 형성하여 협업했는지 궁금합니다.”

– soo
협업 툴 고민부터 함께 했던 것이 가장 인상 깊었습니다. 각자의 경험에서 좋았던 다양한 협업 툴 추천하고 결정하기 전에 가볍게 써보는 기간을 가져보았는데요,  코드 리뷰부터 시작해 디자인 검수, 직군별 채널 운영 등 슬랙이 협업하는 데 있어 가장 많은 도움이 되었습니다. 

또한 데일리 미팅을 초반에는 클럽하우스로 진행하다가 개발 진행 중인 음(mm)으로 옮겼는데요, 데일리 미팅의 첫 번째 공유 내용은 내 기분 상태를 숫자로 말하기였습니다. 데일리 미팅이라는 것이 자칫하면 따분하고 무거울 수도 있는데 서로의 개인적인 일상을 공유하면서, 비록 지금까지 얼굴 한번 본 적 없는 사이지만 마치 오래된 동료처럼 자연스럽게 가까워진 것 같아요. 비대면을 통해 형성된 스킨십이지만 그래도 이런 작은 친밀도가 쌓이면서 협업에도 큰 문제 없이 잘 진행될 수 있었던 기반이 되지 않았을까 싶습니다.

“저희가 바라보았을 때 큰 충돌 없이 빠르고 원활하게 프로젝트가 진행된 것 같은데요, 어떻게 문제없이 잘 진행되었는지 궁금합니다.”

– armin
지금까지 팀원들의 얼굴을 실제로 본 적이 없고 비대면으로만 일을 해왔기 때문에 서로서로 조심했던 것이 큰 것 같아요. 바쁜 일정에 서로 마음이 급해 실시간으로 문의하며 궁금한 점을 풀었기 때문에 갈등이 쌓이지 않다 보니 충돌이 발생하지 않았습니다. 

또한 다들 경험이 적지 않아 동료에 대한 신뢰를 가지고 각자 할 일을 잘 했기에 충돌이 없었던 것도 같습니다. 더불어 클라이언트 경우 기존에 합을 맞추던 멤버들이라 좀 더 편했었습니다.

“프로젝트 하면서 개인적으로 가장 좋았던 점 또는 성장했다고 느낀 점은 무엇인가요?”

– joy
저 같은 경우 회사에서 일을 맡게 되면 보통은 실제 서비스가 진행되고 있는 프로덕트가 있고, 여기서  더 개선하거나 잘 동작하게 하는 업무를 하는 경우가 많았는데요, 음(mm) 같은 경우에는 무슨 일을 하든 간에 처음부터 만들어나가야 했기 때문에 저에게는 새로운 경험이었던 것 같아요.

– armin
개발자라면 누구나 하고 싶은 신규 서비스 개발 경험이 정말 좋았습니다. 프로젝트 설계부터 하고 싶었던 기술들을 쇼핑하듯이 진행하여 즐거웠어요. 또한 유지 보수하는 서비스에는 접목하기 애매한 기술들을 사용해 볼 수 있었고, 원격이지만 짝 코딩이라 할 만큼 서로 코드를 보며 합을 맞출 수 있어서 좋았습니다.  서로 토론하며 더 좋은 솔루션을 찾을 때 약간의 희열도 느낄 수 있었어요. 

– james
기존에 도전하고 싶었던 아키텍처를 실제 검증하고 적용해 볼 수 있는 기회가 되었습니다. 
TF 조직에서 새로운 멤버가 새로운 형태로 일했다는 것 자체가 저에게는 다양한 자극이 되었고, 자신의 포지션에 그치지 않고 서로 토론하면서 더 좋은 아이디어를 만들고 구체화해 나가는 과정이 좋았습니다.

“아직 음(mm)을 사용해보지 못한 크루들을 위해 PR 부탁 드려요.” 

– soo
음(mm)에서는 다양한 소통이 이루어지고 있습니다. 특히 많은 인플루언서들이 참여하고 계시는데 기억에 남는 대화방을 몇 가지 소개해 드릴게요.

반려견 훈련사이자 개통령으로 유명한 강형욱 님의 이벤트 방에서는 강아지 울음소리만 듣고도 강형욱 님이 직접 상담해 준 사례가 있었고, 현재는 보컬 트레이너로 활동 중이신 가수 박선주 님의 오픈방에서는 보컬 코치를 받고 싶은 참가자들의 노래도 감상하며 전문가의 코치도 받으며 소통하는 시간도 있었어요. 

또 사진 전문가(송혜교, 김희선 화보집 / 현 Vogue 사진가 KT선생님)에게 조언 받는 방에서는 조언 받고 싶은 사진을 프로필 사진으로 게시하여 전문가와 참여자들이 함께 사진을 보면서 구도 등 전문 기술적 조언과 더불어 사진을 통해 느껴지는 그때 당시의 감정까지 함께 공유하기도 했습니다. 

평소 접하기 어려운 인플루언서, 전문가들을 만날 수 있고, 관심분야가 같은 사람들과 공감하고 소통할 수 있다는 점이 음(mm)의 매력인 것 같아요! 

– jed
요즘 재테크에 대한 관심이 많은데, 주식, 부동산 등의 재테크 관련 주제도 많이 열리고 있습니다. 그리고 정기적으로 사주를 봐주시는 분이 계셔서 쉽고 간편하게 나의 사주를 볼 수가 있어요. 그 외 육아와 관련된 주제도 있고, 그리고 마피아 게임, 상식 퀴즈 풀기 등의 게임 콘텐츠를 운영하시는 분도 계십니다. 다양한 주제의 대화방이 있으니 많은 관심 부탁드려요!

“마지막으로, 앞으로 mmTF의 계획과 도전과제는 무엇인가요? mmTF 자랑을 해주세요!”

– James 
MM TF 은 카카오의 새로운 서비스 음(mm) 을 개발하고 운영하는 조직입니다. 이제 막 출발한 새로운 서비스인만큼 해야 할 일이 많지만, 새로운 시도를 통해서 모두가 성장할 수 있는 개발 문화를 지향하고 있습니다.  조직의 멤버들은 서버, ios, 안드로이드, 추천, 기획, 마케팅, 브랜드, UX 설계에 이르기까지 다양한 멤버들로 구성되어 있는 목적 조직입니다. 빠른 의사결정을 기반으로 새로운 트렌드를 이끌어 가는 오디오 기반 서비스 mm 을 함께 개발할 분들을 기다리고 있습니다! 

kakao tech
kakao tech Developer Relations at kakao corp.
Top Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
CF
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codegame
codereview
coding
coding test
Collaborative Filtering
communication
competition
Compliance
component
conference
consul
container
contents
contest
contribution
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
culture
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
employeecard
emscripten
eslint
event
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
GHC
github
globalpollution
go
Grace Hopper Celebration
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
ICPC Sinchon
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
KnowledgeGraph
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Messaging
microservice
Microsoft TypeScript
mm
mobil
mobile
mocking
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
open
open source
opensource
openstack
OpenWork
OSS
page
pair programming
parallel
PBA
performance
planning poker
Platform
polyfill
preview
programming-contest
project
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
Rome
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
service worker
session
sharding
shopping
Shuffle Partition
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
Women Technologists
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업
All Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
CF
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codegame
codereview
coding
coding test
Collaborative Filtering
communication
competition
Compliance
component
conference
consul
container
contents
contest
contribution
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
culture
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
employeecard
emscripten
eslint
event
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
GHC
github
globalpollution
go
Grace Hopper Celebration
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
ICPC Sinchon
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
KnowledgeGraph
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Messaging
microservice
Microsoft TypeScript
mm
mobil
mobile
mocking
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
open
open source
opensource
openstack
OpenWork
OSS
page
pair programming
parallel
PBA
performance
planning poker
Platform
polyfill
preview
programming-contest
project
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
Rome
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
service worker
session
sharding
shopping
Shuffle Partition
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
Women Technologists
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업

위로