스터디원의 2명 (@KEJdev 와 @yugyeong71)은 현재 회사 면접을 보고 있다. 이 둘은 최근 고민이 빠져 있는데, 바로 라이브 코딩테스트! 아직까지 본적은 없지만, 라이브 코테라니! 떨고 있다. 이들을 위해 라이브 코테는 어떻게 준비해야될지 논의 해보자.
라이브 코딩 테스트는 과연 왜 보는 것일까?
라이브 코딩 테스트는 단순하게 문제의 정답을 풀 수 있는가를 가지고 합격 여부를 정하는 것이 아닐 것이다.(아마도...) 지금 앞에 있는 면접관은 높은 확률로 나의 사수 또는 나와 같이 일하게 될 동료가 될 사람이다. 앞으로 나와 함께 일할 사람의 코딩 스타일이나 피드백 수용력, 협업에 대한 방식을 볼 수 있는 것이 라이브 코딩 테스트라고 생각한다. 편하게 생각하자!! 그냥 페어코딩이라고 생각하면 괜찮지 않을까?
왜 갑자기 라이브 코딩 테스트를 보는 곳이 늘어나게 되었을까?
아마도 온라인 코딩 테스트만으로는 이 사람의 성향을 파악하기 힘들어서가 아닐까 싶다. 또한 GPT의 등장으로 코드를 AI가 대신 풀어주다보니, 더이상 의미가 없어서가 아닐까 싶다.
요즘은 알고리즘을 라이브 코테로 보는 곳도 많지만, 조금 더 면접이 빡센 곳은 시스템 아키텍처를 설계하라고 하거나, Loss 함수나 Active 함수를 직접 손코딩이나 코드를 짜보라고 하기도 한다. 알고리즘 라이브 코테는 내가 부지런하게 많은 알고리즘을 푸는 수 밖에 없겠지만, 그 시스템 아키텍처에 대한 라이브 코테나 질문은 어떻게 준비해야될까?
우리는 보통 문제를 받으면 바로 풀려고 하는 특성을 가지고 있다. 이러한 특성은 이런 면접에서는 굉장히 불리할 수 있다.
어떠한 문제든, 꼭 문제에 대한 정의를 하고 문제를 푸는 습관을 들이자.
예를 들어보자. 면접관이 “도서관에서 빌린 책을 반납하는 시스템을 설계” 해달라는 질문을 받았다. 그럼 어떻게 해야될까?
우리는 면접관과 함께 핑퐁하듯이 질문을 주고 받아야 한다. (면접관이 나의 슈퍼 개발 능력을 바라면서 던진 질문은 아닐 것이다.)
어떤 질문을 해보는 게 좋을까 ?
다양한 질문이 오갈 수 있겠지만, 우선 이 도서 반납 시스템에 대해 상세하게 정의를 하는 것이 좋다. 한번 질문을 해보자.
반납 기한은 몇칠인가요?
반납 기한이 지나거나, 반납일이 다가오면 유저에게 알람이 가나요?
도서관의 휴무일이 있나요?
반납이 지나면 유저에게 가는 패널티가 있나요?
전자책도 있나요?
스타트업에서 사용할 시스템인가요? 대규모 유저대상으로 사용할 시스템인가요?
DB나 기존에 사용중인 프레임워크를 신경써야할까요? 한다면 기존 기술스택을 알려주시면 감사합니다.
이제 문제 정의를 했으니 설계를 해야한다. 그럼 설계를 한다는 건 어떤 것일까? 예를 들면 아래와 같을 수 있다고 본다.
인프라까지 같이 한다면 데이터센터의 이중화 여부나, 스타트업 시스템인지 등의 여부를 물어본 뒤 인프라의 설계를 도식화 후 코드로 설계한다.
단순히 코드만 설계하라고 한다면 아래와 같이 할 수 있다.
반납 기한은 며칠인가요?와 같은 문제의 상세 조건은 Given-When-Then 형태로 정의할 것.