개발자 면접 완전 정복하기 (2) - 코딩 과제 & 이론적 기술 면접 편

개발자 면접 완전 정복하기 (2) - 코딩 과제 & 이론적 기술 면접 편

일자

상시
유형
아티클
태그
이 아티클은 <나만 알고 싶은 개발자 취업 치트키> 시리즈의 4화입니다.


전보다 분명 개발자 수요는 높아졌는데, 여전히 개발자들은 면접 통과가 어렵다는 고충을 토로합니다. 사실 개발자 전체의 수요보다는 실력 있는 개발자의 수요가 높아졌기 때문이죠. 그리고 그 실력을 증명하기 위해서는 기술 면접에서 좋은 퍼포먼스를 보여줘야 합니다. 지난 <개발자 면접 완전 정복하기 (1)>편에서는 개발자의 면접 유형 다섯 가지와 그중 가장 많이 출제되는 코딩 테스트 공부법을 소개드렸습니다. 코딩 테스트 다음으로 자주 출제되는 면접 유형은 코딩 과제와 이론적 기술 면접인데요, 이번 편에서는 이 두 가지 면접 유형에 대비하는 방법을 공유드립니다.


코딩 과제 면접을 통과하기 위해 꼭 해야 할 네 가지


코딩 과제는 코딩 테스트의 대체 유형으로 출제되거나, 코딩 테스트의 전 단계에서 사전 과제로 출제됩니다. 알고리즘 문제가 주로 나오는 코딩 테스트와 달리, 코딩 과제에서는 실제 업무와 유사한 문제가 주어집니다. 예를 들어 백엔드 직군의 경우 API를 개발하는 과제, 프론트엔드 직군의 경우 특정 화면을 개발하는 과제가 주로 출제됩니다. 

ⓒ 프로그래머스


코딩 과제 연습 문제: https://school.programmers.co.kr/skill_check_assignments?page=1


코딩 과제에서는 특정 요구사항이 명시되는데요, 예를 들어 API 작성 과제의 경우 아래와 같은 조건이 주어질 수 있습니다.

  • API가 처리해야 하는 로직
  • API 요청 포맷 및 응답 포맷
  • 오류 처리 방식


위의 요구사항을 정확히 이해하고 구현하는 건 코딩 과제의 기본입니다. 그런데 이렇게 직접적으로 명시되는 요구사항 외에도 면접관이 주의 깊게 살피는 요소가 있습니다.

  • 이해하기 쉬운 코드인가?
  • 일관성 있게 작성된 코드인가?
  • 효율성이 좋은 코드인가?
  • 적절한 자료구조 및 디자인 패턴을 사용했는가?
  • 테스트를 작성했는가? 테스트에서 에지 케이스(edge case)까지 커버했는가?

ⓒ 게티이미지PRO


코딩 과제 면접에서 좋은 결과를 받기 위해서는 이러한 직·간접적 요구사항을 모두 만족해야 합니다. 코딩 과제를 할 때는 아래 네 가지를 꼭 기억하세요!


1. 정확하게 기능 구현하기
코딩 과제에서는 필수 요구사항을 정확히 이해하고 구현하는 것이 가장 우선입니다. 일부 기능을 빠트리거나, 주어진 지문을 제대로 이해하지 못해 엉뚱한 방향으로 코드를 작성하게 되면 마이너스 요소가 됩니다. 본격적으로 코딩을 시작하기 전 요구사항을 꼼꼼히 읽어 보고 이에 맞게 기능을 하나씩 구현해 보세요. 그리고 과제를 제출하기 전에 모든 기능을 정확히 구현했는지 다시 한번 체크해 보세요.


2. 테스트 코드 추가하기
기능을 정확하게 구현했는지 확인할 수 있는 가장 좋은 방법은 바로 테스트 코드를 통한 검증입니다. 실제 업무를 할 때 유닛 테스트를 활용해 기능을 검증하듯, 코딩 과제를 할 때도 테스트를 작성하는 것이 좋습니다. 테스트는 기본적인 케이스뿐 아니라 에지 케이스(edge case)까지 커버할 수 있도록 주의해서 작성하세요. 코딩 과제에서 테스트 코드 추가는 직접적인 요구사항으로 명시되어 있지 않는 경우가 많지만, 사실 면접관이 가장 중요하게 보는 요소 중 하나입니다. 


3. 코드 리팩토링 하기
코딩 과제에서는 기능을 구현하는 것뿐 아니라 코드의 퀄리티 또한 중요합니다. 코딩 과제도 결국에는 함께 일할 사람을 뽑기 위한 과정이기 때문에, 지원자가 얼마나 이해하기 쉽고 협업하기 좋은 코드를 작성했는지가 중요한 평가 기준이 됩니다. 코드와 테스트를 다 작성한 뒤에는 다시 한번 코드를 읽어보며 더 개선할 부분은 없는지 점검하고, 코드의 가독성과 효율성에 집중해서 리팩토링 해 보세요.


4. README 작성하기
README는 코딩 과제를 리뷰하는 면접관이 가장 먼저 보는 문서입니다. 내 코드의 얼굴이라고 할 수도 있겠죠. 읽는 사람에게 필요한 정보를 제공하기 위해 README에는 아래와 같은 내용을 포함시키는 걸 권장드립니다.


  • 프로젝트 구성 - 전체 구조를 어떻게 설계했는지 설명하기 (필요에 따라 그래프나 다이아그램 활용)
  • 기능 목록 - 요구사항을 다시 한 번 요약하고, 각 기능을 어떻게 구현했는지 설명하기
  • 사용한 기술 스택 및 라이브러리 - 어떤 언어와 버전을 사용했는지 (예제: Java 11), 외부 라이브러리를 사용했다면 어떤 기준으로 선택해 사용했는지 명시하기
  • 코드 실행 방법 - 면접관이 직접 코드를 실행해 볼 수 있도록 실행 방법 안내하기

ⓒ 게티이미지PRO


이 네 가지 항목에 주의해 코딩 과제를 작성한다면 결과물의 퀄리티를 한층 더 높일 수 있습니다. 또한 이 결과물을 사이드 프로젝트로 포트폴리오에 넣어도 되기 때문에, 면접의 결과와 상관없이 수준 높은 프로젝트를 만든다는 생각으로 코드를 작성해 보세요. 면접에 합격하면 그 자체로 좋고, 탈락하더라도 훌륭한 사이드 프로젝트를 만들 수 있으니 얻어 가는 게 있겠죠. 그리고 이런 마음가짐으로 과제를 작성하면 자연스럽게 합격 확률도 높아질 거라고 생각합니다.


이론적 기술 면접 준비 3단계 가이드


이론적 기술 면접은 코딩을 하지 않고 기술적인 질문에 구두로 답하는 방식의 면접입니다. 코딩을 하지 않으니 좀 더 쉬울 거라고 생각할 수 있지만, 제 경험상 이런 유형의 면접이 더 어려웠습니다. 코딩 문제면 당장 답을 몰라도 뭐라도 한 줄 적으며 시간을 끌 수 있을 텐데, 말로 대답해야 하는 면접이라 더 막막하더라고요. 하지만 잘 준비만 한다면 자신의 지식을 적극적으로 어필할 수 있는 면접이기도 합니다. 이런 유형의 면접에 대비하기 위한 3단계 가이드를 소개드립니다.


1. 면접에 자주 나오는 주제 파악하기
이론적 기술 면접에서는 컴퓨터 공학 지식부터 특정 프로그래밍 언어 관련 지식까지 광범위한 분야에서 다양한 질문이 나옵니다. 아무래도 이 많은 내용을 단기간에 다 습득하기는 어렵기 때문에 평소에 공부를 꾸준히 해두는 게 가장 중요합니다. 하지만 면접이 얼마 안 남아 시간 여유가 없는 상황이라면, 면접에 자주 나오는 주제를 파악해 공부 범위를 좁히는 방식으로 공부의 효율성을 높일 수 있습니다.

상세한 면접 질문은 지원 분야에 따라 다릅니다. 지원 분야가 백엔드인지 프론트엔드인지에 따라 해당 분야의 예상 질문을 검색해 보세요. 백엔드 분야의 경우 서비스 단계의 코딩부터 데이터베이스까지 다루기 때문에 이에 관련된 질문이 주로 나오고, 프론트엔드 분야의 경우 UI 및 브라우저 성능 관련 지식이 필요하므로 이런 부분에서 질문이 자주 출제됩니다.

또한 해당 회사의 기술 스택에 맞는 질문이 출제되기도 합니다. Java와 Spring을 사용하는 회사라면 Java에 관한 질문이 나오고, Javascript와 Node.js를 사용하는 회사라면 Javascript에 좀 더 집중된 질문이 나오겠죠. Javascript만 사용하는 회사인데 Java 면접 질문만 공부하면 소중한 면접 준비 시간을 낭비하게 될 수도 있습니다. 따라서 면접을 보는 회사의 기술 스택을 미리 파악해 두는 것이 면접 대비에 도움이 됩니다.

공통적으로 기술 면접에서 자주 나오는 질문을 잘 정리해 둔 페이지가 있어 공유합니다.
https://github.com/JaeYeopHan/Interview_Question_for_Beginner


2. 공부 방법 정하기
면접에 자주 나오는 주제를 파악했다면 그다음은 공부 방법을 정할 차례입니다. 이론적 기술 면접에 대비하기 위한 공부 방법으로는 크게 세 가지가 있습니다.


기술 도서 읽기
가장 추천하고 싶은 공부 방법은 해당 주제에 관련된 책을 읽는 것입니다. 온라인에서 검색을 통해 누구나 손쉽게 필요한 정보를 찾을 수 있지만, 책만큼 깊게 지식을 얻을 수 있는 방법은 없다고 생각합니다. 기술 도서에는 많은 내용이 담겨있을 뿐 아니라, 보통 출판사의 교정과 검증을 거치기 때문에 정보의 정확도 또한 보장됩니다. 그 주제에 관해 깊고 정확하게 배울 수 있는 가장 좋은 방법이라고 할 수 있겠죠. 책 한 권을 다 읽을 시간이 없다면 원하는 주제가 담긴 챕터를 찾아서 그 부분만 읽어보는 방법도 있습니다.


동영상 강의 듣기
눈으로 읽는 것보다는 다른 사람이 설명하는 것을 듣는 편이 더 이해가 잘 간다는 분께는 동영상 강의를 추천드립니다. 유튜브에 원하는 키워드로 검색하면 개발자가 잘 정리해서 올린 영상 자료를 손쉽게 찾을 수 있습니다. 조금 더 체계적으로 커리큘럼이 짜인 방식을 선호하신다면, 인프런이나 유데미 같은 온라인 강의 플랫폼에서 영상 강의를 수강하는 것도 좋은 방법입니다.


기술 블로그 보기
시간이 부족한 경우 기술 블로그를 통해 빠르게 내용을 읽어보는 방법도 있습니다. 개발자가 실제 면접을 준비하면서 공부한 내용을 정리해서 올려두기도 하는데요, 이 내용을 참고하면 면접 준비에 도움이 됩니다. 다만 블로그에는 보통 책이나 영상 강의에 비해서는 요약된 형태의 포스팅이 올라오기 때문에 그 주제를 깊이 있게 공부하기는 어려울 수 있습니다. 따라서 시간 여유가 된다면 책이나 영상 강의를 통해 깊이 있게 공부를 하고, 블로그는 마지막에 한 번 더 정리하는 방식으로 사용하시는 걸 권장드립니다.

이론적 기술 면접에서는 객관식 답안을 고르는 게 아니라 자세한 답변을 기술해야 하는데요, 몇몇 키워드만 알고 넘어가는 식으로 공부해서는 이렇게 자세하게 설명하기가 어렵습니다. 면접관 입장에서 지원자의 답변을 듣다 보면 해당 주제에 대한 이해도를 쉽게 파악할 수 있거든요. 키워드만 몇 개 외워 가는 접근 방식보다는 정확하게 개념을 이해하고 넘어가는 것을 권장드립니다.


3. 예제를 활용해 설명하기
열심히 공부해 면접에 들어갔는데 막상 설명하려니 예상보다 말이 잘 안 나왔던 경험이 있으신가요? 어떤 개념에 대해 어느 정도 알고 있다고 해도 누군가에게 설명하는 건 어려울 수 있습니다. 우리는 매일 이렇게 남들에게 설명하는 게 직업인 전문 강사가 아니잖아요. 하지만 이런 과정을 조금 더 쉽게 만들 수 있는 방법은 있습니다. 바로 예제를 활용해 설명하는 방법입니다.

강의를 잘하기로 유명한 강사들을 보면 공통적으로 예제를 잘 활용하는 것을 볼 수 있습니다. 예제를 활용해 설명하면 강의에서는 학생들을 보다 쉽게 이해시킬 수 있고, 면접에서는 자신의 이해도를 더욱 뽐낼 수 있습니다. 적절한 예제를 들어 설명하면 그만큼 그 주제를 잘 알고 있는 것처럼 보이니까요. 면접에서 예제를 잘 활용하기 위해서는 평소에 공부할 때도 개념 정리와 더불어 예제를 생각해 보는 것이 좋습니다.

ⓒ 게티이미지PRO


물론 이렇게 철저히 준비해 이론적 기술 면접에 들어가도 모르는 내용이 있을 수 있습니다. 이럴 때 너무 당황하지 마시고 솔직하게 모르는 내용은 모른다고 답해도 괜찮습니다. 면접관 입장에서 지원자가 모든 걸 알 거라고 기대하고 질문하진 않거든요. 반면에 잘 아는 내용이 면접 질문으로 나오면 자신 있게 설명하며 실력을 어필하세요. 그 부분에서 임팩트가 크면 모르는 부분이 좀 있더라도 충분히 커버될 수 있습니다. 이론적 기술 면접에서는 완벽하게 모든 걸 알아야 한다는 부담을 갖기보다는, 최선을 다해 준비한 뒤 아는 만큼 잘 보여주고 오겠다는 마음으로 임하시는 걸 권장드립니다!



▶ <나만 알고 싶은 개발자 취업 치트키> 시리즈 보러 가기



글ㅣ엄지현
런던 Amazon에서 개발자로 일하는 대한영국 직장인. 끊임없이 배우며 함께 성장하는 삶을 지향합니다. 브런치에서 글을 통해 생각을 나눕니다. (https://brunch.co.kr/@jihyun-um)



발행일 2022.12.16