개발자 면접 완전 정복하기 (3) - 시스템 설계 & 인성 면접 편

개발자 면접 완전 정복하기 (3) - 시스템 설계 & 인성 면접 편

일자

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


새해 목표로 ‘이직’을 꼽은 개발자분들 주목해 주세요! 개발자 면접에 효과적으로 대비하는 전략을 소개드리는 <개발자 면접 완전 정복하기> 시리즈의 마지막 편입니다. 아직 1, 2편을 읽어보지 않으신 분들은 아래 링크를 클릭해서 읽어 보세요.


이번 3편에서 다룰 시스템 설계 면접과 인성 면접은 개발자의 레벨을 결정짓는 중요한 면접입니다. 어떠한 면접보다도 지원자의 경험과 지식이 잘 드러나는 면접이기 때문이죠. 그만큼 잘 준비하면 자신의 실력을 한껏 뽐낼 수 있고, 그렇지 않으면 부족한 실력이 적나라하게 드러나는 시간입니다. 이번 글에서는 이 두 가지 면접 유형에 대비하는 방법을 공유드립니다.

ⓒ 셔터스톡


시스템 설계 면접 준비 방법

시스템 설계 면접은 개인적으로 기술 면접 중 가장 어렵다고 생각되는 유형입니다. 하지만 연차가 높아질수록 회사에서 시스템 설계 능력을 더 중요하게 보더라고요. 주니어 엔지니어에게는 주어진 요구 사항에 맞춰 코드를 잘 쓰는 게 주 업무라면, 시니어 엔지니어는 직접 시스템 아키텍처를 설계하고 기술적 요구 사항을 만들어 내기도 합니다. 그렇기 때문에 기업에서는 시스템 설계 면접을 통해 지원자가 좋은 시스템 아키텍처를 설계할 능력을 가지고 있는지 평가합니다.

시스템 설계 시 고려할 것
좋은 소프트웨어 시스템을 설계하려면 어떤 점들을 고려해야 할까요? 시스템을 설계할 때 고려해야 할 부분은 여러 가지가 있는데요, <데이터 중심 애플리케이션 설계 (원제: Designing Data-Intensive Applications)>에서 저자 Martin Kleppmann은 이 중 세 가지를 가장 중요한 점으로 꼽았습니다.

1. 신뢰성(Reliability)
소프트웨어 시스템에는 여러 가지 장애가 생길 수 있습니다. 시스템 장애는 하드웨어나 소프트웨어 결함, 또는 사람의 실수(human error)로 인해 발생합니다. 어느 날 잘 작동하던 인스타그램이 로딩되지 않거나, 넷플릭스가 먹통이 된 현상을 경험하신 적이 있으실 거예요. 이런 에러가 반복되면 사람들이 서비스에 대한 신뢰를 잃게 되고, 최악의 경우 이 서비스를 떠나게 되겠죠. 따라서 소프트웨어 시스템은 어떠한 장애가 있더라도 정상적으로 작동해야 하도록 신뢰성(Reliability)이 높게 설계되어야 합니다.

2. 확장성(Scalability)
소프트웨어 시스템은 끊임없이 진화합니다. 카카오톡을 예로 들어볼게요. 카카오톡을 처음 출시했을 때 목표로 잡은 가입자 수는 10만 명이었다고 합니다. 그런데 예상과 달리 5일 만에 가입자 수 10만 명이 넘었고, 출시 6개월 뒤에는 100만 명을 돌파했습니다. 지금은 월간 사용자 4,500만 명(2021년 6월 기준)에 달하는 온 국민의 메신저가 되었죠. 이렇게 빠르게 늘어나는 사용자 부하와 그 사용자들이 주고받은 방대한 양의 데이터를 어떻게 처리할 수 있었을까요? 이런 문제를 고민하는 것이 확장성(Scalability)의 영역입니다.

3. 유지보수성(Maintainability)
소프트웨어 시스템은 한 번 개발한다고 끝이 아닙니다. 경쟁사의 서비스는 계속 신기능을 개발해 사용자를 늘려가는데 우리 서비스만 가만히 있을 수 없겠죠. 계속 새로운 기능을 추가하고, 기존 기능이 잘 작동하도록 보살펴 줘야 합니다. 이런 작업을 유지보수라고 하는데요, 시스템이 크고 복잡해질수록 유지보수도 더 어려워집니다. 이런 유지보수 작업을 보다 쉽고 간편하게 만드는 것이 유지보수성(Maintainability)의 영역입니다.


시스템 설계 면접 공부법

지난 몇십 년 간 소프트웨어 시스템의 사용자 수와 데이터 양은 꾸준히 증가했습니다. 그리고 이렇게 시스템이 커지면서 발생하는 문제들을 해결하기 위해 수많은 기술이 생겨났죠. 사용자 부하를 여러 서버에 분산시켜 주는 로드 밸런서(Load Balancer), 데이터에 빠르게 접근할 수 있도록 자주 사용되는 데이터를 임시로 저장하는 캐시 (Cache), 이미지가 빠르게 로딩될 수 있도록 사용자 근처의 서버에 저장하는 콘텐츠 전송 네트워크(CDN) 등 다양한 기술이 있습니다. 시스템 설계 면접에서는 이런 기술을 잘 활용해서 신뢰성, 확장성, 유지보수성이 높은 시스템을 설계해야 합니다.

시스템 설계 면접을 준비할 때는 아래 2단계를 따라 공부하시는 것을 추천드립니다.

1단계: 시스템 설계 기본 다지기
가장 먼저 시스템 설계에 사용할 수 있는 기술의 종류와 개념을 익히는 과정이 필요합니다. 개념을 탄탄히 다져 둬야 이를 설계에 활용할 수 있겠죠. 개념 정리를 위해서는 기술 도서나 관련 온라인 자료를 활용하는 것을 권장드립니다.

기술 도서

* 이 도서의 내용은 웹사이트(영문)로도 제공됩니다.


온라인 자료 (영문)

2단계: 케이스 스터디를 통해 실제 적용 사례 분석해 보기
개념을 익힌 다음에는 실제 기업의 케이스 스터디를 해 보세요. 케이스 스터디로 실제 적용 사례를 살펴보면 다른 기업에서는 어떤 문제를 해결하기 위해 이 기술을 도입하고, 이를 어떤 방식으로 활용하는지 배울 수 있습니다. 이 과정을 통해 해당 기술에 대한 이해도도 높아지고, 추후에 이 기술을 실제로 응용할 수 있는 방법 또한 익히게 됩니다. 케이스 스터디에는 기업의 기술 블로그 또는 컨퍼런스 자료를 활용하면 좋습니다.


기업 기술 블로그

컨퍼런스


시스템 설계 면접 실전을 위한 6가지 팁

시스템 설계 면접은 정답이 정해져 있는 면접이 아니기 때문에 여러 방향으로 흘러갈 수 있습니다. 따라서 실전에서 면접관과 어떻게 소통하는지가 중요한데요, 열심히 공부해놓고 실제 면접에서 커뮤니케이션 스킬이 부족해 실력 발휘를 못하면 안 되겠죠. 실전에서 공부한 내용을 제대로 보여주기 위한 6가지 팁을 공유드립니다.

1. 설계를 시작하기 전에 충분한 질문을 통해 요구사항을 정확히 이해하세요.
2. 설계 범위를 넓고 얕게 잡을지, 또는 어느 특정 영역에 집중해서 볼지 면접관과 상의하세요.
3. 대략적인 설계안을 제시한 뒤, 상세한 설계로 들어가는 흐름이 좋습니다.
4. 본인이 자신 있는 부분에 좀 더 집중해서 설명하셔도 됩니다.
5. 가능하다면 두 개 이상의 설계안을 제시하고, 각 설계안의 장단점을 비교해 보세요.
6. 동료와 함께 설계한다고 생각하고 끊임없이 소통하면서 진행하세요.

여기까지 시스템 설계 시 고려할 점, 공부 방법, 그리고 면접 팁을 공유드렸습니다. 사실 시스템 설계 실력은 단기간의 준비로 확 끌어올리긴 어렵습니다. 꾸준한 공부와 실제 업무에서의 경험이 합쳐져서 조금씩 노하우가 쌓이게 되죠. 하지만 제대로 시스템 설계 지식을 쌓아 놓으면 면접 상황 외에 평소 업무에서도 많은 도움이 되니, 포기하지 말고 꾸준히 공부하시길 바랍니다!

ⓒ 셔터스톡


인성 면접에서 효과적으로 경험 어필하는 법

인성 면접은 직무에 상관없이 꼭 포함되어 있는 면접입니다. 회사마다 진행하는 방식은 조금씩 다르지만, 지원자의 기술적인 실력 외 전반적인 역량을 파악하는 것이 이 면접의 목적입니다. 회사에서는 이 면접을 통해 지원자가 이 기업 문화에 잘 맞는 인재인지, 이 직무에 적합한 경험과 직급에 맞는 소프트 스킬을 갖췄는지 알아볼 수 있습니다.

인성 면접은 과거의 경험에 집중해 지원자가 어떤 상황에 어떻게 행동했는지를 묻는 행동 면접(Behavioral Interview), 있을 법한 상황을 가정하여 미래의 행동 의지를 묻는 상황 면접(Situation Interview) 등 다양한 형태로 진행됩니다. 요즘 기업에서는 이중 행동 면접을 많이 채택하고 있는데요, 이 면접 유형에 대비하는 4단계 준비법을 소개드립니다.

1단계: 중요한 경력 선정하기
행동 면접에서는 여러 질문을 통해 과거의 경력을 집중적으로 파고듭니다. 이력서를 작성할 때 여러 항목 중 중요한 경력을 선정하듯, 면접에서 사용할 사례도 미리 준비해 두는 게 좋습니다. 자랑스럽게 얘기하고 싶은 성과, 자신의 장점을 더 빛나 보이게 할 과거 사례 등을 최소 10가지 이상 적어보세요. 미리 준비하지 않고 면접에 임하면 면접관의 질문에 휩쓸려 그다지 인상적이지 않은 경험만 얘기하고 정작 중요한 경력은 빠트리게 될 수도 있습니다.

2단계: 기업 문화에 맞는 사례 준비하기
각 기업에는 그들이 원하는 인재상이 있습니다. 회사에서는 자사의 기업 문화에 잘 적응하고, 그 안에서 성공할 수 있는 인재를 원하죠. 따라서 인성 면접에서는 각 회사가 중요하게 생각하는 기업 문화를 중심으로 질문을 출제할 가능성이 높습니다. 그렇다면 이러한 기업 문화를 미리 파악해두는 게 면접에 도움이 되지 않을까요? 네, 당연히 기업 문화를 알아두면 여러분이 그 문화에 걸맞은 인재라는 것을 어필하기에 유리해지겠죠.

기업 문화 정보는 누구에게나 공개되어 있기 때문에 간단한 검색을 통해 쉽게 파악할 수 있습니다. 예제로 대표적인 국내/해외 빅테크 기업의 기업 문화 페이지를 가져와봤습니다.


이러한 기업 문화를 파악하고, 각 항목에 맞는 예제를 미리 준비해두면 면접에 큰 도움이 됩니다. 예를 들어 카카오에서는 ‘가보지 않은 길을 두려워하지 않는’ 인재를 선호한다고 하는데요, 남들이 해보지 않은 일에 용감하게 도전했던 사례를 미리 생각해두면 면접에서 여러분이 혁신적인 인재라는 것을 효과적으로 어필할 수 있겠죠. 1단계에서 선정해둔 사례를 여러분이 지원한 회사의 기업 문화 항목과 짝지어 보세요. 만약 이미 뽑아둔 경력 중 마땅한 게 없다면 새로운 사례를 추가하시면 됩니다.

예제:
  • 주도적으로 일하는 인재 - 프로젝트 A 리딩 경험
  • 효율적으로 일하는 인재 - 자동화를 통한 업무 시간 단축 경험
  • 동료와 함께 성장하는 인재 - 사내 멘토링에서 멘토로 활동한 경험

이런 방식으로 각 항목마다 관련 사례를 한두 개씩 준비해두면 좋습니다. 회사마다 중복되는 항목도 꽤 있습니다. 예컨대 네이버 기업 문화 페이지에 있는 ‘사용자(USER) 중심의 사고’ 항목은 구글과 아마존의 기업 문화 페이지에도 가장 첫 번째 항목으로 나열되어 있습니다. 이처럼 여러 회사에서 공통적으로 중요하게 생각하는 가치에 특히나 더 주목하세요.

3단계: 자주 나오는 질문에 답변 준비하기
회사마다 면접 질문은 조금씩 다르지만, 특정 기업에 상관없이 자주 등장하는 질문들이 있습니다. 이런 질문에 대한 답변과 관련 사례를 미리 준비해두면 면접에서 막힘없이 대답할 수 있겠죠. 이때 1, 2단계에서 미리 선정한 경력을 이용하거나, 필요하다면 새로운 사례를 추가하면 됩니다. 면접에서 자주 나오는 질문을 다섯 가지 주제로 묶어보았습니다.

문제 해결
  • 가장 어려웠던 프로젝트에 대해 얘기해주세요. 어떤 점이 어려웠고, 그 어려움은 어떻게 해결했나요?
  • 팀의 개선점을 직접 찾아 해결한 경험이 있나요?

프로젝트 관리   
  • 프로젝트에서 우선순위는 어떻게 설정하시나요?
  • 마감일이 빡빡하게 설정된 프로젝트를 진행해 본 경험이 있나요? 어떤 방식으로 마감일을 맞췄나요?

갈등 해결 
  • 동료와 갈등이 있을 때는 어떻게 해결하시나요?
  • 다른 팀원들 사이에서 문제가 있었을 때 중재해 준 경험이 있나요?

커뮤니케이션
  • 상사와 의견 충돌이 있을 때는 어떤 대화 방식을 사용하시나요?
  • 동료에게 어려운 피드백을 줘야 했던 경험이 있나요?

혁신
  • 주어진 일에서 벗어나 혁신적으로 무언가를 시도해 본 적이 있나요?
  • 팀에서 창의적인 아이디어를 냈던 경험이 있나요?

4단계: STAR 기법을 활용해 답변하기
STAR 기법은 Situation(상황), Task(과제), Action(행동), Result(결과) 템플릿을 활용해 ‘어떤 상황에서 → 어떤 과제를 → 어떻게 해결했는지 → 그 결과는 어땠는지’의 순서로 면접 질문에 답변하는 방식입니다. 면접에서 질문에 답할 때 모호하게 얘기하는 것보다는 관련 사례를 구체적으로 묘사하며 설명하는 것이 훨씬 효과적인데요, STAR 기법은 이렇게 사례를 구조화하기에 유용한 방법입니다.

Situation(상황)
  • 언제 어디서 일어난 일인지, 구체적으로 어떤 상황이었는지

Task(과제)
  • 해결하고자 하는 문제가 무엇이었는지
  • 이 문제를 해결함으로써 얻고자 하는 목표가 무엇이었는지

Action(행동)   
  • 어떤 방식으로, 어떠한 과정을 거쳐 문제를 해결했는지
  • 누구와 함께 이 문제를 해결했는지, 이 과정에서 나의 역할은 무엇이었는지
  • 문제를 해결하는 중에 어떠한 어려움이 있었는지

Result(결과)   
  • 위 행동의 결과는 어땠는지
  • 결과에 어떤 트레이드오프(trade-off)가 있었는지
  • 이 과정을 통해서 무엇을 배웠는지

위와 같이 STAR 기법의 순서를 따라 사례를 구조화하면, 보다 논리적으로 설명해서 답변의 설득력을 높일 수 있습니다.

ⓒ 셔터스톡


여기까지 인성 면접에 준비하는 4단계 방법을 소개드렸습니다. 개발자는 기술 면접만 잘 보면 된다고 생각하고 인성 면접 준비는 소홀히 하시는 분들도 있을 텐데요, 기술적 역량만큼 소프트 스킬도 중요합니다. 특히 직급이 올라갈수록 소프트 스킬이 더 중요해지기 때문에, 기술 면접은 잘 봤더라도 인성 면접 결과가 안 좋다면 직급이 한 단계 낮게 책정될 수도 있어요. 그러니 인성 면접의 중요성을 얕보지 마시고 철저히 준비해 두시는 걸 권장드립니다!



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



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



발행일 2022.12.28