.................................
최근 2번의 라이브 코테를 경험했고, 그 후기를 간단하게 작성해 보려고 한다. 사실 공개적인 장소에 적기 창피할 정도로 처참하게 못 봤지만 부끄러움을 아는 사람만이 발전할 수 있다고 생각해서 나 스스로를 여기에 박제하려고 한다(ㅋㅋ)
일단 나는 스타트업 취업을 꿈꾸는 평범한 프론트엔드 개발자다. 사실 슬슬 취준을 해야 할 나이지만 최근에 가치관이 많이 바뀌어서 나이와 취업의 관계성에 대해 회의감을 느끼고 있기도 했고, 아직은 하고 싶은 것도 해야 할 것도 너무 많아서 적극적인 구직 상태는 아니었다. 취준을 시작하면 진짜 취준밖에 못 하니까... 그래서 이번에 본 2회의 코테 중 하나는 8월에 지원했던 곳이었고, 하나는 채용 플랫폼에 올려둔 이력서를 보고 제안이 온 거였다. 뜻밖의 기회였고 적극적인 구직 상태도 아니었지만 만약에 합격하게 된다면 일을 해 보고는 싶었다. 여기서부터 우물 안 개구리의 무한 오만함이 시작된다...
첫 번째 기업은 8월 말에 이력서를 넣었는데 10월 초에 연락이 왔다. 8월 말은 스타트업 취업에 한창 관심이 생겨서 원티드로 한 6~7곳 정도를 아무렇게나 찔러보던 시기였다(ㅋㅋ) 이렇게까지 연락이 안 오는 걸 보면 당연히 떨어졌겠거니 하고 까먹고 있었는데 이번에 연락이 온 걸 보면 아마 중간에 누군가가 퇴사를 한 게 아닌가... 싶다. 근데 퇴사 사유야 뭐 다양하고 그런 건 큰 문제가 되지 않는다고 생각했다.
올해 처음 생긴 스타트업이었지만 포트폴리오를 봤을 때 체계를 잡아가는 과정 중에 있다는 생각이 들었다. 그리고 진짜 갓 생긴 스타트업 환경을 경험해 보고 싶다는 생각도 들었고, 회사 소개 문구도 내 마음을 끌었던 것 같다. 면접 날짜도 친절하게 조정해 주시고 회사도 마음에 들어서 메일로 연락이 온 바로 다음주에 면접을 보러 가기로 했다. 사실 지금 당장 취업에 목매고 있지 않아서 이때까지만 해도 엄청 큰 긴장은 되지 않았다(안전불감증)
설상가상으로 면접 전날까지 공모전 마감이 있어서 주말동안 하라는 면접 준비는 안 하고 30 커밋을 찍어내며 코딩을 했다. 월요일 오전 면접이었는데 일요일 밤이 되어서야 면접 준비를 할 수 있게 되었고 결국 제대로 준비한 건 자기소개와 지원동기 정도였다.
뭔 자신감인지 면접 당일 아침이 되어서까지 긴장이 되지 않았고 지하철을 탈 때까지만 해도 별 생각이 없었다. 그냥 속으로 자기소개를 몇 번 외우다가 지하철에서 잠들었고 정신을 차려보니 면접 보는 회사 앞이었던 것 같다. 회사는 건물 5층이었고 아무 생각 없이 나는 엘리베이터에 탔다.
근데...
갑자기 초 긴장이 되기 시작했다(ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)
아무리 '붙으면 좋은 거고 안 붙으면 경험이었던 거야~!' 마인드로 왔다 쳐도 최소한 쪽은 안 당해야 하지 않나? 너무 준비 안 했나? 하는 걱정이 갑자기 들었다. 체감상 5층까지는 0.05초만에 도착했고 나는 초긴장 상태가 되어 열린 문으로 터덜터덜 내렸다. 차분하게 다시 생각해 보니 긴장된다고 면접을 안 갈 수도 없고 이미 돌아올 수 없는 강을 건넜다는 생각이 들었다. 그래서 그냥 헬쓱한 얼굴로 메일에 나와 있었던 채용 담당자분의 번호로 전화를 걸었고 그 분을 따라 면접실로 들어갔다.
면접은 2:1로 진행되었고 쾌적한 방이었지만 면접관분들과 나 사이의 거리가 너무 가깝다는 생각이 들었다(ㅋㅋㅋㅋㅋㅋㅋㅋ) 흡사 위 사진과 같은 느낌이었다... 나만의 면접 꿀팁이 안경을 안 쓰고 가서 면접관분들을 흐리게 보기(긴장 완화)였는데 면접관분들과 거리가 너무 가까워서 아무런 도움이 되지 않았다(ㅋㅋㅋㅋ) 아무튼 면접관분들 중 한 분은 대표님이셨고 한 분은 아마도 프론트엔드 개발 총괄이신 것 같았다. 엄청나게 편안한 분위기는 아니었지만 그래도 두 분 다 친절하셨고 나를 존중해주신다는 느낌을 받았다.
그리고 본격적인 면접이 시작되었다... 간단히 자기소개와 지원동기에 대한 질문을 받았고, 유일하게 준비했던 면접 질문 2개가 이거였기 때문에 떨지 않고 편안하게 대답했다. 근데 지원동기 마지막 문장을 이야기하고 갑자기 이런 생각이 들었다...
'준비한 레파토리가 면접 시작 5분만에 다 사라졌는데 이제부터 55분동안 프리스타일로 랩을 해야 하는 건가?'
그래도 괜찮았다... 왜냐면 원래 무지한 사람은 공포를 못 느끼니까(ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)
여기서부터 무한 기술 쨉이 날아왔다.
포트폴리오 위주 면접일 거라고 예상했는데 면접은 정말 철저히 기술 면접이었다. 기술 면접은 첫 질문부터 머리가 어지러웠다.
👤 : "처음은 간단하게 JavaScript 문법 문제를 하나 풀어보는 것으로 시작해 볼게요."
면접관분은 이렇게 말씀하시더니 나에게 n지선다 코드 문제가 띄워져 있는 태블릿을 건네주셨다. 머리가 어질어질했다... 끽해야 "useState와 useRef의 차이점은?" 같은 질문이 나올 거라고 생각했는데 갑자기 문제를 풀어보라고 하셔서 부담과 긴장이 무한대로 올라갔다. 문제는 정확히 말할 수는 없지만 그냥 JavaScript 문법에 대한 문제였고, 예전에 공부해 본 적은 있지만 자주 쓰는 개념은 아니라 완전히 까먹은 개념에 대한 내용이었다(ㅋㅋㅋㅋㅋ)
그래서 뭔가 이거인 것 같은데...?인 걸로 답을 말했고, 면접관분은 당연히 내게 왜 그렇게 생각했는지 설명을 해 보라고 하셨고, 나는 당연히 대답을 잘 못했다. 면접관분은 왜 그게 정답이 아닌지에 대해 친절히 설명해주셨다(ㅋㅋㅋㅋㅋㅋㅋㅋ)
아무튼 하나의 고비를 넘겼고 그 뒤로는 내가 생각하는 평범한 기술 면접이 시작되었다. 최근에는 하지 않았지만 2023년 초에 조금 이르게 기술 면접을 공부해 본 경험이 었었고, 그때 했던 내용과 지금까지 쌓인 지식을 기반으로 차근차근 대답을 해나갔다(사실 그렇게 잘하진 못했다...) 근데 형식적인 답변을 했을 뿐, 스스로도 지혜롭고 우아한 대답을 하지 못하고 있다고 느껴졌다. 그래도 그렇게 점점 긴장을 풀어가고 있었을 때쯤 또 한번 쨉이 날아왔다.
👤 : "#($*@&!~"라는 개념에 대해 알고 계시나요?
🦝 : 제대로 활용해 본 적은 없지만 대충 이러저러한 거라고 알고 있습니다.
👤 : 네, 맞습니다. 그럼 지금부터 이걸 라이브 코딩으로 구현해 보겠습니다.
...???
면접관분은 갑자기 사용하고 계시던 노트북을 커다란 TV에 연결하시더니 codesandbox를 켜서 내게 건네주셨다.
내용은 말씀해주신 개념을 활용해서 리액트 커스텀 훅을 작성하는 거였고, 페어 프로그래밍 정도로 생각하고 편하게 임하면 된다고 친절하게 말씀해주셨다. 근데... 면접관분들이 이 커다란 TV로 내가 한 줄 한 줄 코드를 써내려가는 과정을 다 보신다고 생각하니까 진짜 너무너무 긴장되고 자신이 없었다. 라이브 코딩은 어찌어찌 흘러갔다... 너무 긴장해서 기억도 흐릿하다(ㅋㅋㅋㅋ) 코드를 짜긴 짰고 결과물도 잘 나왔지만 면접관분이 힌트를 많이 주시기도 했고 중간중간 틀리기도 해서 솔직히 매끄럽게 잘 짰다고 자신 있게 말할 수는 없었다.
사실 여기까지만 해도 알 수 있었다, 나는 떨어졌다는 걸...
이 뒤로는 기술+포트폴리오 면접이 이어졌고 성실히 답변했지만 어차피 이미 떨어졌다는 걸 직감할 수 있었다. 그래도 면접관분들은 마지막까지 나를 존중해주신다는 느낌을 받았고, 이 자리에 있는 모두가 내가 떨어졌다는 걸 알고 있었다고 생각하지만 내색하지 않으신 채 대화를 나눠주셔서 정말 감사했다.
인생 첫 라이브 코딩은 그렇게 끝이 났다... 아쉽지만 이미 지나가버린 일이고 그 주에 라이브 코테가 하나 더 예정되어 있어서 슬퍼할 수 있는 기간이 그렇게 길지 않았다.
두 번째 기업은 채용 플랫폼에 올려놨던 이력서를 보고 커피챗 제안이 왔었다. 나한테는 조금 생소한 외국계 기업이었는데, 정보를 찾아보니까 도메인도 마음에 들고 비전이 좋아 보여서 관심이 생겼다. 무엇보다 CTO님이 마이크로 소프트에서 근무를 하셨다는 정보를 보고 와... 싶어서 냉큼 제안을 받아들였다.
커피챗의 시작은 나쁘지 않았다. 대표님과 CTO님이 외국에 계셔서 화상으로 진행했는데 두 분 다 친절하셨고 유익한 시간이었다. 구글미트에 들어가고 나서야 이게 단순 커피챗이 아닌 1차 면접... 같은 느낌이라는 걸 알게 되었지만 최대한 떨지 않고 차분하게 내 생각을 전달하려고 노력했다. 기술 면접은 아니었고 내 경험과 가치관에 관련된 면접이었다고 생각한다. 주로 대표님과 이야기를 많이 나누었고 가치관에 대한 이야기를 할 때마다 대표님께서 '맞죠, 맞죠', '맞는 말이에요, 정말' 이런 리액션을 많이 해 주셔서 더 자신감을 가지고 이야기할 수 있었다. 모든 질문에 순조롭게 잘 대답하고 있다고 생각했는데 대표님께서 내 이력서를 보고 하신 어느 질문에 그만 말문이 턱 막혀버렸다.
👤 : 기술적으로 가장 도전했던 경험을 알려주세요!
이 질문을 듣고 순간 왜인지 머리가 하얘졌다. 내가 개발했던 기능들을 열심히 쥐어짜내서 떠올려 봤고, 내가 해결했던 여러 오류들도 떠올려 봤지만 왠지 섣불리 대답할 수 없었다. 그동안 개발하다가 막힌 경험도 많고, 오류를 해결한 경험도 많지만, 가장 도전했던 경험이라고 물으니 딱 하나 짚어서 말하기가 어려웠다.
내가 해결했던 문제 중에 해결에 성공한 건 왠지 그렇게까지 기술적으로 어려웠던 문제는 아니었던 것 같고, '도전'이라고 부를 수 있을 만큼 엄청 난이도가 있었던 건 결국 해결하지 못했었다. 조금 더 풀어서 설명하자면 해결된 오류는 '내가 해결한 걸 보면 그렇게까지 어려운 건 아니었던 것 같기도...' 하는 생각이 들고, 진짜 풀고 싶었서 집착했던 문제는 결국 해결을 못했던 것 같다. 그래서 기술적으로 가장 도전한 경험...이라고 물었을 때 한 가지를 대답하지 못 했다. 내가 대답을 못 하고 있자 CTO님은...
"이 녀석... 거품인 거 같은데?" 하는 시선으로 나를 바라보시는 듯했다.
(실제로는 내 피해 망상이고 정말 정중하고 친절하신 분들이었다.)
아무리 다른 질문을 대답을 잘 했어도 개발자로서 채용 커피챗을 하고 있는 건데 이런 질문에 대답을 하지 못해서는 안 된다는 생각이 들었다. 그래서 커피챗이 끝나고 큰 현타를 맞았다. "내가 기술적으로 진짜 도전해 보았던 문제 같은 건 사실 없는 거 아니야?" 이런 생각이 나를 괴롭혔고 그 다음 전형에 대한 메일은 오지 않겠구나 싶었다.
연락이 오지 않았다고 생각했는데 알고 보니 커피챗이 끝난 직후에 라이브 코테 메일을 보내주셨고 스팸 메일로 분류가 되어 나한테 전달이 안 된 거였다ㅠㅠ 다행히 채용 플랫폼 메시지로 연락을 한 번 더 보내주셔서 메일을 주셨다는 사실을 알 수 있게 되었다. 무사히 라이브 코테 시간을 잡을 수 있었고, 16시간 시차가 있는 외국 기업이라 10/19 아침 6시 30분에 라이브 코테가 잡히게 되었다(ㅋㅋㅋㅋ)
이때는 정말 긴장되었다... 왜냐면 이 기업에 가고 싶다는 마음이 꽤 컸기 때문이다. 하지만 라이브 코테는 어떤 문제가 나올지 대비도 어렵고 진행 경험도 많지 않아서 사실 붙을 확률이 희박할 거라고 예상하긴 했다. 그래도 붙진 않더라도 잘 보고 싶다는 마음은 있어서 주변 사람들에게 라이브 코테는 보통 어떻게 나오는지, 어떤 걸 중요시하는지 정도는 물어보고 다녔던 것 같다.
라이브 코테 준비도 사실 많이 하지는 못 했다... 프로그래머스에 '과제 테스트' 라는 카테고리가 있어서 거기에서 React, JavaScript 테스트를 2개 정도 봐 보긴 했지만 이걸로 라이브 코테 경우의 수를 충분히 대비하긴 어려울 것 같다는 생각이 들었다. 그래도 웹 에디터 환경에 적응하는 데는 어느 정도 도움이 된 것 같다. 그리고 평일에 다른 할 일이 많아서 라이브 코테는 여기서 더 준비하진 못 했다. 관련 글을 찾아 보면서 어떻게 나오는지 정도 예측한 게 다였다. 그리고 대망의 라이브 코테 날이 다가왔다.
그렇다. 그게 바로 오늘 아침 6시 반이었다.
온라인 라이브 코테를 위해 구글 미트에 접속 대기를 걸어놓고 시간이 다가오길 기다리는데 별안간 날벌레 한 마리가 날아와 내 책상 위에 머리를 박고 죽었다... 마치 내 망한 미래를 예고하듯이...
결과는 참패였다...
라이브 코테를 대비했던 게 거의 의미가 없었는데, 이유는 실제 이 기업의 테스트 데모 사이트에서 활용하고 변형하는 식의 과제였기 때문이다. 문제는 2문제였고, 첫 번째 문제는 쉬운 문제였는데 못 풀었고(ㅠㅠ) 두 번째 문제는 한 번도 짜 본 적 없는 구조를 요구하는 문제여서 못 풀었다............. 이것 역시 말할 것도 없이 탈락이었다. 못 풀어도 내가 코드를 어떤 식으로 작성해 나가는지 정도라도 보여드려야 했는데 그것조차 잘 하지 못 했다고 생각한다.
정말 감자가 된 기분이었다. 그래도 그 짧은 시간에 정말 많은 걸 배운 코테였다. 라이브 코테가 이런 식으로도 나올 수 있구나, 컴포넌트를 이런 구조로도 짤 수 있구나 하는 걸 1시간만에 배웠다.
대표님께서는 새벽이라 많이 힘드셨을 것 같다고 나를 다독여주시고 인사를 나눈 다음 화상통화를 종료하셨다 ^_ㅠ 이런 테스트를 보려고 나에게 포지션 제안을 주신 게 아닐 텐데 하는 죄송한 마음이 들었다. 나는 시간을 낭비하는 느낌을 굉장히 싫어하는 사람인데 그런 느낌을 다른 사람한테 느끼게 했다는 사실에 자괴감이 들었던 것 같다. 아무튼 종료되고 나서 긴장이 풀려서 졸음이 몰려왔고 좀 쉬다 밥먹고 자고... 지금 일어나서 이 글을 쓰고 있다. 이제 2번의 라이브 코테로 내가 배운 점에 대해 적고 글을 마무리하려고 한다.
알고는 있었지만 기본기가 부족하다는 느낌을 받았다. 요구 사항만 구현할 줄 알고 리액트나 자바스크립트가 기본적으로 어떻게 동작하는지에 대한 지식이 많이 부족하다는 생각이 들었다. 맨날 하던 것만 할 줄 알지 새로운 관점이나 응용을 만들어내는 능력도 아직은 많이 부족한 것 같다. 이건 많은 경험을 쌓고 시야를 넓히는 연습을 해야 성장할 수 있을 것 같다.
💡 일단 라이브 코테에서 털린 개념들을 블로그에 쭉 정리하고, 그 다음부터는 공식 문서나 책으로 차근차근 기본 개념을 다시 공부해 보자 😃 시간이 충분하다면 각 개념을 활용하는 예제 프로젝트도 구현해 보면 좋을 것 같다
🔥 털린 개념은 대충 다음과 같다
- JavaScript this 바인딩
- 디바운스 & 쓰로틀링
- 리액트 서버 컴포넌트 (Next.js를 사용하는 이유)
- CSS flex-wrap
- 이벤트 루프와 태스크 큐, 마이크로 태스크 큐
- React 재귀 컴포넌트(Recursive Component)
라이브 코테는 사실 평소 실력대로 보면 되지 않을까? 라고 생각했는데 이번에 2번을 치르고 연습이 필요하다고 느꼈다(ㅋㅋㅋ) 일단 하다 못해 웹 에디터 환경에 적응하는 연습이라도 하고 가면 좋을 것 같다. VScode와 비슷한 환경에서 진행되긴 하지만 나 같은 경우에는 내 로컬에서 진행할 때는 로딩도 오래 걸리고 버벅임이 있어서 약간 멘붕에 빠졌던 것 같다. 하지만 그런 환경을 로컬에서 미리 경험하고 간다면 먼저 대비하거나 하다 못해 당황하지는 않을 수 있을 것 같다.
진짜 필요하다고 생각하는 연습은 요구사항을 구현하는 연습이다. 보통 기능 명세를 주고 구현하는 형태가 많이 나오는 것 같은데 나 같은 경우에는 둘 다 그런 스타일의 코테는 아니었다. 그렇기 때문에 단순히 스펙을 보고 0부터 구현하는 연습뿐만 아니라 기존 코드를 개선하거나 변경하는 연습도 해 보면 좋을 것 같다는 생각이 들었다. 연습으로 라이브 코테에 나올 수 있는 경우의 수를 모두 대비할 수는 없겠지만, 적어도 감을 잡는 정도는 되지 않을까 싶다!
💡 아래로는 내가 찾은 React 라이브 코테 연습 사이트들이다. 시간이 날 때마다 틈틈이 연습해 보면 좋을 것 같다! (본인 컴퓨터에 깔린 IDE가 아닌 codesandbox에서 해 보는 걸 추천한다.)
2번밖에 해 보진 않았지만 내가 한 라이브 코테에서는 2번 다 질문이나 상의할 게 있다면 적극적으로 말해달라고 하셨다. 나 같은 경우에는 너무 긴장하고 여쭤볼 게 생겨도 바보 같은 질문인 것 같아서 입을 열지 못 했다. 근데 지금 생각해 보면 바보 같은 질문을 하고 문제를 푸는 것보다 질문을 하지 않고 문제를 풀지 못하는 편이 더 안 좋은 것 같다(ㅋㅋ) 문제를 풀지 않고 가만히 있거나 계속 생각하고만 있으면 면접관분은 내가 무엇 때문에 고민하고 시간을 지체하는지 알 수 없다. 하지만 이야기를 한다면 단순한 문제에서 막힌 게 아니라 좀 더 넓은 관점에서 막혔다든지, 그래도 문제를 풀어보려는 의지가 있다든지 하는 생각 정도는 해 주셨을 것 같다.
2번째 라이브 코테는 검색 허용이었는데 왠지 이것도 바보 같은 검색을 하게 될 것 같아서 하지 못 했다... 근데 지금 생각해 보면 왜 그랬을까 싶다(ㅠㅠ) 챗지피티를 쓰려던 것도 아니고 그냥 구글링이었는데ㅠㅠㅋㅋㅋㅋ 검색이나 질문을 했다면 문제를 못 풀었더라도 보여드릴 수 있는 게 많았을 것 같은데, 나 혼자 고민만 하다가 시간이 끝나버린 것 같아 아쉬웠다. 짧은 시간 안에 혼자 모든 것을 생각해내려고 하지 말고, 하다 못해 힌트를 주실 수 있냐는 질문이라도 해 보자!(ㅋㅋ)
프로젝트를 하다 보면 늘 시간에 쫓겨 예전에 해 봤던 방식, 가장 쉬운 방식을 사용하려고 했던 것 같다. 그런 방식들이 프로젝트 마감 기한을 지키는 데는 도움이 됐을지도 모르겠지만, 나 자신의 성장에 도움이 됐냐고 묻는다면 그렇다고 대답하지 못하겠다. 프론트엔드는 새롭게 습득해야 하는 기술이 너무... 많고 항상 새로운 패러다임이 등장해서 그것들에 적응하는 데 급급했고, 그래서 기존 기술을 제대로 사용하려는 노력을 상대적으로 등한시했던 것 같다. 여러 기술을 넓게 쓰는 사람을 선호하는 곳도 물론 있겠지만, 나는 하나의 기술을 깊게 이해하는 사람이 비슷한 다른 기술을 접했을 때 더 빨리 이해하고 습득하는 경향이 있다고 생각하고, 다른 많은 기업들도 이런 생각을 갖고 있는 것 같다.
💡 프로젝트를 할 때 같은 라이브러리, 같은 프레임워크라도 새로운 관점, 새로운 방식을 많이 시도해 보자! 항상 '이렇게밖에 구현할 수 없을까?' 하고 끊임없이 의심하고 개선해 보려는 시도를 하면 좋을 것 같다.
생각이 많아지고 있는 요즈음이다. 그래도 나한테 부족한 점이 무엇인지 끊임없이 찾고 그걸 고쳐나가는 과정은 언제나 보람이 느껴지는 것 같다. 2년을 공부했어도 아직도 이렇게 부족하다. 내가 앞으로 5년, 10년 공부한들 완벽한 사람이 될 수 있을까? 이상하게 허무감보다는 기대감이 더 느껴지는 것 같다. 내 멘탈도 많이 성장했나 보다. 예전에는 완벽주의가 너무 심해서 상담을 받아야 하는 정도였는데 요즘은 영원히 완벽한 사람이 될 수 없다는 생각이 오히려 위로가 되어주는 것 같다. 순간순간에 최선을 다하게 해 주니까! 최근에 쓰라린 경험들을 많이 했지만 여기에 머무르기보다는 앞으로 어떤 일을 할 수 있을지를 생각하고 실천하는 사람이 되자 ㅎㅎ
긴 글 읽어주셔서 감사합니다 🦝
글이 너무 재밌습니다...
바로 회고하는 것 너무 좋은 것 같아요 고생하셨습니다! 👍🏻