카○오 개발자가 되었어요
휴학 중에 안드로이드 개발자로 1년. 학업 병행하며 프론트엔드 개발자로 1년. 우당탕탕 우여곡절도 많았지만은 배운 것도 많았습니다. 다만 마음 한켠에서 자라나 계속해서 스스로를 괴롭힌 것은 웹 프론트엔드 또는 클라이언트 개발이라는 것이 내 적성과 맞는 것일까 하는 의문이었습니다. 여러 가지가 있겠으나 단적으로 말하자면 UI 프로그래밍이란 게 정말 불편했습니다. 정규직으로 회사를 다닌 것 외에 중간에도 7주 간 MLOps 인턴을 얻어걸려 하게 되었는데요, 클라이언트 개발을 하며 느꼈던 불편하고 미운 점들이 없는 세계란 어찌나 매력적이던지요. 그래서 고민을 하다가 중고 신입으로라도 백엔드 개발자로 전향하고자 하였습니다. 더불어 대기업의 체계를 경험해 보고 싶었습니다. 잘 갖추어지지 않은 조직에서만 일을 해보니 답답할 때가 많았습니다. 때마침 학부 졸업도 할 것 같으니 타이밍이 맞아 떨어지지요. (학점 이수는 전부 다 했고 졸업논문도 냈지만 무엇이 꼬여서 졸업이 막힐지 몰라 아직도 불안한 상태입니다.)
그래서 취준 길에 뛰어들었습니다. 쉽지 않더라구요. 카○오 2022 개발 공채에 지원해서, 1차 코딩 테스트, 2차 코딩 테스트와 필기 시험, 1차 면접, 2차 면접을 통과해 카○오 개발자가 되었습니다. 아마 이 글을 찾아 읽게 되실 분들이 가장 궁금한 이야기를 하고자 합니다. 어떻게 준비했는지에 대해서요.
- 전공 지식
저는 문과생입니다. 컴퓨터 공학은 끝내 복수전공도 부전공도 하지 않았습니다. 코딩을 시작한 것은 어언 2013년이니까 대학교 1학년 때이지만 긴 배경 이야기는 빗겨두겠습니다. 오랜 기간 독학을 했고 이것저것 만들어 보았으나 CS 전공 지식은 글쎄요, 카투사로 군대를 갔기 때문에 부대 도서관에 비치된 책으로 공부한 이산수학 정도입니다. 그리고 군대를 다녀온 해에 학교에서 컴공 수업을 단 세 개, 컴퓨터 구조와 자료 구조, 알고리즘을 들었습니다.
그런데 회사를 들어가려니 면접도 봐야 하고 필기 시험도 많이들 보더라구요. 네트워크나 보안, 운영체제, 데이터베이스 같은 과목들은 취준 길에 뛰어든 후에야, 그러니까 올해 하반기에나 거의 시작했습니다. 커뮤니티를 둘러보면서 얻어 들은 내용들이야 있었지만은 눈 감고 코끼리 더듬듯밖에는 몰랐구요.
정신을 차렸을 때에는 이미 시간이 많지 않아 1.5 내지 2배속으로 들었고, KOCW 강의들은 대부분 2바퀴 돌았습니다. 강의 내용은 구글 문서 형태로 개조식으로 정리했습니다. 면접 직전에만 한 번씩 훑었고 읽기 위한 용도보다는 정리하는 과정에서 머리에도 남길 수 있도록 하는 의의가 더 컸습니다. 18학점을 듣느라 밥 먹고 수업 듣고 과제하는 시간 외에는 거의 온라인 강의만 들었던 것 같아요. KOCW에서 유명한 강의들을 먼저 찾아 듣고, 서울대 강의면 뭐라도 있지 않을까 싶어 SNUON 강의를 추가로 들었습니다. 둘 다 들은 건 잘한 선택 같지만 정말로 시간이 없으시다면 KOCW만 듣는 편이 좋을 것 같습니다. 교재는 SNUON과 KOCW 강의의 교재들 중 하나씩 골라서 샀는데, 강의만 들어서 이해가 잘 안 되는 부분만 교재를 찾아보았습니다. 제가 취준을 준비하면서 하반기에 들었던 온라인 강의들은 다음과 같습니다.
- 컴퓨터 구조
- SNUON 컴퓨터구조 (이재욱, 2018): 수업은 참 좋은데요, 영어 강의란 점이 장벽이 될 수 있겠습니다. 그리고 녹화 상태가 영 불량해 오디오가 누락된 강의가 많습니다. 학교에서 컴구 수업을 들어보긴 했으나 머나먼 2017년의 일이라 기억을 되살리는 느낌으로 다시 들었습니다.
- 네트워크
- KOCW 컴퓨터네트워크 (이석복, 2018): 유명한 강의인 것 같더라구요. 애플리케이션 레이어에서 시작해 데이터 링크 레이어까지 내려옵니다. 차근차근 잘 설명해 주셔서 이해하기가 아주 쉽습니다.
- SNUON 컴퓨터 네트워크 (김종권, 2016): 위 강의와는 반대로 아래에서 위로 올라갑니다. 좋은 강의이지만 설명이 다소 어렵거나 솔직한 심정으로는 이것도 알아야 되나 싶은 내용(예컨대 ALOHA 프로토콜의 동작 내용)까지도 포함되어 있습니다. 대신에 더 상세하고 제가 느끼기에 보다 정확한 설명이 많았습니다. 서울대 강의 특징인 것 같아요.
- 운영체제
- KOCW 운영체제 (반효경, 2014): 마찬가지로 유명한 강의이고 차근차근 쉽게 설명해 주십니다.
- SNUON 운영체제의 기초: 쉽게 배우는 운영체제 원리 (홍성수): 연도는 안 나와 있지만 2010년대 초반 강의일 겁니다. 특이하게 컴공이 아니라 전기정보공학부 수업입니다. 역시나 서울대 강의라 어렵지만 자세합니다.
- 데이터베이스
- KOCW 데이터베이스 (용환승, 2014): 빅데이터 부분부터는 안 본 것 같습니다. 그냥저냥 개념 잡는 느낌으로 보았습니다.
- 데이타베이스: 빅데이터 시대의 필수 정보관리 개론 (이상구): 어려웠습니다. 단순히 더 자세하고 어렵게 설명한다가 아니라 수학이 이빠이 나옵니다. 수학을 잘 하시면 개념적 이해에 크게 도움이 되실 것 같아요.
- 코딩 테스트
해커랭크, 코딜리티, 백준, 릿코드, 뭐 다양하게 깔짝여봤는데 프로그래머스 UI가 제일 낫더라구요. 문제 수가 많진 않을 텐데, 카○오 기출도 제공하고 있고 많은 기업에서 프로그래머스로 코딩 테스트를 보고 있습니다.
언어는 JS를 썼습니다. 저는 JS 좋아해요. 정확히는 타입스크립트를 선호하지만 지원하질 않으니… 자기가 편한 언어 쓰는 게 제일 좋은 것 같습니다. JS로 코테를 보는 건 다른 언어와 마찬가지로 일장일단이 있습니다. 함수가 1급 객체라는 점이 특히 강력한 점이라고 느꼈구요, 숫자와 문자열 간 변환이 쉬운 점 등도 분명 주의를 요하지만 편한 부분이었습니다. 큐를 지원하지 않아서 저는 그냥 무지성으로 배열의 unshift
, shift
를 쓰곤 했는데 실제 큐와는 다르게 O(n) 시간이 소요되기 때문에 성능이 크리티컬한 경우라면 주의하셔야 합니다.
자신감이 떨어지거나 힘이 없는 날에는 레벨 2를 풀었고 그렇지 않은 날에는 레벨 3을 풀었습니다. 희한한 건 연습할 때에는 레벨 3은 물론이고 심지어 2도 잘 못 풀 때가 잦아서 아이고 천상 조졌구나 싶었는데 실전에서는 훨씬 더 잘 보았습니다. 연습할 때에는 간절하지 않았기 때문일까요? 기출 문제가 아마 나중에 카○오 블로그로 올라올 텐데요, 일곱 문제 중에 나머지는 전부 다 풀고 성능 문제만 못 풀어서 총 6.5개 풀었습니다.
카○오 2차 코딩 테스트는 1차와는 다른 유형으로 나옵니다. 준비는 블로그에 게시되어 있는 2차 기출 문제들을 풀어보면서 했습니다. 그런데 이게 합격 선이 얼마인지도 모르고 다른 사람들의 점수는 얼마나 되는지를 볼 수 없으니 문제 유형을 파악하는 데에 의의가 있었던 것 같아요.
아무튼 이번에도 실시간 리더보드가 제공되었습니다. 초반에 1등을 꽤 오래 간 하길래 이대로 점수를 높이면 무리 없겠다 싶더라니, 이게 웬걸, 제 점수는 좀처럼 오르질 않고 다른 분들이 마구 치고 올라오는 겁니다. 마감은 두 자릿수 안으로 하긴 했는데 왠지 모르게 불안하더라구요. 나중에 알았지만 꽤 많은 인원이 2차를 통과했고 저도 무리 없이 통과할 수 있었습니다. 그렇다고 제가 점수 커트라인을 아는 건 아니구요, 1번 문제와 2번 문제의 비중이 다를 것 같은데 정확한 비중은 알지 못합니다.
2차 테스트는 프로그래머스에 제출하는 것이긴 했지만 구동은 로컬에서 한 후 제출하는 식이라 사용 언어는 자유였습니다. 저는 타입스크립트를 사용했습니다.
- 면접
따로 스터디를 한다던가, 예상 질문을 혼자 만들어본다던가 하지는 않았습니다. 다음 깃헙 저장소들을 참고했습니다.
- https://github.com/ksundong/backend-interview-question
- https://github.com/brave-people/brave-tech-interview
- https://github.com/JaeYeopHan/Interview_Question_for_Beginner
다만 예시 답안이 누락되어 있다던가 다소 부정확한 내용이 있는 경우도 있으니 정말 참고하는 정도로만 썼습니다. 기술 면접은 앞서 말했던 공부하며 정리한 문서를 훑어보았습니다. 이것저것 준비했는데 제 경우에는 거의 자료구조만 나와서 조금 아쉬웠던 기억이 있습니다. 2차 테스트에서 작성한 코드에 관해서도 간단한 질문이 들어왔는데 따로 준비를 하지 않아도 답할 수 있을 만큼 간단한 것들이었습니다. 인성 면접은 개인 사정이 있어 따로 준비하지 못했습니다. 정신이 없었기 때문에 기억이 많이 나지 않지만, “업무에 있어서 갈등 경험이 있는지, 어떻게 해결했는지”와 같이 흔히 떠올릴 수 있는 질문들이 나왔습니다.
뭔가 글이 용두사미가 된 것 같네요. 새벽에 신나서 쓰기 시작하다가 (약간의 조증 삽화 느낌이 아닌가 하는 개인적 생각) 후반부는 시간이 좀 지나서 채워넣고 있는지라 그럴지도 모르겠습니다. 간만의 포스팅인데 괜히 아쉬운 느낌이 듭니다.
아무튼 이렇게 저는 클라이언트 개발의 세계를 떠나 중고 신입으로 카○오에 입사하게 되었습니다. 많은 기업들이 비슷한 절차로 채용을 하지만 코딩 테스트 2번에 면접 2번은 개인적으로 정말 살떨리고 긴 여정이었습니다. 돌이켜보면은 걱정하지 않아도 될 것을 너무 걱정했던 적도 있지만 그 일들의 한복판에서는 또 그럴 수밖에 없었을 것입니다.
지금 회사에서는 신입 교육을 받고 있습니다. 아직은 재택근무를 하고 있구요. 큰 회사의 갖추어진 시스템을 보며 갈구했던 것을 보고 배울 수 있을 것 같아 설레는 마음입니다.
이래저래 마음 쓰이는 일도 많고 바쁜 한 학기였습니다. 취직에 성공해 정말 다행입니다. 제가 당당하게 말할 수 있을 만큼 열심히 하지는 않은 것 같습니다. 운이 좋았을 수도 있죠. 하지만 개발자로서 할 수 있는 일들 중 가장 멋진 것 하나는 지식과 경험 공유라고 생각합니다. 제가 이런 글을 종종 쓰는 것은 제가 비전공자, 특히 문과생으로서 개발을 배우며 지침이 되는 것들을 찾기가 너무 어려웠기 때문입니다. 제가 코딩을 처음 시작한 2010년대 초중반에는 더욱 그랬구요. 글로 쓰기 어려운 부분들이 있어 모든 내용을 담지는 못했습니다만은 과거의 저와 비슷한 처지의 분들께 조금이나마 도움이 된다면 좋겠습니다.