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


뉴크루의 카카오 백엔드 개발자 이야기

안녕하세요, 톡플랫폼개발팀 톡메시징파트의 신입 개발자 쟈미(jyami)입니다.

저는 자바, 코틀린을 좋아하는 백엔드 개발자이고, 카카오에 들어온 지는 약 반 년이 되어갑니다. 제가 카카오에 입사하고 나서 IT업계 취업을 꿈꾸는 분들께 그동안 다양한 경로로 질문을 받았었습니다. 그래서 개발자를 꿈꾸는 많은 분들께 도움이 되고자 그동안 제가 받았던 질문들을 글로 정리해보려고 합니다.


어떤 일을 하고 계시나요?

톡 메시징 파트는 카카오톡 내 주요 서비스인 채팅 탭의 서버를 담당하고 있습니다. 이렇게 말하면 되게 어려운데, 사람들이 카카오톡으로 채팅방을 만들고, 삭제하고, 메시지를 보내고 받는 것들과 관련된 시스템을 관리하는 곳이라고 간단하게 설명할 수 있을 것 같습니다.

메시징 파트의 많은 개발자분들이 카카오에 들어오는 대량의 메시징 요청들을 빠르게 처리하고 서비스 데이터들을 안정적으로 관리하기 위해 노력을 하고 있습니다. 저희 파트에 대한 소개는 테크 블로그의 카카오톡의 백엔드를 담당하는 ‘톡플랫폼개발팀’ 이야기 글을 참고하셔도 좋습니다.

백엔드 개발자의 길을 걷게 된 계기

저는 대학교 때 코딩을 처음 접했는데요. 컴퓨터공학과 안에도 너무 많은 분야 중에서 진로를 정하기 위해서는 제가 좋아하는 분야를 찾아야 한다고 생각을 했습니다. 어떤 걸 좋아하는지 찾기 위해서는 사실 무엇을 좋아하고 싫어하는지 직접 경험을 해보는 게 중요하기 때문에 그래서 직접 부딪혀보는 방식으로 진로를 찾아갔습니다.

그래서 대학교 저학년 때 안드로이드, 게임 개발, 프론트, 백엔드 등등 가리지 않고 다양한 분야에 관심을 갖고 적극적으로 동아리, 스터디, 외부 활동으로 경험을 늘렸습니다. 여러 활동을 하다 보니 제가 가장 흥미를 느끼는 분야가 백엔드라는 걸 깨달았고 그 이후부터는 백엔드 개발에 더 집중해서 공부를 했습니다. 그 결과 현재 원하는 팀에서 백엔드 개발자로 일을 하고 있어서 만족스럽게 회사를 다니고 있습니다.

카카오에 입사를 하게된 경로

저는 신입 개발자인데 특이하게도 공채로 카카오에 들어오지 않고 상시 채용을 이용해서 톡 메시징 파트에 들어오게 되었습니다.

상시 채용은 면접 과정에서 그 회사와 팀의 분위기를 고려할 수 있고, 원하는 기술 스택을 사용하는 팀에 직접 지원을 할 수 있다는 장점이 있기 때문에 선택을 했습니다. 다만 저처럼 상시 채용으로 입사를 하시려는 신입의 개발자분들은 약 3개월 정도의 수습 기간을 가지기 때문에, 불안정성이 있다는 점 역시도 고려를 해야 합니다. 따라서 저는 ‘서류 > 코딩 테스트 > 전화 면접 > 1차 면접 > 2차 면접 > 합격 후 3개월간의 수습 기간 > 전환 평가 > 정규직 전환’ 이 과정을 거쳐 카카오에 입사를 하게 되었습니다.

아무래도 공채는 바로 정규직으로 입사할 수 있고, 함께 입사하는 동기들이 있다는 점이 저에게는 가장 부러운 점이었습니다. 하지만 카카오에서는 공채를 1년에 한번 진행을 하고 있어 시기가 맞지 않아 지원을 못했습니다. 따라서 취업 준비생이시라면 공채를 준비하시면서 상시 채용도 눈여겨보시면 좋은 결과가 있으실 것 같습니다.

취준 시절 포트폴리오 준비 방법?

사람들마다 본인이 경험하고 학습한 게 다르기 때문에 제 경험이 정답이 될 수는 없겠지만 본인의 강점을 보여줄 수 있는 경험을 어필하는 것이 중요합니다. 그래서 저는 아무리 많은 것을 했더라도 다 버리고 백엔드 개발자로서 가장 어필을 하기 좋은 프로젝트 1~2개 정도만 지원서에 넣었습니다. 아무래도 제가 못하는 것보단 잘하는 것들을 위주로 서류에서도 어필을 하고 면접에서도 제가 아는 부분을 위주로 질문을 받고 싶었기 때문이죠.

제 경험을 예시로 들자면, 대학교 때 스프링부트로 모든 기능을 구현할 때마다 테스트 코드를 작성하는 걸 목표로 하는 프로젝트가 있었습니다. 저는 이 경험에서는 제 포트폴리오가 돋보이게 하기 위해서 수치적인 지표와 이를 위해 깊게 공부해서 노력한 점들을 어필을 했던 게 기억이 납니다.

저는 프로젝트에서 세운 목표를 달성하려고 의식적으로 코딩을 하다 보니 테스트 커버리지 80%가 나왔고, 이 80 프로를 달성하기 위해 필요한 테스트 방법들을 여러 방면으로 학습을 했다는 점에 집중을 했습니다. 또 이 과정에서 객체 지향 원칙을 지켜가며 코딩을 하려는 습관을 가지려 했다는 점을 어필하기 위해 스프링 멀티모듈을 이용해 각각의 도메인을 분리했음을 이야기했고, 어떻게 하면 각각의 도메인이 가지는 역할과 책임을 적절히 분리할 수 있을까라는 고민을 해결하기 위해 여러 관련 서적도 읽었음을 글과 말로 녹여냈습니다.

이런 식으로 새로운 것을 학습할 때 본인의 습관이나 방식을 본인의 강점과 함께 녹여냄으로써 신입 개발자의 열정을 보여주는 포트폴리오를 작성할 수 있으면 좋을 것 같습니다.

외에도 취준과 관련해서 제가 작성한 글을 참고하고 싶으시다면 이 글을 참고해보세요. https://jyami.tistory.com/126

신입 개발자에게 추천하는 책이 있을까요?

  • effective java
  • kotlin in action
  • modern java in action
  • 토비의 스프링
  • ddd start
  • clean code
  • 객체지향의 사실과 오해
  • netty in action
  • micro service pattern
  • 모던 리눅스 관리
  • Redis 운영 관리
  • 쿠버네티스 입문
  • 쿠버네티스 인 액션

아직 저도 모르는 것이 많아 읽어야 하는 책이 너무 많지만, 제가 읽었던, 읽고 있는 책들을 정리를 해보면 위와 같습니다. 개인적으로 실력이 급속도로 늘었던 책은 effective java였으며 이 책을 읽을 때 모르는 부분이 나오면 같이 공부하는 친구들과 java 내부 동작 방식까지 찾아가며 이해하려고 넘어가려고 하다 보니 많은 것을 배울 수 있었습니다.

관련 링크

개발자는 계속해서 공부를 해야 한다는데,
어떤 방식으로 자기계발을 하시나요?

아는 시니어 개발자분이 하신 말이 아직도 기억에 남습니다. 굳이 개발 분야가 아니어도 내가 하는 일에 대한 공부는 계속해서 필요하다고 하셨습니다. 이 말 덕분에 개발자라서 특히나 더 공부해야 하는 환경에 스트레스 받거나 하고 있지 않고, 오히려 공부를 하면 재밌고 그만큼 실력이 상승하는 게 느껴지는 이 업계에서 일할 수 있어서 다행이라고 생각하려 노력합니다.

그럼에도 학생 때와는 다르게 전업으로 하루 종일 개발 일을 하다가 퇴근해서도 공부를 해야 한다고 생각하면 힘든 건 사실입니다. 아무래도 계속해서 공부하는 일이 쉬운 일이 아니다 보니 가능한 재밌게 하려고 합니다. 그래서 저는 주로 같이 공부하는 사람들을 만드는 편입니다. 서로 서로에게 동기부여를 지속적으로 하고 받을 수 있기 때문입니다.

그래서 저는 현재 주 3회 다양한 회사의 주니어 개발자분들과 공통된 책을 정기적으로 읽고는 스터디를 꾸준히 하고 있습니다. 책 외에도 본인이 해결한 주제를 스스로 작게 발표도 하면서 같이 공유하는 시간도 종종 갖곤 합니다. 개인적으로는 사내의 성장 지원 제도를 이용해 기술 관련 인강을 수강하기도 하고 스터디를 준비하기 위해 혹은 스스로 부족하다고 느껴지는 부분을 극복하기 위해 따로 책을 읽습니다.

외에도 영문으로 된 최신 기술문서임에도 계속해서 보시면서 끊임없이 공부하시던 주변 시니어 개발자분들의 모습이 기억이 나네요.

학생 시절 배운 개발과 입사 후 기업에서의 개발에 어떤 차이가 있나요?

대학생 때는 실패를 해도 되는데, 회사에서는 안 된다는 게 가장 크다고 생각합니다. 대학교 때는 실패해도 되니 이것저것 경험적인 차원에서 이것저것 시도를 해보는 게 있었던 반면에 회사에서는 내 코드가 잘못 만들어지면 같이 개발하는 동료들뿐 아니라 사용하는 유저에게까지도 영향이 갈 수 있기 때문에 어떻게 하면 코드를 잘 짤 수 있을까를 옛날보다도 더 고민합니다. 작은 코드 수정이라도 혹시라도 제가 모르는 영향 범위가 있을까 하여 코드 리뷰 요청을 무조건 하고 있습니다.

따라서 개발자가 할 줄 알아야 하는 일이 엄청 많다는 걸 느꼈습니다. 사실 학생 때만 해도 애플리케이션 개발만 확장성 있게 잘 하면 된다고 생각을 했는데, 직접 업무를 해보니 애플리케이션 외에도 많은 것들을 알아야 했습니다. 폭넓은 기술을 알아야 업무 이해도 높아지고 장애 상황에도 빠르게 해결할 수 있기 때문에, 시스템, 인프라, 네트워크 등등 기초가 되는 지식들을 제대로 알고 그 활용을 잘 할 수 있어야 함을 깨달았습니다.

카카오를 선택하게 된 이유

가장 먼저 채용공고를 볼 때 대용량 트래픽을 다룰 수 있는 팀이라는 점에 눈길이 갔습니다. 공고에 써져있는 기술 스택이 제가 원하는 것들이었기 때문에 지원을 하게 되었습니다. 사실 첫인상은 이 정도였는데, 진짜 카카오를 선택을 하게 된 이유는 면접 과정에서 얻은 인사이트 덕분이었습니다.

당시 면접관 분들이 물어보신 기술 질문들은 공부한 기술을 제대로 알고 있는지를 여쭤보는 것들이었습니다. 한 가지 주제에 대해서 더 깊은 질문을 계속 이어가기도 하고, 두 개의 개념이 비슷해서 헷갈릴 만한 질문도 하셨었습니다. 저는 이런 면접 방식이 오히려 이 팀은 한 가지 기술이라도 제대로 알고 넘어가야 하는 팀이라는 인상을 주어서 카카오에서 일하면 많이 성장할 수 있겠다는 생각이 들어 기분이 좋았습니다.

외에도 잘못 대답한 답변도 다음 면접에서 다시 질문하기도 하셨었는데 덕분에 스스로도 헷갈린 부분을 다시 제대로 찾아보고 공부할 수 있는 기회가 되었습니다. 면접 과정에서도 성장을 하게 되어 면접관 분들께 감사했습니다. 따라서 “카카오는 끊임없이 사용하는 기술에 대해 잘 알고 있는지, 영향이 없는지를 계속해서 생각하는 곳이구나. 나도 같이 일하고 싶다.” 라는 생각이 들어 카카오를 선택하게 되었습니다.

신입 개발자로 톡메시징파트에서 하고 있는 일

우선 가장 크게 내부 과제를 진행을 했습니다. 기존에는 여러 사용자들의 메시징 로그를 새벽 배치를 이용해서 저희가 사용하는 운영 툴에 전달하는 방식이었던 것을 개선하는 과제를 맡았습니다. 기존 방식에서 아키텍처를 바꿔 실시간 데이터처리 파이프라인을 이용해 로그를 전달하도록 순차적으로 변경하는 작업을 했습니다.

외에도 내부 운영툴 개선, 유저에게 오는 cs 처리, DB 스위칭으로 인한 새벽 모니터링 작업, 클라이언트 개선 과제 등을 진행하면서 다양한 경험치를 쌓고 있습니다.

파트 내부에서 진행하는 스터디도 참여하여 매주 파트원들끼리 세션을 진행을 하고 있습니다. 현재는 Redis를 사용할 때 주의해야 할 점, cluster, sentinel 등의 아키텍처와 이를 k8s로 적용하기 위해 고려해야 하는 점과 같이 실무와 연관 지어서 하고 있는 공부가 많은 도움이 되었습니다.

또 메시징 파트에 와서 가장 기억에 남는 점을 꼽으면 아무래도 2021년 새해 인사 메시지로 카카오톡 트래픽이 몰리던 상황이 기억이 납니다. 당시 동료 개발자분들이 대기하시는 상황에서 트래픽 그래프가 엄청나게 치솟음에도 아무런 문제 없이 메시지가 잘 수송신 되는 모습을 볼 때 굉장히 뿌듯했습니다.

관련링크

앞으로 카카오 백엔드 개발자로서의 목표

톡 메시징 파트는 배울 점이 많은 분들이 주변에 있는 환경입니다.

10년간의 레거시 코드를 파악하는 것도 쉽지 않다고 느끼는데, 이를 바탕으로 안전하고 빠르게 처리하기 위해 그리고 새로운 기능에도 확장을 쉽게 하기 위해 내부를 계속해서 개선하고 있습니다. 너무 방대한 코드임에도 변경 시 영향 범위나 우려사항을 개선사항 의논을 합니다. 현재 수많은 컴포넌트들과 충돌이 없게 새로운 기능까지 오류 없이 추가하기 위해 노력합니다.

우선적으로는 주변 동료분들처럼 저도 위와 같이 운영, 개선, 새로운 기능 개발을 믿고 맡길 수 있는 한 명의 메시징 개발자가 되고 싶습니다. 메시징 전달을 위한 수백 대의 서버를 운영해본 경험과 노하우는 하루아침에 배우기 힘들겠지만, 한 명의 메시징 개발자로서 조급해하지 않고 천천히 성장하려 합니다.

취업 준비생들에게 해주고 싶은 이야기

공부, 취업 준비를 휴식과 적절히 하는 게 가장 중요합니다. 아무래도 코로나로 취업이 잘 안되는 힘든 시기이다 보니 실력과 함께 마음을 돌보는 것도 중요하다고 느꼈기 때문입니다.

저는 대학생 때 ‘공부를 해도 해도 나는 왜 이렇게 아직도 모르고 잘 못하는 거 같지?’ 하면서 굉장히 초조해했었습니다. 그래서 그런 불안한 마음에 여러 대외활동, 동아리, 공모전 가릴 것 없이 학부 생활을 바쁘게 보냈습니다. 근데 그렇게 몸을 혹사시키다 보니 그렇게 재밌어하던 개발이 싫어지고 번아웃도 오고 슬럼프도 오더군요.

한번 쯤은 쉴 때가 온 거죠, 그래서 그때만큼은 공부도 안 하고 열심히 쉬었습니다. 한번 그렇게 쉬면서 마음 정리를 하니 불안했던 마음도 좀 정리가 되었습니다. 내가 어떤 공부를 하든 어쨌든 하루하루 나아가고 있었는데 왜 그렇게 걱정을 하면서 본인을 갉아먹었을까 싶었습니다.

현재 취준을 하는 분들도 마음이 굉장히 힘들 거라 생각합니다. 면접도 많이 떨리고, 좋지 않은 결과를 얻었을 때는 자존감이 많이 떨어지기 때문입니다. 하지만 주눅 들지 않으셨으면 좋겠습니다. 면접에서 대답을 잘못한 게 있다면 다시 공부해서 부족한 부분을 채우면 되는 것이고, 오히려 모르는 부분을 알았으니 충분히 보완할 수 있다고 마음을 챙기고 그다음 발판을 준비하면 됩니다.

현재의 본인은 충분히 잘하고 있으니 앞으로의 더 높은 성장을 위해 적절한 휴식으로 본인의 마음도 잘 돌보면서 취업 준비를 하셨으면 좋겠습니다 🙂

jyami.kim
jyami.kim 카카오 톡메시징파트의 서버 개발자입니다. 항상 부족함을 느끼고 성장합니다.
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
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
coding test
competition
Compliance
component
conference
consul
container
contents
contest
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
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
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
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
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
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
parallel
PBA
performance
planning poker
Platform
polyfill
programming-contest
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
sharding
shopping
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-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
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
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
coding test
competition
Compliance
component
conference
consul
container
contents
contest
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
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
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
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
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
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
parallel
PBA
performance
planning poker
Platform
polyfill
programming-contest
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
sharding
shopping
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-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업

위로