12 min to read
커리어 도약을 위한 여러 면접 회고 - 1
마주해야 할 나의 이야기들, 그 첫째

들어가며
가장 최근 이전 글에서 “거의 한 달의 공백”을 소명하겠다고 예고했다. 이 글은 그 약속의 이행이자, 9월에 겪었던 ‘많은 일’을 정리하며 정지가 아닌 정비였음을 기록하는 리빌드 로그를 남기려 합니다.
안타깝지만 받아들여야 할 일
이전에 ‘첫 서울 직장’에 대한 글을 작성하였지만, 아쉽게도 그 회사에서 더 이상 일을 할 수 없게 되었습니다. 다행인것은 그 회사의 이사님께서 저에게, ‘너가 잘못한 것이 아니다’ 라는 이야기를 오프 보딩을 알리는 자리에서 대여섯번 정도는 말씀하셨고, 대표이사님 명의의 추천서를 받을 수 있었다는것 일 것입니다.
안타까운 현실은 짧게 남아버린 저의 이력일 것이고, 재취직을 위해서 다시 괴로움이 다소 함유된 취준 기간을 거쳐야 한다는 것이겠지요.
바쁘디 바쁘게 굴러갔던 9월
재취직 기간 중 9월은 일정이 유난히 빽빽했다. 주요 일정은 다음과 같다.
- 9/10 : AI 미연시 회사 FE 개발자 면접
- 9/11 : 가상 공간 콘텐츠를 주력으로 하는 회사 면접
- 9/16 : 안전 관리 솔루션 회사 1차 온라인 면접
- 9/17 ~ 9/19 : 예비군
- 9/23 : 안전 관리 솔루션 회사 2차 대면 면접
이었고, 9/16과 9/23에 면접을 봤던 안전 관리 솔루션 회사는 개인적으로 참 가고 싶었던 회사였고, 면접 분위기가 꽤나 나쁘지 않았다고 생각해서 많은 기대를 걸고 있었습니다. 다만, 회사 내부 일정상의 문제 등으로, 추석 연휴 시작 전에 결과가 나오기로 원래 예정이 되어 있었지만, 추석 연휴가 끝나고 나서 일주일 안에 결과가 나오는 것으로 2주가량 미뤄지게 되었고, 며칠 전인 10/17에 좀 아쉬운 결과를 받고, 다시 원래의 루틴으로 돌아올 수 있게 되었습니다.
이 글에서 다룰 이야기
인터넷을 돌아다니다 보면, 참으로 많은 회고 글들이 있고, 면접 회고 글도 어렵지 않게 찾아볼 수 있습니다. 많은 회고 글을 작성해온 제 블로그 글에도 면접 회고 글을 올려볼까 합니다.
어떤 회사의 면접을 봤는지 등에 관해서는 실제 명칭과 상관없이 면접을 본 순서대로 임의의 이름으로 지칭하였음을 참고 바랍니다.
부동산 관련 서비스업 ‘가’ 회사 면접
‘가’ 회사는 주거지를 구할 때 알아봐야 하는 정보들을 정리해서 수요자들에게 일목요연하게 정리해서 보여주는 웹과 앱 서비스를 운영하는 B2C형 서비스를 운영하는 스타트업 이었습니다. 서류전형 합격 후 1차 기술면접을 보게 되었습니다. 제가 응시한 포지션은 채용 연계형 인턴이었습니다.
JD에서 요구한 자격요건
- React, TypeScript, Next.js 기반의 웹 애플리케이션 개발 경험이 있으신 분
- Redux, Recoil, React-Query, SWR 등의 상태 관리 패턴 사용 경험이 있으신 분
- HTML/CSS 마크업, 시맨틱 태그를 고려하여 개발하시는 분
- 모바일 환경 또는 반응형 웹 개발 경험이 있으신 분
면접 내용 요약
1시간 이상 가량의 대면 오프라인 면접이었습니다. 시니어 개발자 분과 1대1로 진행하였습니다.
1분 자기소개로 시작 하였습니다. 이전 회사에서 했던 웹뷰 관련 경험과, 자취를 시작하면서 직접 느꼈던 부동산에 관한 정보들이 실제로 필요하다는 것을 느꼈다는 저의 이야기를 했습니다.
기술 면접
다음으로는 이전 업무들이 RN에 치우친 것 같다 라는 이야기를 들었습니다. RN 쪽을 최근에 하긴 하였지만, 저의 개발 이력을 통틀어서 보면 React 중심임을 이야기 하였습니다.
다음으로 저에게 여쭈어 보셨던 것은, 이 회사는 Next.js를 사용하는데 그 간극을 어떻게 매꿀 것인가에 관해서 였는데, Next.js 경험 자체가 부족하다 보니, 면접관의 질문이 SSR vs CSR에 대한 질문과 그에 따른 간단한 꼬리 질문들이었고 이러한 부분에서 기술적으로 뛰어나다는 좋은 인상을 주기에 어려웠지 않을까 하는 그런 생각도 하게 되는 것 같습니다.
이전 회사들에 관한 경력들이 있는 만큼, 그 부분들에 대해서도 간략히 물어보셨습니다.
당시 면접을 복기할 때에는 느끼지 못했지만, 현재 시점에서 핵심 질문이라고 생각하는 것들 또한 정리해 보고자 합니다.
- 렌더링 최적화 관련 경험이 있는가?
- 실제로 서비스에 어떤 영향을 줬는가
- 지금까지의 경력에서 어떤것을 배웠는가
- hook을 자주 썼는가?
- 리액트 쿼리나 useForm같은 라이브러리도 사용?
- hookForm을 썼다면, 직접 메인 로직을 구현한다면?
- 변경 시점에 대한 인지는 어떻게 할 것인가?
- hookForm을 썼다면, 직접 메인 로직을 구현한다면?
- 리액트 쿼리나 useForm같은 라이브러리도 사용?
콘텐츠 중심 B2C 서비스이고, 아마 팀 내에서 겪었거나, 겪고 있는 기술 관련 질문들도 받았습니다. 당연한 이야기지만, 한바탕 폭풍이 지난 다음 현재로서 회고하다 보니, 이러한 것들을 가정해서 준비를 하는것이 조금 더 효율이 좋은 구직을 위한 학습 방법론이 아닐까 싶네요
핏 면접
다음으로는 핏에 관한 질문들을 한다고 하셨습니다.
- 어떤 직급까지 올라갈 것 같은 타임라인적 비전이 있는지?
- 학창시절 등에서 시험을 보고 바로 복기했는지, 아니면 다음 일정을 준비했는지
- 업무나 팀 프로젝트에서 협업하기 힘들었던 사람이 있는가?
- 업무나 팀 프로젝트에서 내가 잘 했던 경험은?
- 그 곳에서 기술 스택을 선정한 기준은?
마무리인줄 알았는데, 사실 더 있었던 것
당시 면접관님이 ‘마무리 하면서 하나만 더 여쭤볼게요’ 같은 말씀을 하셨지만, 꽤나 질문이 몇개가 있었습니다. 지금까지의 면접들을 보면 이러한 것들이 꽤나 많았어서 별도의 섹션으로 분리합니다.
- TS를 사용하면서 타입가드에 대해서 알고 있는가?
- 본인이 사용하는 방법론에 대해서 설명해주십시오
- 리액트에서 클로저를 사용하는 방식에 대해서 알고 있는가?
- hydrate에 대해서 소개해주세요
- hydrate되기 전과 후에 상태가 일치하지 않을 때 어떤 일이 일어나는지 알고있나?
이 부분들은 나름 정답대로 잘 말했지만, 면접의 마지막에 있는 경우가 많은, ‘지원자의 역질문’에서 제가 자충수를 둬서, ‘가’ 회사의 1차 면접 다음의 전형에 참가하지 못한 것 같습니다.
지원자의 질문 (+etc)
채용을 할 때 핏을 유념히 보시겠지만, 잘 맞지않아 팀 내에서 마찰이 생긴다면?
이라는 질문을 했었습니다. 당시에 서울 첫 직장에서 제 의도가 아닌 외부의 요인에 의해서 나가게 되었어서, 그 부분에 대한 집착 같은 것이 표면으로 들어났던게 아닐까 싶습니다.
저의 질문 이후에 정말 마지막 면접관님의 질문 또한 있었고, 스타트업에 지원할 때 마다 들었던 질문이 있었습니다.
스타트업에 지원하게된 계기가 있으신가요?
저의 대답은 이전 경험을 생각해 봤을 때, 도메인에 깊숙히 들어가서 여러 롤을 맡는 것, 작은 조직에서의 민첩한 의견 개진들을 말했습니다.
틀려먹은 대답은 아니겠지만, 그래도 ‘인턴’이라는 보조적 포지션, 그리고 어느정도 성숙한 회사 였던만큼, 조금 더 다른 결의 답을 했더라면 하는 아쉬움이 남기도 하는 것 같습니다.
만화 서비스업 ‘나’ 회사 면접
‘나’ 회사는 오프라인 만화점을 운영하면서, 모바일 어플리케이션으로 웹툰 시장의 파이를 조금 더 챙기려는 목표를 가지고 있는 스타트업 이었습니다. 저는 6개월 인턴 포지션을 응시하였습니다.
JD에서 요구한 자격요건
주요업무
- React.js, Next.js를 활용하여 웹을 개발하고 AWS 환경에 배포합니다.
- 그래픽 웹 서비스를 개발합니다.
- 최신 기술 동향을 파악하고 서비스에 적용합니다.
- 모바일 앱과 웹 간의 연계 기능 개발합니다.
- 글로벌 서비스를 위한 다양한 기능을 개발합니다.
자격요건
- 컴퓨터 공학 전공 지식
- 웹 생태계에 대한 이해
- 협업 및 소통 능력
- 지속적인 개선과 발전을 통해 성장하는 서비스 경험을 원하시는 분
- 새로운 도전에 대한 두려움이 없으신 분
면접 내용 요약
40분간 진행된 온라인 면접이었습니다만, 여러 특이사항들이 많았습니다. 시니어 개발자 한분과 1대1로 진행하였습니다.
일반적인 면접대로 자기소개를 시작으로 서류에 있는 사항들을 확인하는 간단한 질문들이 10분 정도까지 오갔지만, 저의 이전 이력의 길이를 집요하게 파고들며 추궁했습니다.
감정이 상할 수 있는 여러 멘트들이 저에게 왔지만, 감정선을 최대한 걷어내었을 때, 남은 정보들을 최대한 건조시킨 결과는 다음과 같습니다.
개발자로서 중요한 것은 무엇이라 생각하는가
코딩 능력은 지금도 충분하지만, 면접관 본인 과거의 모습이 겹쳐서 안타깝다는 이야기를 하면서, 제가 그것이 무엇이냐 하고 질문을 여러번 해도, ‘면접이기에, 그리고 본인이 말하면 의미가 없기에 말할 수 없다’ 라는 그런 선문답 같은 대답만 들었습니다.
이때를 기점으로, 단순히 기술 스펙 하나 더 아는 것에 초점을 두고, 기술 면접 질문 100선을 외우는 것으로만 생각했던 면접 준비를 조금 다른 각도에서 볼 수 있었던 것 같습니다.
그리고 다음날에 결과 통보를 받았습니다. ‘다음 기회에’를 말이죠.
외국계 BI 도메인 글로벌 스타트업 ‘다’ 면접
‘다’ 회사는 해외에 기반을 둔, 어느정도 성숙한 Google Analytics와 비교할 수 있는 BI도구를 만드는 스타트업 이었습니다. 저는 채용 연계형 인턴 포지션을 응시하였습니다.
JD에서 요구한 자격요건
- 알고리즘, 데이터 구조, OS, 데이터베이스 등 기본적인 전산 지식에 대한 이해를 갖추신 분
- React, Vue등 SPA 프레임워크 사용이 능숙하신 분
- TypeScript를 이용한 정적타입분석을 경험해보신 분
- 사용자 중심의 UI/UX에 대한 관심을 가지고 계신 분
- 영어로 업무 소통하는데 어려움이 없으신 분
면접 내용 요약
2시간 가량의 오프라인 면접이었습니다.
기술 면접(라이브 코테)
이 회사는 약간 특이하게 진행되었습니다. 2시간 가량의 면접 시간 중, 처음 1시간은 외국인 시니어 개발자 한분과 한국인 개발자분이 함께 들어오셔서 영어로 leetcode에 나올법한 알고리즘 테스트를 라이브로 진행했고, ‘왜 이런 코드를 작성했는지’, ‘시간 복잡도 등의 효율성은 어떤지’ 에 대한 질문들을 진행하였습니다. JS를 잘 쓰는지, 그리고 기초 알고리즘 이해도를 검증하는 간단한 문제였지만, 라이브로 영어로 인터뷰를 본다라는 압박감이 심해서 꽤나 긴장했습니다.
문자열 배열과 숫자 k를 입력받는 함수를 만들어라. k번째로 많이 나타나는 원소를 출력하여라.
정도의 수준이었습니다.
핏 면접
질문 목록을 정리하면 다음과 같습니다.
- 자기소개를 해달라
- 닉네임인 ‘카스테라’의 의미?
- 카스테라의 어떤점이 좋냐
- 좋아하는 브랜드가 있나?
- 이때까지 다녔던 회사들은 어떤 회사들이었나
- 근무시 팀의 규모는 어땠나?
- 업무진행방식, 함께 일했던 팀원들의 연차
- 근무하면서 좋았던 점, 어려웠던 점
- 시행착오와 당시의 대안에 대해서?
- 이전 회사의 퇴사 사유
- 스타트업에 지원한 이유
- 본인이 찾고 있는 회사는?
- 우리 ‘다’ 회사에 지원한 이유?
- 어떤것을 우리 회사에서 얻고 싶은지?
- 본인의 장단점
- 장기적/단기적 목표는?
이때까지만 해도 이전 회사의 퇴사 사유가 꽤나 변명조로 서술이 되었고, 그러한 지점이 이 면접에서의 아쉬웠던 점이 아닐까 합니다. 물론 라이브 코딩 테스트에서 긴장을 많이 하고, 영어도 잘 안나왔던 것도 주요한 요인이 되었을 지도 모르겠지만, 그것은 한낱 지원자인 제가 알 수 없는 것이겠지요.
법률 도메인의 유명한 스타트업 ‘라’ 회사 면접
‘라’ 회사는 법률쪽 도메인에서 꽤나 많이 알려진, ‘업계 1위’를 내새울 수 있는 꽤나 유명한 스타트업 이었습니다. 강남 테헤란로의 빌딩의 한 층을 ‘라’ 회사가 전부 쓰고 있을 만큼, 규모도 꽤나 컸고요. 제가 응시한 포지션은 1년 이상 주니어 FE 개발자 포지션이었습니다.
JD에서 요구한 자격요건
- 1년 이상의 상용 웹 프론트엔드 개발 경력을 보유하신 분
- React.js, Typescript를 활용한 프로젝트 경험이 있으신 분
- 읽기 쉬운 코드의 작성을 위해 노력하시는 분
- Git을 활용한 코드 관리에 익숙한 분
그리고 ‘라’ 회사에서 사용하는 기술스택과, 원하는 기술스택 또한 명시했었습니다.
사용 기술 스택
- React, Next.js
- Angular
- TypeScript
- Tailwindcss
- Vitest, Playwright, Storybook
- Npm, pnpm
- Github Actions
우대/희망 기술 스택
- React
- Angular
- TypeScript
- Tailwindcss
- Vitest, Playwright, Storybook
- Npm, pnpm
- Github Actions
면접 요약
FE팀의 리드 분과, 개발자 한분이 면접관으로 들어오셨습니다. 2시간 가량 진행되었고, 1시간 가량은 구현 중심의 라이브 코딩 테스트가 진행되었습니다.
라이브 코딩 테스트
Q1. (JS) 다음 콘솔로그의 순서를 예측하시오
function asyncOperation() {
setTimeout(() => {
console.log(1);
}, 0);
Promise.resolve().then(() => {
console.log(2);
});
}
// 정확히는 기억 안나지만... 대락 이런식이었음
console.log(3);
asyncOperation();
console.log(4);
왜 그렇게 되었느냐에 대해서 꼬리 질문을 하셨고, 마이크로 태스크 큐, 매크로 태스크 큐에 대한 설명등을 하였습니다.
Q2. (JS) 주어진 스켈레톤 코드를 활용해서 간단한 캐시를 구현하시오
요구사항
simpleCache라는 클래스를 준비. 키, 밸류 모두 string 타입.
get 메서드로 키에 해당하는 밸류 받기, set 메서드로 설정하기
=====
해당 문제는 어렵지 않게 풀 수 있었고, 문제 해결 후에 받은 꼬리질문은 다음과 같습니다.
- 클래스형 코드를 지원자들이 어려워 하는 경우가 많은데, 평소에 많이 해봤는지?
- try-catch로 감쌌는데 이유는?
- 구현을 할 때 map을 사용했는데 그 이유는?
- map이 일반 객체와는 다르게 가지고 있는 특징이나 장점?
- LRU를 알고 있는지? LRU 캐시도 구현할 수 있는지?
Q3. (TS) 타임워치 만들기
요구사항
createStopWatch
라는 함수가 이미 만들어져있다.
해당 함수에서 반환된 스톱워치 객체는 start, stop 메서드가 있다. start가 호출된 시점부터 경과된 시간을 반환하게 해라
====
해당 문제 역시 어렵지 않게 풀 수 있었고, 문제 해결 후 다음과 같은 꼬리질문들을 받았습니다.
- 이 문제에서 클로저 개념이 어떻게 사용되었는지?
- 이 스톱워치를 외부에 제공한다 하면 어떻게 타입을 정의할 수 있을까?
- type alias vs interface (비교, 어떤걸 주로 쓰는지 등)
Q4. 리액트 컴포넌트 버그 고치기
면접관 : Q4라는 컴포넌트가 있습니다. showModal이라는 내부 스테이트가 있고, 버튼이 하나 있습니다. 이 버튼을 클릭하면 openModal
이라는 함수를 호출해서, showModal을 true로 만든 다음에 제일 안쪽에 보이는 모달을 렌더링 하게 됩니다.
이 컴포넌트에서 하고 싶은 것은 모달이 렌더링 되었을 때, 이 안에 있는 인풋에다가 포커스를 주게 하고 싶은 것 입니다. 자동으로 그렇게 하기 위해서 인풋에 ref를 잡아서 ref.current.focus를 했어요, 그런데 문제가 있어서 포커스가 잡히고 있지 않습니다. 이것을 해결하는 것이 4번 문제입니다.
이 문제에 대해서는 setState의 비동기성, 그리고 useEffect에 대한 나름 심도있는 이야기들을 했습니다. 왜 이름이 useEffect인가 같은 이야기도 했네요.
구두 면접
이어진 구두 면접에서는 이력서 기반 면접이었습니다.
첫째로 본인이 찾는 회사는? 이라는 질문을 들었는데, 이 때 이전 회사를 나오게 된 연유에 대해서 너무 이른 타이밍에 이야기를 했던것이 약간 아쉬웠던 것 같습니다. 다만, ‘급발진’을 한 것 같다는 직접적인 피드백도 받았지만, 여기서 이전 회사에서의 개발 팀장의 당시의 특수성과, 인원이 적었다라는 이야기를 했을 때, 처음 ‘급발진’으로 당황하셨지만, 그래도 납득을 해주시는 그러한 모습을 보면서, 이후에서 이전 회사의 퇴사 사유 등에 조금 더 대응할 나름의 가이드라인을 세우게 된 것 같습니다.
두번째로는 컨퍼런스 등에서의 발표 중에서 기억에 남는 것에 대해서 이야기 해달라는 질문이었습니다. 제 블로그에서 최다 조회수를 기록했던 yarn berry 글에서 출발한 질문들이었고, 2년도 더 된 글이어서 제대로 답을 못했던 것이 좀 아쉬웠습니다. 다만, 이 질문 줄기들로, 이때까지의 블로그를 값지게 봐주는 사람들이 이렇게 존재하는구나 하는 나름의 위안도 얻을 수 있었습니다.
그 외에는 네부캠에 관한 저의 경험 질문들, 그리고 협업에서의 태도, 또 리더형/팔로우형 에 대한 질문도 있었습니다. 이에 관한 대답을 하면서, 이 회사의 기술 블로그에 ‘geek한 사람’을 추구한다라는 그 단서하나에 너무 매몰되어서, ‘코딩 잘하면 장땡 아니냐’ 같은 류의 답변을 했었는데, 채용 프로세스 라는 것이 개발자만 참가하는 것이 아닌, 다른 사람들도 함께 참여할 경우가 흔하다라는 것을 생각하면 꽤나 이런 부분이 아쉬운 결과를 낸 측면이 있지 않나 싶습니다.
이후로는 또 저의 블로그에서 출제한 문제인 JS딥다이브를 어떤것을 보고 학습을 하는지, 최근 리액트의 신기능에 대해서 알고 있는지, 리액트 쿼리 딥다이브 글을 썼는데, 실제 작동 원리에 대해서(useQuery에서 쿼리 키를 정의. 배열 형태인데, 서로 다른 훅에서 다른 참조값일텐데, 어떻게 비교?)같은 질문도 들었습니다.
회고
이 글에서 다루었던 면접 중에서는 가장 ‘좋은 면접’ 이 아니었을까 하는 생각이 들었습니다. 정답이 있는 문제들에 대해서 답을 잘 했고, 저의 브랜드 가치중에 key factor라고 생각했던 블로그에 대한 가치 검증도 받을 수 있었으니까요.
다만 타인과의 협업에 있어서의 모습을 조금 더 ‘일반적인’ 형태로 정제를 했다면 하는 아쉬움이 남습니다.
마치며
처음에는 이전 직장 퇴사 이후 면접 경험들을 모두 한 글에 녹여보자 하는 야심찬 목표를 가지고 글 작성을 시작하였으나, 지면이 길어지는 것을 보고 이쯤으로 줄일까 합니다. 이때까지가 9월 집중 면접 기간의 이전 기록이었고, 이때의 경험으로 9월 면접들을 볼 수 있지 않았나 합니다.
긴 회고글 읽으시느라 고생 많으셨고, 9월의 면접 이야기로 다시 찾아뵙겠습니다.