2023 카카오 신입 공채 iOS 온보딩 회고

들어가며

안녕하세요! 오픈링크 iOS셀의 forest입니다. 저는 지난 12월 2023 블라인드 신입공채로 카카오에 합류하게 되었습니다. 공채 뉴크루들은 입사하여, 약 1달간의 공통 온보딩 과정을 마친 후에 6주 동안 직무별 기술 온보딩 프로그램을 진행하게 됩니다. 이 중 제가 경험한 iOS 직무 기술 온보딩 프로그램에 대해서 회고해보려 합니다.

온보딩 첫날 기념사진

iOS 온보딩은 이렇게 진행됩니다

온보딩은 ⌜Swift 프로그래밍⌟ 저자이자 iOS 부트캠프 “야곰 아카데미”의 리더인 야곰이 담당해 주셨습니다. Swift를 처음 접하는 크루도 있기에, Swift 언어의 기초부터 시작해 iOS의 프레임워크와 뷰 컴포넌트들을 학습하는 단계부터 시작했습니다.

온보딩 프로그램은 온라인으로 진행되었는데요, 매주 2회의 라이브 세션과 활동학습 그리고 프로젝트로 이루어져 있습니다.

라이브 세션

라이브 세션은 야곰이 직접 진행해 주셨습니다. 단순히 지식을 전달하는 방식이 아닌, 학습 주제에 대한 자료를 뉴크루들이 먼저 예습하고, 라이브 세션 중에 각자 토론 및 질문을 통해, 애매하게 알고 있는 것을 확실히 내 것으로 만들 수 있는 시간이었습니다.

라이브 세션 with 야곰

활동학습

매주 새로운 주제에 대해, 페어로 미션을 같이 수행하면서 개념을 익히고 활용하는 시간이었습니다. 미션 결과를 다른 페어 그룹과 공유하면서, 이해가 어려운 부분에 대해서 질문을 하거나 참고하는 시간을 가졌습니다.

KeyChain을 주제로 summer와 활동학습 미션 수행 중!

프로젝트

온보딩에서 4개의 프로젝트를 진행했습니다. 라이브세션과 활동학습에서 배웠던 주제를 활용하고, 추가적으로 필요한 지식을 자기 주도적으로 학습하여 앱을 만들게 됩니다.

프로젝트는 스텝 바이 스텝으로 진행됩니다. 먼저 스텝의 요구사항이 공개되면, 코드를 작성해서 리뷰어에게 PR을 보냅니다. 리뷰어가 리뷰를 남기면, 저희는 그 리뷰를 반영하여 코드를 보완하고 스텝을 마무리한 후, 다음 스텝으로 넘어가게 됩니다.

마지막 미션 프로젝트를 제외하고는 2명씩 짝을 이루는 페어 프로그래밍으로 프로젝트를 진행했습니다.

성적관리

첫 프로젝트로는 연락처를 관리할 수 있는 콘솔 앱을 만들었습니다.

이 프로젝트를 통해 Git의 사용법과 Swift의 기본 문법에 익숙해질 수 있었고, 단위 테스트(Unit Test)를 활용한 테스트 주도 개발(TDD)을 경험할 수 있었습니다.

로그인-프로필

카카오톡의 로그인 화면과 프로필 화면을 간단한 앱으로 만들었습니다.

모바일 앱 아키텍처로써 가장 기본적인 개념인 MVC 아키텍처를 배우고 적용하였습니다.

또한, iOS 애플리케이션의 생명주기인 App Life Cycle과 뷰의 생명주기 View Life Cycle을 학습하고, 각 Life Cycle에서 발생하는 이벤트를 활용하여 코드를 작성했습니다. 아울러, 뷰 컴포넌트를 사용할 때 Apple의 디자인 철학이 잘 담겨있는 HIG(Human interface guideline)를 프로젝트에 적용하는 경험을 할 수 있었습니다.

만국박람회

만국박람회의 개최정보와 출품작 정보를 제공해 주는 앱을 제작했습니다.

아이폰 사용자라면 익숙하실 “손쉬운 사용” 설정과 연관이 있는 접근성(Accessibility)에 대해서 학습했고, 글꼴에 Dynamic Type을 적용했습니다. 이 과정에서 세로모드(Portrait)와 가로모드(Landscape)를 모두 지원하기 위해, 화면의 모드가 변할 때 오토레이아웃(Auto layout)이 화면을 동적으로 변경하도록 구현하는 방식에 대해 학습했습니다.

박스오피스

REST API를 사용하여 박스오피스 정보를 보여주는 앱입니다.

네트워크 통신을 위한 네트워크 모델 객체 설계, HTTP Request와 JSON 데이터를 파싱을 위한 요청/응답 타입 설계, 통신으로 받아온 데이터를 다양한 뷰 컴포넌트를 사용하여 뷰를 표현하는 과정 등, 정말 많은 경험을 할 수 있는 프로젝트였습니다. 구현 과정에서 Diffable Data Source와 Compositional Layout을 활용한 Modern Collection View를 적극적으로 적용해 화면을 구현했습니다.

기술적 고민

6주간의 온보딩 동안 저와 iOS 뉴크루 동기들은 여러 기술적인 고민을 했는데요, 그중 가상 인상 깊었던 주제를 소개드리려 합니다.

네트워크와 무관한 테스트 작성하기

위에서 소개드린 박스오피스 앱에서는 REST API를 사용하기 위해, 앱 내부에서 네트워크 통신을 수행하고, 결과로 받은 데이터를 가공하여 화면에 정보를 보여줍니다. 그런데 테스트를 진행할 때마다, 매번 실제 데이터를 가져오는 서버와 통신을 한다면 아래와 같이 몇 가지 문제가 발생하게 됩니다.

앱이 서버와의 통신을 통해 데이터를 가져오고 뷰를 업데이트하는 과정
우리가 테스트하고 싶은 과정
  • 테스트 과정의 속도가 느린 단점이 있습니다. 
  • 네트워크 환경에 따라 통신이 실패할 수 있습니다. 
  • 테스트 결과가 데이터를 가져오는 서버의 상태에 의존합니다.

저희는 이러한 문제를 해결할 수 있는 방법을 찾고 싶었고, 저희가 생각 중이던 테스트 방식은 실제로 서버와 통신을 하지 않으면서 원하는 데이터를 무결하게 받을 수 있는 방식이었습니다.

이러한 테스트 과정의 문제를 해결할 수 있도록 애플이 이미 구현해 놓은 URLProtocol이라는 추상클래스가 있었습니다.

iOS에서의 URL을 사용한 네트워크 통신이 어떻게 이루어지는지 먼저 살펴보겠습니다. iOS의 Foundation 프레임워크에서는 URL통신을 위해 URLSession이라는 클래스를 제공합니다. 이 URLSession에 URL request를 전달하면, URLSessionDataTask라는 객체가 만들어지고, 이 객체를 사용해 데이터 통신이 진행됩니다. 이러한 URLSession 데이터 통신은 기본적으로 우리가 익히 잘 알고 있는 HTTPS와 같은 통신 프로토콜을 준수합니다.

이때, 위에서 언급한 URLProtocol 추상클래스를 상속받아 사용하면, 저희가 필요했던 더미 데이터를 반환해 내는, 저희만의 가짜 URLProtocol을 만들어 낼 수 있고, 이를 테스트 과정에 적용하여 “네트워크 통신을 하는 척” 애플리케이션을 동작할 수 있게 됩니다.

코드를 같이 살펴볼까요? 먼저 URLprotocol 클래스를 상속한 MockURLProtocol을 만듭니다. 이 클래스는 requestHandler 프로퍼티를 통해서 외부에서 더미 데이터를 주입받을 수 있고, URLprotocol 클래스에서 상속받은 startLoading메서드를 오버라이드해서 주입받은 데이터를 반환하도록 구현했습니다.

NetworkProvider는 네트워킹을 담당하는 모델의 구현 사항을 담은 프로토콜입니다. 이 프로토콜을 채택한 구현체이자, 저희가 테스트에 사용할 네트워크 객체인 MockNetworkingProvider의 session 변수에 위에서 만들어 놓은 MockURLProtocol을 설정하면 전체 코드가 완성됩니다.

이러한 방법으로 네트워크 동작 및 실제 서버의 데이터가 필요한 코드에서, 기존에 사용하던 네트워크 모델 객체 대신 MockNetworkingProvider를 주입하여 사용하면, 네트워크와 무관한 테스트를 할 수 있게 되는 것이죠. 👏👏👏

느낀 점

자기주도 학습

온보딩 기간 동안 교수자가 일방적으로 지식을 전달하는 시간은 거의 없었고, 저희가 스스로 학습을 하는 시간이 대부분이었습니다. 프로젝트를 수행하기 위해 알아야 할 지식에 대한 키워드만 제공받아 관련된 문서나 영상자료를 찾아보고, 서로에게 물어보고 토론하는 과정을 통해 지식을 습득해 나갔습니다.

카카오의 문화 중 “스스로 몰입하고 주도적으로 일합니다”라는 가치가 있는데요, 자기 주도적인 학습을 통해 프로젝트를 수행하는 과정을 경험하며, 앞으로 현업에서도 주도적으로 공부하고 일하는 개발자가 될 수 있는 힘을 기를 수 있었다고 생각합니다.

페어 프로그래밍

온보딩의 프로젝트는 페어 프로그래밍으로 진행되었습니다. 페어 프로그래밍은 구현의 방향을 지시하는 내비게이터(Navigator)와 손으로 코드를 작성하는 드라이버(Driver)로 역할이 나뉘어 코드를 작성합니다.

처음에는 다른 사람과 같은 화면을 보면서 코드를 작성해 나가는 경험은 어색하고 불편하기도 했습니다. 내비게이터가 말하는 방향을 드라이버가 이해하지 못하거나 내비게이터가 자신의 머리에 있는 생각을 드라이버에게 말로 전달을 잘하지 못하는 어려움도 있었습니다.

하지만 시간이 지나면서 페어 프로그래밍의 장점을 알게 되었습니다. 작성한 코드에 대해서 페어 모두가 완벽히 이해를 하게 되었고, 아는 것을 다른 사람에게 표현할 수 있는 방법을 배우는 데에 큰 도움이 되었습니다. 그래서 페어 프로그래밍 과정이 저희가 빠르게 성장하는데에 아주 큰 도움이 되었다고 느낍니다.

마치며

6주간의 기술 온보딩을 마무리하면서, 3월 10일 카카오 판교 아지트에서 온보딩 프로그램을 회고하는 랩업 미팅이 열렸었습니다. 여기서, 저희가 배운 것과 경험한 것을 summer의 멋진 프레젠테이션을 통해 다른 직무의 뉴크루들과 공유할 수 있었습니다.

Wrap-UP Meeting에서 멋지게 발표하는 summer😎

여기까지가 뉴크루 forest의 2023년 신입공채 iOS 온보딩 프로그램 회고였습니다.

좋은 온보딩 프로그램으로 저희가 카카오에 잘 적응할 수 있게 해 주신 신입온보딩 TF를 비롯한 카카오 관계자분들, 그리고 기술 온보딩을 이끌어 주신 야곰, 키오, 수박에게 감사인사를 드리고 싶습니다.

iOS 뉴크루 동기들, 온보딩을 진행해 주신 야곰과 작별 사진

마지막으로 같이 온보딩을 기간을 함께하고 지금은 서로 다른 곳에서 iOS 개발자로서 열심히 일하고 계신 summer, volga, john 모두 좋은 개발자가 되기를 기원합니다! 💪💪💪 

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

카카오톡 공유 보내기 버튼

Latest Posts

제5회 Kakao Tech Meet에 초대합니다!

Kakao Tech Meet #5 트렌드와 경험 및 노하우를 자주, 지속적으로 공유하며 개발자 여러분과 함께 성장을 도모하고 긴밀한 네트워크를 형성하고자 합니다.  다섯 번째

테크밋 다시 달릴 준비!

(TMI: 이 글의 썸네일 이미지는 ChatGPT와 DALL・E로 제작했습니다. 🙂) 안녕하세요, Kakao Tech Meet(이하 테크밋)을 함께 만들어가는 슈크림입니다. 작년 5월에 테크밋을 처음 시작하고,