심플하게 개발하기
[해외 개발자 취업] 리트코드를 해야하는 이유 본문
해외 취업을 원하는 개발자라면 한 번쯤은 리트코드라는 웹사이트를 들어봤을 것이다. 리트코드는 한국의 백준, 프로그래머스와 같은 프로그래밍 문제들을 모아둔 사이트로 사이트 내의 웹 기반 IDE로 직접 문제를 풀어보고 디버깅, 테스트, 제출까지 할 수 있다. 해외에서도 비슷한 웹사이트(예를 들어 해커 랭크 같은)들이 많고 여러 웹사이트를 써봤지만 결국은 리트코드로 돌아올 수밖에 없었다. 해외 개발직군으로 취업을 위해 리트코드를 할 수밖에 없는 이유를 소개한다.
1. 영어권 커뮤니티에서 가장 많은 사람들이 쓰는 코딩 테스트 웹사이트다
해외 취업을 원한다면 보통 대부분이 북미권 회사, 특히 실리콘 밸리를 노리고 준비하는 개발자들이 많을 것이다. 리트코드는 북미권 커뮤니티에서 가장 많은 사람들이 쓰는 코딩 공부 웹사이트다.
일단 문제의 양은 말할 것도 없다. 리트코드 프리미엄 (매달 $35 정도 구독료를 내면 리트코드에서 여러 유용한 기능을 제공받을 수 있다)을 구독하지 않아도 수천 가지의 알고리즘 문제를 풀어볼 수 있다. 모든 문제는 Easy, Medium, Hard로 나뉘어 있기 때문에 레벨에 맞게 문제를 풀어볼 수도 있다. 또한 Top Interview Questions, 100 Most Liked Questions 등 여러 카테고리로 문제가 제공되기 때문에 따로 모아서 풀어볼 수도 있다. 게다가 리트코드 계정을 만들었을 경우 내가 풀어봤던 문제, 제출한 답, 정답률, code efficiencies들을 모두 기록해둘 수 있기 때문에 내 프로그레스를 추적할 수 있다. 계속 시도해 봐도 못 풀었던 문제들도 저장해 두었다가 나중에 다시 와서 풀어볼 수도 있다.
많은 사람들이 리트코드를 쓰기 때문에 커뮤니티도 상당히 유용하다. 각 문제마다 Solutions 페이지가 있는데 여기서 사람들이 자신들의 답을 올린다. stefanpochmann (문제의 난이도와는 상관없이 무조건 답을 1-3줄로 풀어버리는 유저다) 같은 커뮤니티 네임드도 있고 페이지 내 여러 답을 읽어보는 것도 꽤 재밌다. 여러 가지 답이 나올 수 있고 각 답마다 좋아요, 싫어요, 댓글을 달 수 있기 때문에 가장 좋은 답을 찾기도 쉽다. (그래도 Solutions 페이지를 보기 전에 먼저 혼자 풀어보는 것을 추천한다...) 당연히 여기서도 데이터가 방대하기 때문에 내가 주로 쓰는 언어로 필터링해서 답을 찾아볼 수도 있다. (당연하게도 모든 답과 해설은 영어이기 때문에 우리 같은 한국어권 사람들에게는 익숙하지 않을 수도 있지만 애초에 리트코드에서 어려운 영어는 안 쓰기 때문에 이해하기 쉬우니 걱정 안 해도 된다.) Python, Java, C++, Javascript와 같은 언어는 거의 무조건 10개 이상의 답이 이미 포스팅되어 있다고 보면 된다. 특히 Easy나 Medium수준 난이도의 문제라면 더더욱 그렇다. 문제가 Hard로 가면 그만큼 사람들이 많이 시도를 안 하기 때문에 상대적으로 답도 적게 포스팅되어 있기는 하다.
2. 회사 취업에 가장 적합하다
리트코드의 또 다른 장점은 실제로 다른 코딩 테스트 웹사이트에서 공부하는 것보다 개발직군 회사 취업에 유리하다는 것이다. 한국도 비슷하겠지만 개발직 인터뷰 프로세스에는 알고리즘 코딩 문제가 무조건 들어가는데 실제로 많은 회사들이 리트코드를 이용하여 문제를 만들거나 리트코드의 문제를 그대로 출제한다. 그렇기 때문에 리트코드에서 문제를 여러 번 풀어보면 실제 회사 인터뷰에서도 비슷한 문제가 나올 확률이 높다.
리트코드는 특정 회사에서 출제한 문제들로 필터링하는 기능도 제공한다. 프리미엄 구독자들만 제공받을 수 있는 아주 비싼 기능이긴 하지만 취준생들에게는 아주 유용한 기능이다. 실제로 프리미엄을 써보지는 못했지만 적중률이 꽤 높다고 들었다. 만약 지금 목표로 하고 있는 회사가 꽤 인지도가 있다면 프리미엄을 구독하는 방법도 수가 될 수 있겠다. 몇몇 회사에서는 리트코드의 companies filtered questions를 보고 인터뷰 문제들이 leak가 됐는지 확인한다고 한다. 확인하고 나서야 다른 문제로 교체한다고 하니 리트코드가 대략적인 rule of thumb가 되는 것 같다.
그러면 프리미엄 구독을 안 한 사람들은 여기서 아무것도 못 하고 손가락만 빨고 있어야 하느냐. 그건 아니다. 리트코드에서 다른 비슷한 기능도 제공하기 때문이다. 리트코드의 Discuss page를 가면 유저들의 인터뷰 경험을 공유하는 곳이 있다. 특히 Interview Quesiton 섹션에서는 인터뷰에서 어떤 문제들이 나왔는지 포스팅하는 곳이 있는데 이 페이지도 상당히 유용하다. 예를 들어 아마존 Online Assessment가 궁금하면 검색창에 "Amazon OA"라고 치면 되는데 연도별, 직급별 OA 문제들이 쫘르륵 나온다. 물론 아마존과 같은 대기업들은 이 것을 알기 때문에 문제 pool 중 몇 개를 랜덤 하게 골라서 내기는 하지만 인터뷰의 대략적인 난이도나 형식을 알아볼 수 있기 때문에 자신이 만약 특정 회사의 인터뷰를 준비하고 있다면 무조건 봐야 하는 페이지다.
이처럼 리트코드는 테크 회사 개발직 취업에 유용한 정보를 많이 제공하고 있다. 코딩 테스트만 하는 것도 좋지만 discuss 페이지나 explore 페이지 같은 정보 공유 페이지를 들러보는 것도 좋을 듯하다.
3. 알고리즘/코딩 테스트 이외에 취업에 필요한 유용한 기능이 많다
리트코드는 위에서도 잠시 설명했지만 코딩 테스트 이외에도 취업에 필요한 기능을 많이 제공하고 있다.
회사에서 인터뷰가 왔을 때 알고리즘 문제만 잘 푼다고 해서 채용되는 것은 아니다. Behavioural Interviews (인성검사, 적성검사, 행동평가)를 보통 처음 phone screening (전화 인터뷰; 보통 인터뷰 프로세스 처음에 한다)이나 마지막에 (실제로 같이 일할 매니저나 팀원과) 인터뷰에서 하게 될 텐데 리트코드를 잘 이용한다면 이 역시 준비할 수 있다. 위에서 설명했지만 Discuss 페이지에서 Interview Question나 Interview Experience에 가게 되면 유저들이 실제 회사 인터뷰에서 어떤 질문을 받았는지 포스팅하는 공간이 있다. 여기서 준비하고 있는 회사를 검색하면 리트코드 유저들이 어떤 behavioural/technical questions들을 받았고 인터뷰의 형식이나 길이, 프로세스는 어땠는지에 대해 볼 수 있다.
또한 Technical Interviews라고 해서 다 단순 알고리즘 문제만 받는 것은 아니다. 특히 인터뷰 프로세스가 여러 스테이지로 나뉘어 있다면 알고리즘이 아닌 다른 문제도 나올 확률이 높다. 그중 몇 개를 소개한다면,
- 데이터베이스 디자인: 웹사이트나 앱을 만들 때 데이터를 어떻게 보관해야 하는지, 데이터 저장 방식은 어떻게 할지, 테이블 구성은 어떻게 해야 하는지, 모델링, ER 다이어그램 (Ex. How to design DB for Instagram, scaling a relational DB)
- 시스템 디자인: 웹사이트나 앱을 만들 때 어떤 기능이 필요한지 (로그인, 데이터 전송, Read/Write, etc.), 어떤 데이터베이스를 구축해야 하는지, 캐싱, 로드 밸런싱, 데이터 보안, 네트워크, 스케일링 (Ex. How to design a cache server for Netflix)
- 객체지향 개념: 웹사이트나 앱을 만들 때 class definition, (Abstraction, Encapsulation, Inheritance, and Polymorphism) UML 다이어그램 (Ex. How to design a parking lot using Object-oriented concept)
- 운영체제 (Ex. 커널과 운영체제의 차이, 멀티프로세싱과 멀티태스킹의 차이)
- 데이터 사이언스: 머신러닝, 딥러닝 개념 (Ex. How to avoid overfitting, difference between supervised and unsupervised learning)
이 밖에도 여러 질문이 나올 수 있다. 당연하겠지만 만약 지원한 포지션이 Production Engineering 쪽이라면 운영체제 쪽 질문이 많이 나올 것이고 DS관련 직종이면 그와 관련된 데이터 사이언스 질문이 나올 것이다. SWE라면 데이터베이스, 시스템 디자인 질문을 받을 가능성이 높다. 개인적으로도 이런 문제들은 단순 암기로 해결할 수 없고 정해진 답도 없기 때문에 코딩 알고리즘 문제들보다 훨씬 어렵다고 생각한다. 또 이런 technical questions들은 요령이 없이는 제대로 답변을 하기 힘들기 때문에 많은 케이스를 보면서 반복적으로 연습을 해봐야 한다. 리트코드에서는 카테고리별로 시스템 디자인, OS, 객체지향 개념 등 이런 유형의 질문들을 Discuss 페이지에서 모아볼 수 있다. 질문마다 매우 상세하게 설명해주고 있기 때문에 인터뷰에서 이런 질문을 받았을 때 어떤 답변을 해야 하는지, 어느 부분을 짚고 넘어가야 하는지 하나하나 체크해볼 수 있다. 그리고 몇몇 문제들은 어느 회사 인터뷰에서 나왔는지 멘션을 해주기 때문에 이 경우에도 준비하고 있는 회사로 필터링해서 찾아볼 수도 있다.
Discuss 페이지에서는 인터뷰 질문 이외에도 여러 취업 준비 팁이나 커리어 관련 팁 , 기타 일반 게시판도 있다. 리트코드 커뮤니티 자체가 취업 준비생들이 모인 곳이기 때문에 실제로 적용해볼 수 있는 꿀팁도 많이 있고 자신의 성공사례, 동기부여적인 글들도 여럿 소개되어 있다. 또 가장! 중요한 정보인 연봉 정보도 (얼마나 정확한지는 각자의 판단에 맡기겠지만) 확인할 수 있다.
마치며
취업은 어렵다. 특히 개발자로서의 첫 취업은 정말 어렵다. Software engineering field에서는 개발 경력이 많은 게 장땡이기 때문에 처음 개발직 취업을 준비하는 사람에게는 그 벽이 높아 보일 수 있다. 하지만 적당한 요령과 꾸준한 노력이 동반된다면 그 벽도 넘을 수 있다. 대학교 시절 첫 취업을 준비하는 학생들에게 선배들이 공통적으로 했던 말은 "Grind Leetcode" (리트코드에 영혼을 갈아 넣으라는 뜻)였다. 괜히 하는 소리가 아니다. 그만큼 알고리즘 문제 연습과 리트코드는 중요하다. 매일매일 한 문제씩 연습하다 보면 자연스럽게 풀이 실력이 향상되는 자신을 볼 수 있을 것이다.
언제든 해외 취업, 커리어 전환, 개발 공부 등과 관련된 궁금한 점이 있으시면 아래 이메일로 연락 주세요. 개발자뿐만 아니라 비전공자, 생활 코더도 모두 환영입니다!
출처
이미지 1, 2: https://leetcode.com/problemset/all/
이미지 3: https://leetcode.com/discuss/interview-question?currentPage=1&orderBy=hot&query=
리트코드 링크
https://leetcode.com/problemset/all/