나는 어떻게 개발자로 취직을 했는가? - 2
해당 글에서 이어집니다.
나는 어떻게 취직을 했는가? - 1
해당 글에서 이어집니다. 나는 왜 취직을 하는가 해당 글에서 이어집니다. 나는 왜 개발자를 하는가 나는 한 인서울 대학교의 문과 계열 통계학과에서 공부를 했다. 동기, 선후배 대부분 통계/인
hui0221.tistory.com
전략적으로 서류, 코딩 테스트, CS 지식 및 기본기에만 집중하기로 선택했다. 그렇다면, 이 세 가지를 어떻게 전략적으로 준비했는지 간단하게 정리해보고자 한다.
1. 자기 소개서
개발자로 취직하기 위한 첫 번째 허들은 서류이다. 나는 서류 중 자기소개서에 많이 집중했다. 토익이나 기타 자격증이 전무했기에, 내가 흔히 말하는 "스펙"으로 가지고 있는 것은 하나도 없었다. 사실 그래서 자기소개서에 많이 집중할 수 밖에 없었다. 그래서 정보를 얻기 위해 면접왕 이형, 개발바닥 유튜브를 많이 참고했고, 블로그 포스팅을 많이 보았다.
자기소개서는 문항이 굉장히 다양하지만, '개발자' 자기소개서에 드러나야 하는 것은 단연코 문제 해결 능력이라고 생각한다. 예를 들어, 어떤 경험에 대해서 묻는 문항에서 대해서 글을 작성해야 한다면,
"나는 golang 기반으로 mqtt subscriber 서버를 만들어보았다."
가 아닌,
"IoT 디바이스에 데이터 사용량에는 한계가 있었고, 이를 해결하기 위해 HTT P대신 상대적으로 데이터 전송시 네트워크 오버헤드가 적은 MQTT 프로토콜을 사용하기로 했다. 그리고, MQTT 프로토콜 기반으로 잦은 전송이 일어나 IO로 인해서 비효율이 발생할 것이라 생각했다. 이를 해결하기 위해서 비동기 프로그래밍 잘 지원되는 서버를 하나 만들었어야 했고, 파이썬은 이 부분이 미흡하기에 비동기 지원이 강력한 언어 중, 러닝커브가 낮은 golang을 사용해 MQTT Subscriber 서버를 구현했다."
와 같이 구체적이고, 어떤 문제를 왜 해결하려고 했고, 이를 위해 어떤 기술을 써서, 어떻게 해결했다가 드러나도록 문항을 작성하도록 노력했다. What에만 집중하는게 아니라, What, Why, How가 적절하게 섞인 글을 만들어나갔다. 그리고, 글을 최대한 간결하게 두괄식으로 작성하려고 노력했다.
이 방법을 통해 포트폴리오/깃허브/자격증 하나 없이 모든 서류를 뚫었다. 다시 한 번 강조하자면, 무엇을 안다, 해봤다, 할 줄 안다는 크게 중요하지 않다. What에 집중하지 말고, What, Why, How를 잘 섞어서 스스로의 스토리와 명석함을 뽐내는게 자기소개서의 핵심인 것 같다.
2. 코딩 테스트
코딩 테스트를 처음엔 거만하게 준비했다. 취업을 준비하기 시작하며, 주말에 하루 하나씩 카카오 코딩 테스트 기출(프로그래머스 링크) 시간을 재며 풀기 시작했다. 파이썬 코딩에 익숙했고, 자료구조 및 알고리즘 수업을 수강했었다. 그래서 그런지 문제 1~5정도의 쉬운 문제들은 풀 수 있었고, 항상 3.5~4.5솔이 나왔다. 보통 3.5솔, 4솔이 커트라인이라고 해서 코딩 테스트 준비를 더 이상 하지 않았다. 2021년 하반기, 라인과 카카오가 같은 날에 오전 - 오후로 나뉘어 코딩테스트를 진행했는데, 정말 못봤다. 그날 딱 보자마자 6개월 더 해야겠구나 싶었다. 거만함을 반성해야했다.
그래서, 매일 출근 전 아침 시간을 1~2시간, 그리고 주말을 거의 투자해 “파이썬 알고리즘 인터뷰” 책을 보면서, 중요한 알고리즘 및 자료구조 문제 위주로 (힙, 큐, 스택, 트리, DFS, BFS, sort, 다익스트라 등) 백준 + 리트코드를 풀어갔다. 특히, 작성한 주요 알고리즘 및 자료구조 중 꼬아낸 문제는 포기하고, 핵심적인 것들에 집중했다. 그리고 코딩을 최대한 자주해 구현 문제는 확실히 잡기로 했다.
코딩 테스트에서 중요한 점은, 쉬운 문제는 보자마자 어떤 문제와 비슷했는지 떠올리고, 이 문제에 맞는 알고리즘 혹은 자료구조를 떠올리는 것이다. 마치 수능 수학처럼 어느 레벨 이하의 문제는 패턴이 있는데, 이걸 잘 캐치할 수 있게 준비한다면 신입 공채 코딩 테스트 정도는 어렵지 않게 준비할 수 있을 것이다.
기타 팁이라면, IDE없이 코딩 해보는 경험을 쌓아라. 그리고 테스트 코드를 작성해서 테스트 결과가 없는 코딩 테스트에도 당당할 수 있는 연습을 하라는 것이다.
3. 면접
나는 정말 시간이 없었다. 그래서 흔히 취준 과정에서 하는 면접 스터디, 혹은 스피칭 등의 면접 준비는 도저히 시간이 없어서 하지 못했고, 퇴근 후 강의를 듣는 식으로 CS지식 공부 위주로 면접을 준비했다.
신입 개발자에게 요구하는 전공 수준은 컴퓨터 공학과 2~3학년 정도의 수준이다. 그렇기에 자료구조/알고리즘, OS, 네트워크, 데이터 베이스 정도의 지식을 빠삭하게 알고 있다면 충분하다.
나는 간단한 입문 서적 or 기초 전공 강의를 읽거나 보고, 면접 질문을 깃허브를 찾아서 스스로 대답해보고, 잘 대답이 안나오는 과목들 위주로 기타 심화 전공 혹은 깊은 수준의 서적을 읽는 방식으로 공부했다.
과목별로 본 책 / 들은 강의는 다음과 같다.
DB : SQL 더 쉽게, 더 깊게, 기초가 든든한 데이터 베이스 -> 관계형 데이터 베이스 실전 입문
네트워크 : 하루 3분 네트워크 -> KOCW 한양대 이석복 교수님 네트워크 강의 -> HTTP 완벽 가이드 책
운영체제 : KOCW 이화여대 반효경 교수님 운영체제 -> 자교 시스템 프로그래밍 강의
자료구조 및 알고리즘 : 자교 산업경영공학과 자료구조/알고리즘 수업 -> 파이썬 알고리즘 인터뷰(코딩 테스트 준비)
하단의 링크는 면접 준비 / CS 공부에 도움되는 링크들이다.
https://www.youtube.com/c/우아한Tech
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
https://github.com/gyoogle/tech-interview-for-developer
https://github.com/brave-people/brave-tech-interview
https://github.com/WooVictory/Ready-For-Tech-Interview
https://github.com/ksundong/backend-interview-question
면접 준비는 단순히 배웠던 기술에 대한 암기를 하는게 아니라, 기술이 어떤 문제를 해결하기 위해 나온 것인지, 그리고 문제를 어떤 논리로 해결했는지에 중점을 두고 준비했다.
예를 들어 데드락에 대한 질문이 있다면, 왜 데드락이 발생하는지, 이걸 어떻게 해결하는지를 잘 설명할 수 있도록 준비했다. 자기소개서와 같이, What에만 집중하지 않고 What -> Why -> How의 논리구조를 활용했다. 어떤 문제 상황이, 왜 발생하고, 어떻게 해결하는지를 항상 구조화하기 위해 노력했다.
그리고, 기타 소프트웨어 개발에 대한 공부를 하기 위해 클린 코드, 클린 아키텍쳐, 대규모 서비스를 지탱하는 기술, 데이터베이스 설계와 구촉, 객체 지향과 디자인 패턴, 테스트 주도 개발 시작하기, TDD 등 고전 명서도 한 번, 두 번 빠르게 훑었다.
4. 마무리하며
취업/취직도 전략이 필요하다. 내가 한 방법은 하나의 방법일 뿐이다. 자기 자신을 먼저 돌아보고, 자기 강점은 보이고, 약점은 숨기고, 강점이 극대화될 수 있는 곳을 찾아서 승부를 보면 누구나 다 빠르게 원하는 기업에 취직할 수 있을 것이다. 대부분의 사람들은 식당에 갈 때, 어디로 갈지 10분은 고민하고, 30분 밥을 먹는다. 취직도 그냥 일단 막연히 6개월 1년 준비하면 되겠지보단, 6개월 준비할 예정이라면 2주, 3주는 "어떻게" 취직을 준비할지 전략적으로 고민해보자.
통계학과로 개발에 친숙했고, 컴퓨터 사이언스 공부도 적성에 맞아서 운 좋게 빠르게 취직에 성공할 수 있었다.
나는 이렇게 해서 2021년 4월 개발자가 되기로 마음먹었고, 2021년 8월 취업 준비를 시작했고, 2021년 12월에 한 IT 기업에 개발자로 출근을 하게 되었다.