Client 기술, 어떤 직무가 나에게 딱 맞을까?

안녕하세요! 지난 4월 16일, 현재 카카오에서 모집 중인 2022 여름 인턴십의 직무들을 자세히 소개하는 시간을 가졌는데요, 이때 부득이한 일정으로 참석하지 못한 분들을 위하여 중요한 정보만 쏙쏙! 전달드리려고 합니다.

Client 기술을 다루는 개발자가 되고 싶은데 이번 카카오에서만 해도 Client 내에 4가지 직무에서 모집을 하고 있는데, 어떤 직무가 나에게 좋을까? 클라이언트 직무 선택에 고민하고 계신 분들이 있다면 집중! 지금부터 그 이야기를 풀어갑니다.



iOS 개발

카카오에서 iOS 클라이언트가 무슨 일을 하는지 어떻게 일하는지 인턴십 기간 동안 무엇을 만드는지 간단히 설명드리도록 하겠습니다.

흔히들 한국에서 iOS는 비주류 플랫폼이라고 생각하시는 분들이 계실 것 같습니다. But 매년 그 비율이 늘어나고 있습니다. 젊은 사용자들의 거의 절반, 전체 사용자 기준으로도 약 25%가 아이폰 사용자이고 매년 그 비율을 늘어나고 있는 추세입니다. 더 이상 한국에서 비주류 플랫폼은 아닙니다

카카오에서도 거의 대부분의 서비스를 iOS로 제공하고 있을 만큼 중요한 플랫폼으로 생각하고 있습니다. 카카오 하면 카카오톡이 많이 떠오르실 텐데요, 카카오톡 이외에도 카카오에서는 많은 서비스들을 완성도 높게 제공하고 있습니다.


카카오 iOS 개발자의 업무

카카오에서 iOS 개발자의 업무는 크게 3가지로 이야기할 수 있습니다.

  • 첫 번째, 다양한 애플 기기에서 동작하는 서비스를 만드는 것입니다. 클라이언트 개발자는 기획자/디자이너/ 서버 개발자와 협력하여 기능을 만듭니다 개발뿐 아니라 기획의 초기부터 참여하여 왜 이 기능을 만들어야 하는지부터 논의하고 개발 단계에서는 데이터의 흐름부터 시작해서 API 명세를 서버 개발자와 함께 정합니다. 저희는 논의의 과정이 충실할수록 서비스의 완성도가 높아진다고 믿고 있습니다.
  • 두 번째로는 서비스의 유지입니다. 필드에는 다양한 버전의 os와 디바이스들이 있는데요. 물론 배포 시마다 테스트를 진행하지만, 단말마다의 환경이 다르고 사용 방식이 다르기 때문에 테스트만으로 모든 문제를 발견할 수는 없습니다. 그래서 다양한 모니터링/지표 수집 등을 통해 사용자에게 영향을 주는 크래쉬나 사용성 이슈를 추적하고 해결합니다.
  • 마지막으로 코드를 개선하는 일을 합니다. 치열한 논의를 거쳐 기능 개발을 하고 나면 결국 코드가 남는데요. 서비스의 역사가 길어질수록 서로 다른 스타일의 코드가 쌓이게 됩니다. 누구도 돌아보지 않는다면 지속적인 기술 부채가 쌓일 테고 누구도 만지고 싶어 하지 않는 코드가 될 수도 있죠. 그래서 지속적인 레거시 코드의 현대화 우리고 꼭 진행해야 하는 부분이고 시간을 내어 진행하고 있습니다. 카카오톡의 경우에도, 2018년경 대부분의 코드가 objective c이고 하나의 프로젝트에 담겨있었지만, 현재는 대부분의 코드가 swift이고 계층적인 프레임 워크 구조로 바뀌었습니다. 올해 내로 완전히 전환하는 것을 목표로 하고 있습니다. 


또한 이 밖에도 매년 WWDC에서 소개되는 새로운 기능들을 실제로 서비스에 녹일 수 있는 부분들을 찾아서 적용하는 것을 고민하는 것도 iOS 개발자의 몫입니다.  서비스가 확장되고 기능이 추가되다 보면 기존의 구조로는 해결할 수 없는 문제들이 나타나는데요. 이때는 기존의 구조를 확장하고 때로는 과감히 바닥부터 다시 만들기도 합니다.


개발 프로세스 

개발 프로세스는 곧 서비스 개선 프로세스라고 보셔도 됩니다. 팀마다 조금씩은 다르겠지만 유사한 스프린트의 형태를 갖추고 있습니다. 어떤 과제를 진행할지 정하는 게 첫 번째 일이겠죠? 과제가 정해지면 과제 담당자를 정하게 되고 이 담당자가 과제의 리뷰 및 스펙 논의에 참여하게 됩니다. 

스펙이 어느 정도 정해지면 개발 일정을 산정합니다. 이때 산정한 일정이 예상보다 크다면 여러 스프린트로 쪼개서 진행하기도 합니다. 이후 디자인 시안 리뷰, 서버 API 결정, 상세 기획 등과 병행해 클라이언트 개발도 시작하게 되며 개발서버 환경에서 다른 파트의 진행도에 맞춰가며 작업을 합니다.

작업이 마무리 단계에 이르면 다국어 번역과 접근성 문구를 추가하여 1차 빌드를 만듭니다. QA에서는 여러 가지 테스트 케이스들을 만들어 테스트를 진행하고, 이 과정에서 발견되는 이슈들을 수정합니다. 또한 개발자의 작업물이 디자이너의 의도에 맞게 구현되었는지 디자인 검수를 진행합니다.. 검수와 테스트 중 발견된 모든 이슈를 수정하면 스프린트가 마무리되고 앱스토어에 서밋을 하게 됩니다. 마지막으로 회고를 거치고 이 과정을 반복하게 됩니다.


iOS 기술 도메인

거의 모든 도메인을 다룹니다. 라이프 플랫폼을 지향하여 여러 가지 서비스를 포함하고 있는 톡처럼 광범위한 도메인을 다루는 앱도 있고, 스토리, 브런치, 지도와 같이 핵심 도메인에 최적화된 앱들도 있습니다. 또 서비스마다 다른 기술 스택이 필요하기도 한데요. 이런 것들을 처음부터 다 알고 시작하기는 매우 어렵습니다. 누구든 처음엔 작은 부분에서 시작하여 꾸준히 영역을 넓혀가기 마련이라 처음부터 너무 걱정하실 필요는 없습니다.

하지만 우리는 인턴십 과제를 진행해야 하기 때문에, 필수적으로 알아야 할 것들이 있는데요. UI를 구성해야 하기 때문에 UIKit / Autolayout은 알고 계셔야 하고요. 코드를 작성하기 위한 Swift는 필수입니다. 그리고 iOS가 어떻게 동작하는지에 대한 이해도 필요합니다. 대부분의 과제는 서버와의 통신도 필수이기 때문에 그 부분도 알고 계셔야 합니다.

그 외 file i/o나 로컬 db 핸들링 등도 아시면 좋지만 서비스에 따라 필수는 아닙니다. 이런 기술적인 면과 더불어 자신의 생각을 정확히 전달하는 능력과 성장하려는 태도, 그리고 서비스에 대한 관심이 업무를 시작하기 위한 조건이 아닐까 생각합니다. 

카카오 iOS 개발에 많은 관심과 지원을 부탁드립니다!


Android 개발

이번 카카오 안드로이드 직무에서는 카카오톡 보이스톡/ 페이스톡 등 실시간 통화 서비스 개발 또는 신규 서비스 앱 개발에 함께할 인턴분들을 모집하고 있습니다. 

클라이언트 안드로이드 직무는 사용자와 직접적으로 마주치는 영역의 개발이라 자신의 코드가 유저에게 직접적인 영향을 바로 준다는 매력과, 서비스 전체의 상을 통합적으로 바라볼 수 있는 시야를 키울 수 있다고 생각합니다. 특히 안드로이드의 경우는 다양한 서비스 기술 영역 및 서비스 도메인에 대한 접근이 용이하다고 생각하는데요.  

Android 직무를 고민하는 지원자분들께 몇 가지 특징으로 매력을 전달드리려고 합니다. Android의 경우 공부할 수 있는 자료가 매우 풍부하여 기술의 확장이 용이합니다. 또한 초기 개발에 대한 접근이 편리하고 개발 환경이 다양하며 새로 나오는 신기한 단말들 (폴더블, 롤러블 등등)을 미리 접할 수 있는 기회가 많이 있습니다. 그리고 파일에 대한 접근이나 Low level에 대한 컨트롤이 iOS에 비해 조금 더 용이하다는 장점을 가지고 있습니다. 


Android 기술 도메인

거의 모든 도메인을 다룹니다.

프로젝트를 짤 때 가장 중요한 부분이라고 생각하는 부분은 기능별 모듈화입니다. 카카오에서 서비스하는 프로젝트 단위는 작은 프로젝트가 아닌 큰 프로젝트이기 때문에 네트워크부터 렌더링, 카메라 등등 다양한 기능을 모듈화하는 것을 가장 중요하게 생각하고 있습니다. 이 밖에도 배울 수 있는 기술은 네트워크 통신, 결제, 이미지프로세싱, 소켓 레벨 통신 등 다양한 기술을 경험할 수 있습니다. 

Android 개발과 Android 내부 구조에 대한 관심이 높은 분들을 기다리고 있습니다. 올여름, 다양한 Android 프로젝트를 통해 Android 개발자로 한층 더 업그레이드될 여러분들의 많은 지원을 기다립니다! 


Front-End 개발


요즘에는 프론트엔드 개발자가 웹페이지, 웹 애플리케이션, 모바일 애플리케이션뿐만 아니라

HTML/CSS를 사용하지 않는 백엔드 애플리케이션을 만들기도 하고, Electron을 활용하여 데스크탑 애플리케이션을 만드는 경우도 있습니다. 이 중에서 카카오에서는 프론트엔드 개발자가 어떤 일들을 많이 하는가?에 대한 부분이 궁금하실 것 같은데요. 카카오에서는 다음, 카페 등 전통적인 웹페이지와 카카오톡에서 보이는 여러 싱글 페이지 애플리케이션을 주로 만들고 있습니다. 간혹 데스크탑 애플리케이션을 만들기도 합니다.

위 내용의 예시를 한 번 가져와 봤는데요. 다음 첫 페이지나, 잔여 백신 예약 서비스, 카카오톡 내 결제 기능, 카카오 메일, 카페/티스토리 에디터 등 다양한 서비스를 프론트엔드 기술을 활용하여 구현하고 있습니다.

이외에도 다양한 서비스를 만들고 있고, 다양한 기술을 활용하고 있습니다. 아마 프로트엔드에 관심이 있으신 분들이라고 하면 한 번쯤은 모두 들어보셨을만한 기술들을 모두 사용하고 있다고 말씀드릴 수 있습니다. 개발자가 개발할 환경과 언어를 선택할 때는 제한 없이 다양한 기술을 많은 논의를 통해 선택하고 결정할 수 있는 기회가 열려있습니다.


업무 프로세스

대부분의 타 직무 개발 업무 프로세스와 비슷합니다. 이 중에서 가장 주목할 만한 업무 프로세스 중 하나는 코드 리뷰라고 생각합니다. 가능한 많은 개발자들과 많은 코드들을 서로 리뷰하고 도울 수 있는 환경을 제공하고 있고, 거의 대부분의 코드를 리뷰를 통해 확인하고 배포하고 있습니다.

또한 코드 리뷰만큼 중요하게 여기고 있는 프로세스는 회고입니다. 개발과정에서 잘했던 것, 잘할 수 있는 것을 서로 이야기하고 회고하면서 다음 과정에서는 일을 더 잘해보고자 하는 노력을 하고 있습니다.

프론트엔드 개발자로서 카카오 인턴십을 통해 얻을 수 있는 것은 다음과 같습니다. 아래와 같이 다양한 경험과 피드백을 통해 2개월 후에는 확실하게 성장한 나의 모습을 확인할 수 있을 것이라고 장담합니다. 또한 이 경험을 통해서 카카오에서 일해야 하는, 입사해야 하는 이유를 얻어 가실 수 있을 것이라고 생각합니다.

카카오의 프론트엔드 개발자는 프론트엔드 기술을 이용해서 더 나은 세상을 만들기 위해 노력하고 있습니다. 관심 있는 분들이 많이 지원해 주셔서 함께 만들어 갈 수 있으면 좋겠습니다! 


Windows 개발

Windows OS는 이 글을 보시는 모두가 익숙할 거라고 생각이 되는데요, 카카오에서 서비스 중인 윈도우 애플리케이션은 톡 PC버전, 팟플레이어, 멜론플레이어 이렇게 3가지입니다. 이번 인턴십을 진행하게 되는 서비스는 톡 PC를 만드는 부서인데요. 그렇기에 다른 직무와는 달리 조직과 일에 대한 이야기로 직무를 소개 드리려고 합니다.


톡PC파트의 업무

톡PC파트의 업무는 크게 2가지로 나눌 수 있습니다. 어느 서비스와 비슷하다고 생각이 되는데요. 

  • 첫 번째로 현재 운영 중인 톡PC버전의 기능 개발과 유지 보수 업무가 있습니다. 기능 개발은 개발, 기획, 디자인 ,QA 직군과 협업을 하며 진행하고 기획안을 바탕으로 요구사항 분석 및 설계를 진행합니다. 또한 다양한 방면의 검토를 하고 시안을 바탕으로 View와 로직을 구현하게 됩니다.
  • 두 번째는 신규 톡PC 기능 개발입니다.  신규 개발은 현재 운영 중인 톡PC버전의 기술 부채 해결을 위해 진행되는 과제입니다. 자체 제작한 ui로는 한계에 봉착한 부분들을 신규 UI framework를 도입하려고 하고 있고, 이사이 여러 고민과 논의를 진행하고 있습니다. 초기 설계부터 진행하는 경험을 통해 기존 코드 분석이 진행되어야 하기 때문에 카카오톡 전체 구조에 대한 이해도를 높일 수 있을 것이라고 생각합니다.

 

windows 직무의 주사용 언어는 C++이고, qml, javascript는 신규 버전 ui구현에 사용하고 있으며, 이 밖에도 python, Flask를 이용한 crash report 서버 구현, jenkins 빌드 배포 시스템을 사용하고 있습니다. 그런데 여기서 중요!!  여러 가지 기반 지식이 필요하지만 현재 인턴 지원자분들께 요구되는 가장 중요한 스킬은 C++ 입니다. 그 외 나머지는 입사 후 교육을 통해 배워나갈 수 있는 환경이 되어 있습니다.


Windows에 지원하세요! 

하루 천만 명이 사용하는 제품의 기능 개발/운영을 하기 때문에 대용량 서비스에 대한 경험을 키울 수 있으며, 사용자 지표 분석을 통해 다양한 인사이트를 얻을 수 있습니다.

인턴 과제는 페어로 진행하게 되고 다양한 코드 리뷰를 통해 피드백을 얻을 수 있으며, 개인의 코드가 아닌 톡PC버전의 코드를 리뷰하는 관점에서 리뷰가 진행됩니다. 더 다양한 피드백, 리뷰를 위해 힘쓰고 있으며 교육, 발표, 리뷰를 자주 활용하면서 조직 구성원의 역량 향상에 함께 힘쓰고 있습니다.


꿀팁 Q&A

Q : 클라이언트 직무는 인터뷰를 진행할 때 어떤 식으로 진행하고 또 최소한 어떤 지식은 있어야 할까요?

– FE
HTML/CSS를 전혀 모르는 것은 조금 어렵고, JavaScript를 사용하기에 HTML/CSS, JavaScript에 대한 높지는 않더라도 어느 정도 이해는 있어야 합니다. CS 지식의 경우 큰 비중을 두고 보지는 않지만 이해도가 높으면 +는 될 수 있다고 생각해 주시면 됩니다. 면접은 본인이 기술한 경험에 대해 어디까지 확실히 알고 있는지 확인하고, 그걸 바탕으로 어디까지 논리적으로 추론하고 서로 다른 지식을 엮어서 새로운 답을 만들어 가는지를 본다고 생각하시면 됩니다.

– iOS
과제 진행에 필요한 기본 스킬들이 UIkit, AutoLayout, Swift, iOS 플랫폼에 대한 기본적인 이해, RESTful API 통신 정도이고, 이 밖에도 자신의 생각을 정확히 전달하는 능력과 성장하고자 하는 태도 그리고 서비스에 대한 관심이 필요하다고 생각합니다. 

 CS 지식과 포트폴리오 2가지를 보는데 비중은 반반일 것 같은데 경험에 따라 질문을 드릴 수 있을 것 같습니다.

– Android
가장 기본은 언어에 대한 이해도라 C, C++,java에 대한 지식을 물어볼 것이고, 지원자가 프로젝트 경험이 있다면 프로젝트에 대한 상세 내용을 여쭤볼 수 있을 것 같습니다. 또한  커뮤니케이션 방법이나 태도를 보고, 왜인지에 대해서 스스로 고민해 본 흔적이 있는지에 대한 부분을 중점적으로 볼 예정입니다. 

면접 볼 때는 무조건 협업이기 때문에 대화와 태도를 중점으로 봅니다. 기술적인 부분은 미흡해도 팀에서 어느 정도 배워갈 수 있습니다.

– Windows
C++ 코드를 읽고 쓰는데 문제없으면 됩니다 . 이외에 업무를 하는데 필요한  배경지식은 파트에서 교육을 진행할 예정이며, 윈도우 기반기술을 학교에서 배우지 않았기 때문에 입사해서 배운다고 생각하면 되고, C++과 CS 기초 지식에 대한 질문을 드린다고 생각하시면 됩니다. 

Q: 어떤 과제를 수행하게 되나요?

– FE
진행하는 부서에 따라 다르지만 제가 담당하고 있는 FE플랫폼팀의 경우 아무것도 없는 상태에서 프론트엔드 기술만을 사용하여 결과물을 만드는 과제를 준비하려고 합니다. 어떤 주제가 될지는 아직 미정이지만 기능 명세를 만족시키는 결과물을 만든다고 생각해 주시면 됩니다. 참고로 작년에는 다이어그램 편집기를 만들었습니다.

– iOS
가장 흔한 방식은 현업의 코드를 베이스로 하는 방식입니다. 즉. 돌아가고 있는 팀의 코드를 브랜치로 받아 나만의 기능을 추가해 보는 거죠. 물론 사전에 어떤 기능을 구현할지 정의된 요구 명세서가 있지만, 여기에 디테일한 부분들은 여러분이 만들어 가시게 됩니다. 이 과정에서 지원자는 현업의 코드를 빠르게 파악해야 하고, 요구사항을 구체화시켜 나가게 됩니다. 혼자서 현업의 코드를 분석하고 기능을 만들어 내는 건 경력자에게도 쉽지는 않은 일인데요. 그래서 멘토의 충분한 멘토링이 뒷받침됩니다.

– Android
조직마다 다르겠지만, 우선은 저희 팀은 어떤 프로젝트 웹 RTC에서 테스트 코드를 보려고 하고 내부 프로젝트가 어떻게 들어가는지  보려고 합니다. 이외에 조금의 기능 구현의 미션 과제를 드릴 수 있을 것 드리려고 합니다. 새로운 기능을 구현하는 것은 없습니다. 

– Windows
톡 PC 기능 추가나 리서치 필요한 부분에 대한 내용을 과제로 드릴 예정입니다. 어떤 과제를 할지는 구체적으로 정의하지는 않았지만 작년과 비슷한 방식으로 진행하려고 준비하고 있습니다. 

Latest Posts

[get Server!] [커머스CIC] 채널개발파트 소개 드려요!

평소 커머스 도메인에 관심이 많았다면? 톡딜을 통해 핫템을 득해본적이 있다면? 한번이라도 라이브커머스를 넋놓고 쳐다본적이 있다면? 라이언이랑 춘식이랑 함께하는 카카오 커머스CIC에서 개발자의 꿈을