[쏘카] iOS 개발자 합격 후기

김상우·2023년 4월 27일
68
post-custom-banner

합격 이후, 쏘카에서의 1년차 회고 글은 → 여기


2달에 걸친 채용 프로세스, 5개의 절차를 거쳐 쏘카 iOS 앱 개발자로 최종 합격하게 됐다.

쏘카의 iOS 앱 개발자 채용 프로세스

  • 1차 : 서류 심사
  • 2차 : 알고리즘 코딩테스트
  • 3차 : 앱 개발 과제 테스트
  • 4차 : 개발자 기술 면접
  • 5차 : 최종 컬쳐핏 면접


1차 : 서류 심사

서류 지원 : 2023.03.02 (목)
합격 안내 : 2023.03.07 (화)

이력서에는 내가 개발한 3가지 앱에 대해 적었다.

  1. [푸이 - 내 손안의 음식점]
    사람의 입맛 성격을 "푸이티아이"라는 지표로 나누고, 푸이티아이를 기반으로 음식점 경험을 공유하고 추천하는 음식 SNS 앱. 소마에서 팀을 꾸려 개발한 앱이고 2000 다운로드 이상 달성했다.

  2. [소마 날씨 앱]
    간단한 날씨 앱. 소마 13기 iOS Best Practice.
    Clean Architecture / 모듈화 에 중점을 뒀다.

  3. [찍콜]
    문자를 인식하는 AI 카메라 앱. 사진을 찍고 전화번호를 인식했다면 전화를 연결한다.
    카페나 식당에 입장할 때 안심콜 전화번호를 귀찮게 타이핑하지 않고, 사진 한장으로 자동으로 전화가 걸리게 하기 위해서 개발했다.

어떤 기술을 사용했는지, 어떤 코드 구조를 갖는지, 어떤 경험을 했는지들을 적었다. 특히 최근에는 ( MVVM / 모듈화 / Clean Architecture / DI ) 이렇게 4가지 키워드에 가장 관심이 많아서 이를 중점적으로 적었다.

→ 이력서 일부분 캡쳐 본 (블러 처리)

🔗 이력서 프로젝트 관련 링크들


2차 : 알고리즘 코딩 테스트

코테 응시 : 2023.03.18 (토)
합격 안내 : 2023.03.22 (수)

알고리즘 코딩테스트는 프로그래머스에서 진행했다. iOS 직무로 지원하는 거라 응시 언어는 Swift로 고정이었다.

2문제가 출제되었고, 제한시간은 4시간이었다.
1번의 난이도는 골드4 / 2번의 난이도는 골드2 정도로 체감했다. 나는 2문제를 다 풀고 제출했다.

평소 코딩테스트 연습은 백준 플래티넘5 문제까지 연습했었고, 프로그래머스는 Lv3 문제까지 연습해뒀었다. 요새 기업들의 코딩테스트들을 보면서 느끼는 건데, 요즘에는 알고리즘적인 사고 능력보다는 순수 코드 구현 능력 (= 코딩 피지컬)을 요구하는 문제들이 더 트렌드인 것 같다. 쏘카 코딩테스트를 보면서도 그런 느낌이 들었다.

원래 코테는 파이썬으로만 공부했었는데 최근에 Swift로 갈아타서 공부를 해뒀던게 도움이 된 것 같다. 매번 느끼는 거지만 Swift로 코테를 풀으라는 요구는 너무 가혹하다..

파이썬에서 기본 제공하는 메서드나 클래스를 Swift 에서는 직접 구현해줘야 하는 경우가 너무 많다. 일단 기본 자료구조인 Heap이랑 Queue를 제공 안 해주는건 애플 진짜 선넘었다고 본다 :(

시험을 친 다음 주에 합격 메일을 받았고, 아마 2문제를 모두 풀었어야 합격인 것 같았다.

🔗 Swift와 Python으로 알고리즘 문제를 풀때 꿀팁들을 정리했던 글

🔗 내가 만든 백준 문제집


3차 : 앱 개발 과제 테스트

과제 기간 : 2023.03.24 (금) 16:00 ~ 2023.03.30 (목) 18:00
합격 안내 : 2023.04.10 (월)

코딩테스트 합격 메일과 함께 앱 개발 과제 테스트에 대한 안내 메일을 받았다. 약 일주일 동안의 시간이 주어지고, 일주일 내에 문제로 주어진 앱을 개발해야한다.

문제는 노션으로 전달받았고 "이러이러한 앱을 만들어 달라"는 앱 명세 설명데모 동영상이 있었다. 그리고 쏘카의 피그마Private 깃허브 레포에 초대받았고, 레포에 코드를 올리는 방식으로 진행됐다.

피그마를 써본 사람들은 알겠지만 피그마에는 동시 접속자들의 명단과 마우스 커서를 볼 수 있다. 내 경쟁자들이 열심히 앱 디자인을 파악하는 모습을 볼 수 있어서 더 승부욕이 생겼던거 같다.

앱 구현 자체 난이도가 쉽진 않았지만, 이 과제 테스트의 관건은 주어진 앱을 개발할 수 있느냐 없느냐가 아니라고 생각했다.

경력 무관 채용이기 때문에 앱을 완성시키는 것 자체는 많은 사람들이 해낼 것 같았다. 본 게임은 앱을 돌아가게 만드는 코드에 있다고 생각했다.

그래서 이런 부분들에 신경 쓰면서 앱을 완성했다.

(1) 유지보수성
앱은 항상 현재 상황만 고려할게 아니라, 미래에 생길 수 있는 수정이나 추가요소를 고려해야한다. 유지보수성이 좋지 않은 코드를 짜놓는다면, 나중에 업데이트 할 사항이 생겨 코드를 수정해야 할 때, 코드가 서로 뒤엉켜 있어 기존의 코드들을 다 갈아 엎어버려야 하는 경우가 생긴다. 이런 경우를 의존성이 높다, 결합도가 높다고 표현한다. 그래서 수정사항이 생긴다고 했을 때, 최대한 연쇄적인 수정 없이 깔끔하게 원하는 부분만 수정이 가능하도록 의존성과 결합도를 낮춰 수정에 용이한 구조로 만드는 데에 가장 노력했다. 한 가지 예를 들어, DI(Dependency Injection)를 활용했다. DI는 클래스 내부에서 필요한 객체의 인스턴스를 내부에서 생성하는것이 아니라 외부에서 생성 후 클래스 내부로 주입시키는 것을 말한다. 단, 주입을 받을 때 Protocol에 대고 주입 받은 뒤 클래스 내부에서는 Protocol의 메서드를 사용한다. 이렇게 하면 클래스 내부에서 사용될 객체가 변경되고 싶을 때 객체를 주입시켜주는 부분만 그 Protocol을 준수하는 다른 객체로 교체시켜준다면 클래스 내부에는 일절 손 볼 필요없이 수정을 마칠 수 있게 된다.

📕 [DI와 Swinject에 대해 정리했던 글]

(2) 코드 가독성
사이즈가 큰 앱. 예를 들어 쏘카와 같은 앱에는 여러 명의 개발자가 함께 투입되어 개발을 하게 된다. 내가 짠 코드 부분을 동료가 이해하기 쉬워야 하고, 동료가 짠 코드를 내가 이해하기 쉬워야한다. 이런 부분에 신경을 많이 썼고, 구체적인 예를 들어 Clean Architecture의 구조를 준수하려고 노력했다.

Clean Architecture를 쉽게 한마디로 정의해보면, 프로젝트의 코드에 선을 긋고 경계를 구분하는 기술이다. 이 때 경계는 Presentation / Domain / Data 의 3개 Layer 로 나누길 권장하고 있다. 이렇게 선을 긋고 경계를 나누면 이런 이점들을 가져갈 수 있다.

  • 특정 로직이 어디에 위치해 있을 지 파악하기 좋다.
    예를들어, 서버에서 내려오는 json 데이터를 처리하는 로직이 어디있을지 보고 싶다. 클린 아키텍처에 대한 이해가 있는 사람이라면 주저 없이 Data/Network/DTO 로 들어갈 것이다.

  • 영역을 분리 시켰기 때문에 연쇄적인 수정을 막을 수 있다.
    클린 아키텍처의 동심원을 보면 Domain 영역은 가장 내부에 위치한다. 그리고 의존 방향은 동심원의 내부로 향하기 때문에 Domain 영역은 Presentation과 Data 영역의 존재 자체를 알지도 못하는 구조다. 그래서 Presentation 영역의 코드를 아무리 수정한다 해도, Domain은 Presentaion에 대한 의존성이 전혀 없기 때문에 연쇄적인 코드 수정이 필요없다.

(3) 적절한 기술과 아키텍처를 사용했다는 근거
어떠한 기술이나 아키텍처를 활용했으면 그걸 활용한 근거가 명확해야하고 설득력이 있어야한다. MVVM을 채택했으면 MVC로도 개발할 수 있는데 왜 MVVM을 채택했는지에 대한 근거를 계속해서 생각하면서 코드를 작성했던거 같다. 이미지 처리 라이브러리로 왜 Kingfisher를 사용했는지, 모듈화 및 프로젝트 관리 기술로 왜 Tuist를 사용했는지, 다른 대체 기술을 사용했을 때에 비해 장점 등등 많은 생각을 했던 거 같다.

❗️ 과제로 어떤 앱을 개발했는지 여기 기록할 순 없고, 개발했던 [소마 날씨 앱]이 가장 비슷한 구조를 갖고 있다.

🔗 링크 → [소마 날씨 앱]

과제에 대한 합격 안내는 약 2주 뒤에 받을 수 있었다.


4차 : 개발자 기술 면접

면접 : 2023.04.18 (화)
합격 안내 : 2023.04.19 (수)

합격과 면접 관련 안내는 전화로 받았다. 대면 면접 / 비대면 면접 중에 선택이 가능했고, 나는 대면 면접을 선택했다.

그리고 면접을 보기 전에 이력서를 좀 더 보완해서 다시 제출하고 싶어서, 채용 인사 담당분께 전화를 걸고 이력서를 보완해서 업데이트 후 다시 제출 해도 될까요라고 여쭤봤었는데 친절하게 도와주셨다.

쏘카 건물 앞.

기술 면접 관련 이야기를 여기에 기록을 할 순 없다.. 내 생각을 잘 표현할 수 있는 좋은 질문들을 주셨고, 내가 왜 그렇게 생각하는지 관심있게 이야기에 경청해주셔서 좋았다는 것 정도를 남기고 싶다.

그래서 쏘카가 아닌, 평소에 기술 면접 준비를 했던 과정을 기록하려한다.
크게 3가지 틀에서 준비했다.

(1) 컴퓨터 공학 지식 (CS)
CS 5대 과목 운영체제(+컴퓨터구조) / 네트워크 / 데이터베이스 / 알고리즘 / 자료구조를 공부했다.
정리한 CS 노트

(2) iOS 개발 직무 지식
iOS / UIKit / Swift / RxSwift 의 개념들에 대해서 준비했다.
iOS 면접 예상 질문 정리 노트 (with 민령)

(3) 이력서 기반 질문 대비
내가 이력서에 작성한 내용들에 대해 준비했다. 예를 들어 이 프로젝트를 진행하면서 기억에 남는 문제 해결 경험, 왜 RxSwift를 사용했는지, 왜 Swinject를 사용했는지, 왜 이런 아키텍처를 선택했는지 등을 준비했다.

그리고 중요한 개념들을 아이패드에 적어놓고 면접 보러가는 지하철에서 약 1시간동안 계속해서 봤다.

면접이 끝나고서는 쏘카 할인 쿠폰을 받았고, 면접관분들께서 엘레베이터까지 데려다 주셨는데 너무 감사했다.

💁🏻‍♂️ (면접관님) : 여기 서울숲 진짜 좋아요, 산책 한번 해보세요.

🧑🏻‍💻 (나) : 네, 지금 가겠습니다.

💁🏻‍♂️ (면접관님) : 지금 당장 강제로 가라는건 아니구요 ㅎ

진짜 좋더라고요,,


5차 : 최종 컬쳐핏 면접

면접 : 2023.04.24 (월) 17:00 ~ 18:00
합격 안내 : 2023.04.25 (화)

전화로 기술 면접 합격 안내를 받았고, 최종 면접 관련 안내를 받았다. 이번에도 대면 / 비대면 면접 선택이 가능했는데 이번에도 역시 대면을 선택했다.

최종 면접을 준비하면서는 여러가지 준비를 많이 했던 거 같다. 우선 구글링해서 다양한 인성 면접 관련 기출 질문을 100개정도 뽑아서 말하는 연습을 해봤다.

이 외에도 기초 CS를 다시 한번 준비했고, 1분 자기 소개, 쏘카의 뉴스나 이슈 공부, 기술 면접 셀프 피드백 등 많은 것들을 준비했다. 쏘카 CTO님이 집필하신 책 [리더의 생각]을 종찬 멘토님께서 빌려주신 덕분에 책을 읽어보기도 했다.

기술 면접 때와 똑같이 중요한 개념들을 아이패드에 정리한 뒤 지하철에서 읽으면서 갔다. 한 번 가봤던 길을 가서 그런건지 좀 더 안정된 느낌이 들었다.

최종 면접때는 기술 면접보다 더 깊은 질문들이 들어왔다. 기술 면접 때는 나의 스킬을 검증하고 싶었다면, 최종 면접때는 스킬적인 측면에 더해서 내 자체에 대해 알고 싶어하신다는 기분이 들었다.


합격

최종 면접을 본 다음날에 바로 합격 연락을 받을 수 있었다 🥳

카셰어링 1위 기업 쏘카에서 앱 개발자로서 일을 한다는 건 가치있는 경험이 될 것 같다 🙏🏻

(+ 이 글을 보신 몇몇 분들께 조언이나 피드백 관련 연락들을 받게 되었네요. 혹시나 취업 준비 관련 궁금한 점이 있으신 분들은 댓글에 남겨주시면 답변 드리겠습니다!)

profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.
post-custom-banner

19개의 댓글

comment-user-thumbnail
2023년 4월 28일

눈물 없이는 읽어낼 수 없는 감동적인 스토리였습니다. 취업을 축하합니다!

1개의 답글
comment-user-thumbnail
2023년 5월 3일

형 진짜 고생 많았어!! 축하해😚

1개의 답글
comment-user-thumbnail
2023년 5월 4일

자극 받고갑니다 !

1개의 답글
comment-user-thumbnail
2023년 5월 14일

그는 KING+GOD 상우 😮

1개의 답글
comment-user-thumbnail
2023년 5월 26일

iOS 프로젝트와 공부는 소마 이전엔 독학하신건가요?

3개의 답글
comment-user-thumbnail
2023년 9월 7일

안녕하세요 좋은 글 잘 읽었습니다.
혹시 과제전형에서 외부 라이브러리 사용 같은게 막혀있거나 그런게 있었나요?

1개의 답글
comment-user-thumbnail
2023년 10월 5일

안녕하십니까 상우님. ios developer 관련 구글링을 하다 우연히 상우님의 블로그를 접하게 되었습니다.

우선 좋은 소식 축하드립니다!

여기에 관련하여 몇가지 궁금한 점들을 상우님의 이메일로 보내었는데 여유로운 시간대에 편하게 읽어주신다면 감사하겠습니다.

1개의 답글