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


들어가며

title
커피 한잔 (2020.01)

안녕하세요! 저는 2019 카카오 겨울 인턴십을 통해 입사한 톡FE파트의 프레드입니다 🙂

2019년 12월 26일부터 2020년 2월 28일로 마무리된 2019 카카오 겨울 인턴십에 참여하였는데요, 어떤 과정이 있었고, 그 시간동안 무엇을 경험했는지에 대해 이야기하려고 합니다.

프레드의 인턴 입사 전 이야기

제주도
제주도에서 찍은 카카오 (2018.11)

과거 학교에 다니던 시절에 한번은 제주도에 갈 일이 있었는데요, 그때 잠깐 시간을 내어 카카오 스페이스닷원에 방문했던 적이 있었습니다. 그때 당시만 해도 ‘와 이런 좋은 풍경을 보면서 일하면 어떤 느낌일까’ 라고 생각하며 이곳 저곳을 신기하게 구경했던 기억이 납니다.

인터뷰 때 받은 카카오페이 쿠폰 (2019.11)

인턴십을 위해 면접을 보는 동안 생각해보니 카카오 본사에 방문했을 때로부터 약 1년의 세월이 지났더군요. 그 1년이라는 시간 동안 저도 다양한 분야의 일을 경험했고, FE 분야에 대한 재미와 즐거움 또한 느끼고 있다는 것을 깨달았습니다. 카카오에서는 어떻게 일을 할 것인지, 실무에서도 그런 마음가짐으로 일할 수 있을지 궁금했기 때문에 2019 카카오 겨울 인턴십에 지원하게 되었습니다.

온보딩 프로그램 (2019.12.26 ~ 31)

카카오에 입사 후 처음 경험하는 프로그램은 바로 크루들이 잘 적응할 수 있도록 해주는 온보딩 프로그램이었습니다. 공채 개발자의 경우 약 2달 동안 온보딩 프로그램 과정을 거치지만, 카카오 인턴십은 인턴십 기간 (인턴 기간이 약 2달입니다) 자체가 짧아서 사흘 동안 진행됩니다. 온보딩 프로그램 과정은 다양하고 흥미로운 주제로 구성되어 있었습니다. 이 기간에는 무언가를 하는 것보다는, 궁금한 점이 있으면 물어보고 답변 받는 소통을 위한 시간이 많았습니다. 대표적인 세가지 프로그램을 소개해 드릴게요.

이름표와 (달력, 볼펜) 다이어리 세트, 후드집업 (2019.12)

#1. 이름표 만들기

이 기간에는 서로의 이름을 잘 모르기 때문에 (심지어 본인 이름도….) 눈에 잘 띄는 이름표를 만들어 자신의 책상에 놓을 목적으로 이름표를 만들게 됩니다. (좀 더 깔끔한 이름표가 나중에 나옵니다.)

#2. 업무

업무에 필요한 노트북을 받고 이후 프로그램을 진행하기 위한 기본적인 세팅을 하게 됩니다. 그리고나서 카카오가 어떤 곳인지, 크루로서 알아야 할 문화와 업무 방식은 무엇이 있는지를 배우게 되지요. 한편으로는 함께 인턴 생활을 할 분들과 친해지는 시간이기도 합니다.

#3. 사원증 만들기

카카오 사무실 출입문을 열기 위해서는 사원증이 있어야 합니다. 사원증에 들어갈 사진 촬영을 바로 이 기간에 하게 됩니다. 사원증은 인턴, 정규직 구별 없다는 점이 매우 흥미로운 점이 아닐까 합니다. (처음에는 인턴이라고 쓰여있을 줄 알았어요) 이 사원증으로 사내 카페를 저렴한 가격에 이용할 수 있습니다 ?

부서 배치 (2020.01.02 ~ 08)

온보딩 프로그램이 종료되고 나면 인턴 기간에 저를 도와주실 (드라마나 영화에 나오는 공항처럼 푯말을 가지고 서 계시는) 크루를 처음 만나게 됩니다. 이 분들을 버디라고 부르지요. 버디와 함께 마실 수 있는 사내 카페 무료 쿠폰도 받았습니다. ?

저는 FE플랫폼팀에서 근무를 하게 되었는데요, 자리에는 버튼 하나로 조절되는 책상(스탠딩 데스크)과 편안한 의자가 있었습니다. 근무하는 동안 커피와 음료수, 빵, 견과류 등이 제공되고 그것들은 수시로 채워졌습니다. ?

발표 과제 준비 및 프로젝트 진행 (2020.01.09 ~ 02.12)

제가 인턴으로 있었던 FE플랫폼팀에서는 크게 두 가지의 과제가 주어졌습니다.
첫 번째는 몇 가지 실무 과제 중에서 하나를 선택해 이를 수행하는 것입니다. 두 번째는 다른 동료 크루에게 자신이 배운 것이나 알게 된 것을 공유하는 발표 과제입니다. 발표 과제의 경우 주제를 선정하는 것 자체도 시간과 부담이 많이 들 것으로 판단해서 몇 가지 발표 주제 중에서 하나를 선택해 준비하게 됩니다. 팀 내에 발표하는 문화가 잘 정착이 되어 있다는 것을 느꼈고, 팀내 멤버분들은 최대한 많은 것을 배우고 경험할 수 있도록 많은 배려를 해주셨습니다.

인턴 생활은 정규직과 마찬가지로 매일 스크럼과 주간 미팅, 각종 회의 등에 참석해 자신이 했던 업무에 대해 공유하는 시간을 가지거나 의견을 물어보는 시간을 가집니다.

#1. 인턴 주간 기술 블로그

아지트에 올라간 프레드의 인턴 생활기 (2020.01 ~ 02)

인턴 기간 동안 잘했거나 실수한 부분, 그리고 새롭게 배운 내용 등을 주간 회의를 통해 공유하고 아지트에 인턴 기술 블로그를 작성하며 글로 정리하는 시간(회고)을 가졌습니다. 이 시간을 통해서 팀 내의 다른 인턴들은 어떤 업무로 어떤 고민을 하고 그 고민을 어떻게 해결했는지 배울 수 있었습니다.

프로젝트를 하며 작성한 프레드 댓글 (2020.02)

매주 금요일마다 기술 블로그를 작성했습니다. 처음 작성했을 때 한 주간 했던 것을 하루에 생각해서 작성하려 보니까 너무 많은 시간이 소요된다는 것을 깨달았습니다. 어떻게 하면 효과적으로 내가 공부했던 내용, 실수했던 부분, 새로 배웠던 부분을 정리할까에 대해 고민을 했습니다.

어떻게 하면 작업 내용을 효과적으로 정리할 수 있을까?

그래서 업무 파악에 유용한 도구인 JIRA를 통해 정리하는 방식을 선택했습니다. 한 주간 했던 JIRA Task를 보면서 전체적인 업무 활동에 대해 알아보고 상세 내용은 댓글을 통해 어떤 과정을 거쳤는지를 알 수 있어 기존에 처음 6시간 가까이 걸리던 블로그 작업이 2시간 근접하게 줄어들게 되었습니다. 그럴 뿐만 아니라 과제를 진행하면서 내가 왜 이렇게 코드를 작성했을까에 대한 의문을 답할 수 있는 중요한 근거가 되기도 했습니다.

#2. 발표 과제 준비

NUXTJS
프레드, 루카스, 스티븐의 발표자료 (2020.02)

여러 발표 주제 중에서 어떤 것을 하면 좋을지 선택하는 것 또한 인턴의 선택이며 주제별로 하나의 조가 생기게 됩니다. 이 발표에서 중요하게 보는 점은 바로 협력입니다. 제가 선택한 발표 주제는 바로 Server Side Rendering Framework for React & Vue이고 같은 선택을 한 크루는 루카스스티븐이였습니다.

발표를 위해 작성한 문서들 (2020.01 ~ 02)

발표를 위해 주기적인 회의를 진행했습니다. 회의에서는 그동안 어떤 것을 준비했고 어떤 방향으로 해왔는지를 서로 이야기를 나누고 어떤 점은 빼야 하고 어떤 점은 추가해야 한다는 이견을 조율하는 시간을 가지기도 했습니다. 각자 맡은 부분에 대해 문서로 만들어서 해당 문서를 실시간으로 볼 수 있도록 했습니다. 발표를 준비하면서 고려했던 점은 쉽게 내용을 이해할 수 있었으면 좋겠고, 지루하지 않은 시간이었으면 좋겠다라는 것이었습니다. 또 단순히 Next나 Nuxt를 사용해본 경험을 이야기하는 것이 아닌 각각 어떻게 구성되어있고 서로 차이가 있는지도 이야기하고 싶었습니다.

#3. 실무 과제

실무 과제를 선택할 때 모든 과제에 흥미가 있었지만, 예전에 진행한 프로젝트에서 사용한 라이브러리의 불편한 사항을 설계에 반영해 볼 좋은 기회가 아닐까 싶었습니다. 과제를 진행하면서 알게된 점은 코드를 작성하면서 고려해야 할 점이 있다는 것이었습니다.

1. 함수나 변수를 작성 시 `가독성을 해치지는 않는가?`, `불필요한 코드는 없는가?`, `더 나은 방법은 없는가?` 등과 같은 고민과 생각을 했습니다.
2. 특정 함수를 사용하더라도 그 함수의 기능과 특징에 대해 알아보려고 했습니다.
3. 고민을 고민에서 끝나지 않도록 실질적인 테스트도 진행했습니다.

즉, 코드 한 줄이라도 설계의 한 부분이라도 생각하고 고민하고 그 근거를 찾아 문서로 만드는 것이 중요하다는 것을 알게 되었습니다.

#4. 중간 피드백

전환 인터뷰에 앞서서 저를 도와주신 버디와 함께 지금까지 해왔던 일들에 관해 이야기를 나눴습니다. 어떤 점은 잘하고 있고 어떤 점은 부족했다는 버디의 피드백이 있었지요. 제가 받은 피드백은 Javascript 코드가 올드하다는 것이었습니다. 대표적으로 private 함수나 메서드의 이름에 _를 사용하는 것입니다. 제가 공부했던 Javascript Style Guide는 번역된 것으로 _를 권장하고 있었습니다. 하지만 발표를 준비하면서 Nuxt의 번역된 가이드가 오래된 버전을 기준 삼고 있다는 것을 보았고 번역된 문서는 최신 내용을 반영하기까지 시간이 많이 (때로는 심각하게) 걸린다는 것을 깨닫게 되었습니다. 이러한 깨달음을 바탕으로 피드백을 보완하기 위해 번역된 가이드가 아닌 원문 가이드로 공부를 했습니다. (Airbnb: Javascript Style Guide :: Do not use trailing or leading underscores.)

발표 과제 발표 및 전환 인터뷰 (2020.02.13 ~ 19)

약 3주간의 발표 과제 준비를 마치고 팀 전체를 대상으로 발표를 진행했습니다. 이후 전환 면접을 위한 몇 가지 준비하는 시간을 가졌습니다.

#1. 발표 과제 발표

발표
NUXT JS에 대해 소개하는 프레드 (2020.02)

발표 준비에서 말했듯이 사전에 여러 번의 회의를 거치고 서로 발표를 해보는 시간을 통해 어떤 점을 개선해야 할지 논의하는 시간을 가졌습니다. 아래는 저희가 발표를 하기 전까지의 전체적인 과정입니다.

조 구성(발표 주제 결정) > ( 조 회의 > 코드 분석 ) > 발표 PPT 제작 > 연습 > 발표

FE플랫폼팀 전체 크루를 대상으로 지난 3주간 준비한 발표를 진행했습니다. 총 3개 조가 서로 다른 방식으로 준비한 발표를 진행했고 이후에는 발표에 대한 질문과 응답을 하는 시간을 가졌습니다. 대부분 시험처럼 시간이 더 있었으면 더 나은 발표를 했을 텐데라는 아쉬움을 가지고 진행했던 기억이 있습니다.

#2. 전환 면접

지금껏 열심히 달려온 당신의 목표가 거울에 보이는 것보다 더 가까이 있습니다.

인터뷰실에 들어가면 거울에 적힌 문구입니다. 이 문구를 보면서 후회 없도록 하고 싶은 이야기는 다 하고 오자라는 다짐을 하게 되었습니다. 면접에서는 인턴 기간 동안 해왔던 것과 그 과정에서 하게 된 고민, 또 그것들을 어떻게 해결하려고 노력했는지를 이야기했던 것 같습니다. 면접을 마치고 먼저 면접을 보신 분들과 함께 커피를 마시며 앞으로 면접을 보고 오실 분들을 기다렸습니다 : )

#3. 최종 회고 작성

인턴으로서 마지막을 장식하는 부분입니다. 결과를 듣기 전에 작성해야 했던 이 업무는 많은 생각을 하게 만들었습니다. 앞으로 새롭게 들어오실 인턴분들에게 메시지를 남기는 시간이기도 했습니다. (만약 여러분들이 카카오에서 인턴을 하게 된다면 제 글도 보실 수 있을 겁니다.)

마무리 및 피드백 (2020.02.20 ~ 26)

인턴십을 마무리하는 시간으로, 인턴십 결과에 대해 듣고 이에 따른 피드백을 받을 수 있는 시간입니다. 하지만 아쉽게도 코로나 바이러스로 인해 재택 근무를 하게 되어 온라인으로 피드백을 받게 되었습니다.

#1. 피드백

드디어 합불 결과를 들으며 인턴십이 마무리되었습니다. 그 후, 합불 결과에 상관없이 FE플랫폼팀의 팀장이신 킨으로부터 약 2달간의 인턴십 생활에 대한 전반적인 피드백을 받았습니다. (이때 다양한 질문도 받아주십니다.)

전환 후에는 무슨일을 할까요

저는 아쉽게도 아직 배포해본 경험이 없어 인턴 생활을 같이하고 배포 경험이 있는 티니2020 총선특집 페이지 참여 경험을 소개하고자 합니다.

#1. 들어가며

안녕하세요! 저는 2019 카카오 겨울 인턴십을 통해 입사한 콘텐츠FE파트 티니입니다 🙂

저는 전환 후 미디어(뉴스) 개발팀에서 진행하는 2020년 총선 특집페이지의 웹 FE 개발을 진행하게 되었습니다. 기존에 진행 중이시던 버디의 프로젝트를 제가 1주일간 이어서 개발을 진행한 후, 1주일간 QA를 거쳐 버그를 수정했고 이후 배포를 진행하였습니다.

#2. 개발

1. 기획서 및 상세 기능 이해
2. 인수·인계받기
3. 프로젝트 구조 이해
4. 개발 진행

첫날에는 기획서를 읽으며 프로젝트를 이해하고, 개발 프로젝트를 인수·인계받아 동작 구조를 이해하는 시간을 가졌습니다. 그 후 개발을 진행하였는데, 처음에는 어려움이 생긴 상황에 대하여 다른 분들에게 도움을 요청하고 수정이 필요해 보이는 부분에 대하여 논의하는 것이 어색하여 저 혼자 전전긍긍 하고는 하였습니다. 그러나 이후에는 미디어 팀 개발자분들에게 API 수정 요청을 하기도 하고, 마크업 개발자분들에게 마크업 수정 요청을 하며 개발을 진행하였습니다. 서버 개발자분들과 협업해본 경험이 적고, 마크업을 받아서 FE 개발을 해본 적은 처음이라 협업 방식이 처음엔 많이 어색하였지만 모든 분이 빠르고 친절하게 대응해 주신 덕분에 원활히 소통하며 개발을 진행할 수 있었습니다 🙂

#3. QA

지난주의 제 코드가 절 채찍질하는 것을 발견할 수 있었습니다. ㅠ_ㅠ

배포 나가기 전 일주일은 QA(Quality Assurance, 출시 이전에 오류를 사전에 찾아 수정하는 과정)를 진행하였습니다. QA 동안에는 아래와 같은 일들을 진행했습니다.

- 기능에서 생기는 버그 수정
- 마크업 수정 반영
- 사용자 경험 개선을 위해 기능 추가
- 수정된 API 반영

QA 중에도 꾸준히 마크업이 수정되기도 하고, 기능이 추가되기도 하였기 때문에 정상적으로 작동하였던 페이지에서 버그가 발생하기도 하고, 한 컴포넌트에서 여러 기능을 관리하는 것에 어려움을 겪기도 하였습니다? 처음에는 쌓여가는 QA 목록들을 보며 당황하고 무엇을 먼저 해야 할지 혼란스러웠지만, 시간이 지나며 제가 어떤 부분을 많이 놓치며 개발을 진행하였는지, 어떤 부분에서 버그가 많이 발생하는지 직접 느낄 수 있어 개발을 진행한 1주일보다 QA를 진행하며 더 많은 것을 배울 수 있었습니다.

#4. 배포

입사와 동시에 진행 중인 프로젝트에 투입되었기 때문에 처음에는 많이 막막하였고, 배포가 얼마 남지 않았다는 생각에 많이 부담스럽기도 하였습니다. 하지만 버디와 미디어 팀에서 제 질문이나 요청에 친절하게 도와주셔서 금방 적응하고 QA까지 마무리 짓고 배포될 수 있었습니다? 바쁘고 혼란스러운 2주였지만, 실 서버에 배포되어 많은 사용자가 사용하는 경험은 학교에 다니거나 토이 프로젝트를 통해서는 경험해볼 수 없었기 때문에 배포 후 큰 뿌듯함을 느낄 수 있었습니다?

마지막으로

카카오 사무실 입구에서 라이언과 함께 (2020.02)

다시 프레드입니다! 카카오에서 실무 경험을 맛볼 수 있었고 FE플랫폼팀에서 진행하는 미팅이나 스크럼 등 짧은 기간에 최대한 많은 경험을 할 수 있었다는 점이 좋았습니다. 그뿐만 아니라 코드 리뷰, 스크럼 등과 같은 부분에서 많은 신경을 쓴다는 것을 느꼈습니다. 특히 다음과 같은 항목이 좋았습니다.

1. 매일 스크럼을 진행하고 피드백을 주면서 응원해주셨습니다.
2. PR을 하면 코드 리뷰를 하시며 상세하게 보고 리뷰를 해주신다는 느낌을 받았습니다.
3. 의견을 충분히 들어주시고 반영해주십니다.
4. 자율 출퇴근 제도가 좋았습니다

저는 인턴을 시작하면서 카카오에서 배울 수 있는 건 배우자!, 도전할 수 있는 건 다 도전하자!와 같은 다짐을 했습니다. 이러한 다짐이 지금의 프레드를 만든 것이 아닐까 생각합니다. 인턴을 하며 다짐했던 것을 잊지 않고 카카오크루로써 계속해서 발전하는 프레드가 되겠습니다 ?

마지막으로 인턴 생활을 하면서 이렇게 하면 좋겠다고 생각했던 부분들을 정리해봤습니다!

1, 더 많이 생각하고 깊게 고려하자.
2. 어떤 생각, 고민으로 설계, 구현했는지 기록하자.
3. 코드 한 줄이라도, 설계 한 부분이라도 그 근거를 찾자.
4. 자기 자신에 대해 어필하는 것도 중요하다.
5. 문서화를 잘하자.

긴 글 읽어주셔서 감사합니다 ?

fred.dy
fred.dy 카카오에서 FrontEnd 업무를 담당하고 있습니다
Top Tag
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
coding
competition
component
conference
consul
container
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developers
devops
digitalization
digitaltransformation
dns
docker
employeecard
eslint
Featured
friendstime
front-end
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
programming-contest
pycon
python
quagga
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
update
vim
vim-github-dashboard
vim-plugin
vue
web-cache
webapp
WebSocket
weekly
All Tag
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
coding
competition
component
conference
consul
container
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developers
devops
digitalization
digitaltransformation
dns
docker
employeecard
eslint
Featured
friendstime
front-end
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
programming-contest
pycon
python
quagga
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
update
vim
vim-github-dashboard
vim-plugin
vue
web-cache
webapp
WebSocket
weekly

위로