ㄱ에 남아버린 면접 질문들

minami·2022년 4월 28일
3

끄적끄적

목록 보기
2/2

1. 내가 아는 건 빙산의 일각

개발자 취준생이라면 누구나 준비해야만 하는 것이 바로 기술 면접이다. 보통 기술 면접은 코테/과제라는 산을 겨우 뛰어넘으면 마주치는 또 하나의 관문으로, 코테/과제도 이미 충분히 힘든데 기술 면접은 꼭 무슨 에베레스트산처럼 더 거대한 산처럼 느껴지기도 한다. 왜냐하면 기술 면접은 답이 없기 때문이다. 예상 질문을 검색해서 많이 나오는 질문들에 대한 답을 대비하며 공부를 해도 막상 면접에 가면 면접관으로 나오신 분들은 다들 무슨 족집게처럼 내가 모르는 부분에 대한 질문만 쏙쏙 골라서 한다. 그러면 어찌할 도리 없이 그 부분은 잘 모르겠다고 멋쩍게 웃어보일 수밖에 없다.

다행히 아는 것에 대한 질문이 나와도 안심하기엔 이르다. 정확하고 깔끔하게 답을 하는 경우에는 꼬리에 꼬리를 물고 더 깊이 들어가는 질문이 곧장 따라붙는다. 그러면 자신 있었던 눈빛이 자연히 사그러들면서 동공지진이 급격하게 일어난다. 그럴 때 면접관이 힌트를 주기도 하지만, 그것을 제대로 받아먹지 못할 만큼 당황하고 긴장하거나 정말 잘 모를 때엔 등에서 식은땀도 흐르는 것 같다. 그러면 또 다시 거기까지는 잘 모르겠다고 멋쩍게 웃어보일 수밖에.

취뽀를 위한 면접을 통과하기 위해서라도 각종 지식들을 섭렵하고자 분명 매일매일 부단히 노력하고 있는데 왜 항상 면접만 가면 죽을 쑬까?

그러다 보니 우리 개발자 취준생들은 항상 면접을 보고 나올 때마다 이런 질문을 하게 되는데, 사실 우리는 이미 그 답을 알고 있다. 개발자라면 이 정도는 알아야지! 하는 것들이 우리 입장에서는 그냥 너.무.너.무. 많기 때문이다. 그동안 공부한 얕은 지식을 더 깊이 파고드는(a.k.a. 딥-다이브 deep dive)도 당연히 필요하거니와 아직도 엄청나게 많은 잘 모르는 부분들에 대해서도 어쨌든 알아나가야만 한다. "신입 개발자한테는 그렇게 큰 기대를 하지 않는다."는 말이 사실인지 의심해볼 만큼 어쨌든 우리가 갖춰야 할 기본 소양이 그만큼 된다는데 갖추지 않고서는 살아남을 수가 없다.

어차피 개발자의 길로 들어선 이상 내가 코딩할 힘이 남아 있고 나를 써주는 곳이 있다면 공부는 떼려야 뗄 수 없다. 그러니 일단 좌절하지 않고 내가 아는 건 그저 빙산의 일각, 어쩌면 그것보다도 더 작다는 것을 겸손하게(가 아닌 그저 팩트) 인정하고 꾸준히 나아가야만 한다. 원래도 꾸준히 하는 사람이 오래 가서 살아남는 법이다.

2. 카시처럼 깊게 푸악킨 면접 질문들 (아마 계속 추가 될지도)

그래서 이 포스팅을 하는 이유는 면접 화이팅! 취뽀 화이팅!을 외치려고 하는 것이 아니라, 내 머릿속에 가시처럼 깊게 박혀버린 면접 질문을 정리해보고 싶어서이다. 취준 생활을 하면서 면접을 본 모든 회사에 대한 후기와 받은 질문 목록들을 따로 나만 볼 수 있는 곳에 잘 정리해두고 있는데 신기하게도 어떤 질문들은 시간이 지나도 문득 기억이 나곤 한다. 정말 내 머리를 아프게 할 정도로 어려웠던 질문, 그 회사에서만 받아봐서 신기한 질문, 분명 아는 것인데 면접 당시 너무 긴장하여 대답을 잘 못해서 아쉬움이 남는 질문 등등 사유는 여러 가지이다.

질문들 중에는 사실 아직까지도 답을 정확하게 몰라서 다시 똑같은 질문을 받아도 제대로 대답을 할 수 있을지 걱정되는 것들도 있다. 하지만 이렇게 공개해두면 또 다른 누군가에게도 도움이 될 것이고, 나도 도움받을 수 있지 않을까 하는 생각에 정리해본다.

❓ a태그 안에 button태그를 넣어서 만든 버튼의 문제점은?

답변 보기 웹 접근성이 떨어지는 문제가 발생할 수 있습니다. 특히 스크린 리더를 사용하는 경우에 사용자가 불편을 겪게 됩니다. button태그는 해당 페이지 내에서 일어나는 단순한 클릭 이벤트 역할을 하고, a태그는 페이지 간 이동 또는 페이지 내 이동의 역할을 하기 때문에 스크린 리더를 사용하는 사용자에게 혼동을 줄 수 있기 때문입니다.

❓ 이벤트 캡쳐링을 구현하려면 반드시 이벤트 버블링이 선행되어야 할까?

❓ setState를 동기적으로 작동하게 만드는 방법은?

답변 보기 useCallback이나 useEffect 안에서 setState를 사용하는 방법이 있습니다. 그리고 useRef를 이용해서 고정값을 사용하는 방법도 있습니다.

❓ 두 명의 플레이어가 대전게임을 한다. 한 명은 서울에 있고 다른 한 명은 뉴욕에 있는데 서버는 도쿄에 있다. 두 플레이어의 체력은 마지막 공격 한 번에 모두 닳아 없어질 수 있는 상황이다. 이때 두 플레이어가 동시에 서로에게 공격을 했을 때 어떤 결과가 일어날 수 있는가?

답변 보기 도쿄에 있는 서버와의 물리적 거리가 가까운 서울에 있는 플레이어가 공격을 받아 캐릭터 사망으로 졌다는 결과를 먼저 받게 되고, 조금 후에 뉴욕에 있는 플레이어도 같은 결과를 받을 것 같습니다. 두 플레이어가 동시에 보낸 요청을 받은 서버가 처리하고 응답을 보내줄 때에 물리적 거리로 인한 지연 시간이 발생할 수 있기 때문입니다. (아마도)

❓ 인코딩을 왜 할까?

답변 보기 컴퓨터는 사람이 사용하는 문자나 이미지, 동영상과 같은 것들을 사람처럼 그대로 인지하지 못합니다. 그래서 컴퓨터가 이해할 수 있도록 0과 1로 변환하는 과정이 필요하며, 그렇게 부호화해주는 것을 인코딩이라고 합니다. 인코딩을 할 때 대표적으로 널리 쓰이는 국제표준부호로 아스키(ASCII)코드가 있습니다. 그런데 기존의 아스키 코드로는 모든 국가의 문자나 기업이 필요로 하는 부분을 충족하지 못하기 때문에 확장 아스키 코드가 만들어졌습니다. 그중에서도 Rest API, JSON, XML과 같이 문자열 기반의 데이터 통신이 이루어질 때 많이 사용되는 것이 Base64입니다. Base64는 말 그대로 64진법을 뜻하며, 8비트의 이진 데이터를 공통 아스키 영역의 문자들만 사용한 문자열로 바꾸는 인코딩 방식입니다. Base64는 6비트 당 2비트의 오버헤드가 발생해서 기존 데이터보다 30% 이상 길어지고 거기에 인코딩 및 디코딩 로직이 추가되면 성능이 떨어진다는 단점이 있습니다. 하지만 JSON같은 문자열 기반 데이터로 통신하는 웹에서 이미지 파일 같은 것을 필요로 할 때 Base64로 인코딩하면 UTF-8과 호환 가능한 문자열 데이터로 만들어 사용할 수 있게 해줍니다. 그래서 Base64를 많이 사용하고 있습니다.

3. 후기...?

개발자 전향 이전에도 다른 분야에서 실무를 했기 때문에 이전에도 여러 회사에서 다양한 형태의 면접을 본 경험이 있다. 그래서 사실 면접이라는 게 기술, 인성, PT 등등 종류만 다를 뿐 너무 겁먹을 필요는 없다는 것을 안다. 하지만 항상 면접장에만 가면 어쩔 수 없이 작아지는 것 같다. 특히나 정말 간절히 가고 싶은 회사의 면접장에 가면 이상하게 너무 긴장돼서 손을 덜덜 떨기까지 한 적도 있다. 지금은 수 년간 면접 경험이 좀 쌓인 탓인지 그런 일이 거의 없지만 여전히 긴장하면 면접관의 말을 잠깐 놓친다거나 아는 것인데도 정확한 말이 떠오르지 않아 고민을 엄청한다거나 하는 일은 종종 있다.

그런데 최근에 내가 알게 된 것이 있다면, 면접관으로 나온 선배 개발자분들은 나의 취뽀를 도와주러 나온 사람이라는 것이다. 내가 분명 아는 것인데도 긴장으로 명확하게 설명을 못하거나 질문의 의도를 잘못 알아듣고 조금 다른 방향의 대답했다거나 할 때에 많은 면접관들이 내가 대답을 잘 할 수 있도록 유도해주거나 힌트를 주곤 했다. 그런 귀한 도움을 주셨는데도 내가 면접에 붙지 못하고 떨어진 건 찰떡같이 받아먹지 못해서가 분명하므로 불합격 통보에 억울함을 느꼈던 적은 한 번도 없었다. 면접장에 나를 불렀다는 것은 나라는 사람, 나라는 개발자에 대해 궁금하고 같이 일하기에 좋을지 알아보기 위해서이니까 당연히 대부분의 면접관은 지원자를 떨어뜨리기 위해서 그 자리에 나온 게 아니다. 물론 가끔 무례한 태도를 보여서 이럴 거면 면접에 나를 대체 왜 불렀나 의심되는 일이 정말 아주 가끔 발생하긴 한다.

지원자 입장에서도 이 회사에서 일하는 것이 어떨지 간을 볼 수 있는 자리가 바로 면접이다. 내가 부족한 부분이 당연히 있었겠지만 나 역시 지금껏 면접을 보고도 떨어진 회사에 아쉬움이 남은 적은 없었다. 나도 면접을 보면서 아, 이곳은 내 자리가 아니구나 하고 느꼈기 때문이다. 이건 정신 승리가 아니다. 면접은 나와 회사간의 소개팅과도 비슷한 자리이기 때문에 서로 안 맞을 수 있는 게 당연하다.

그러니 계속 공부하면서 앞으로 나아가야지. 정말 열심히 해야겠다. 나 정말 열심히 할 거야. 열심히 살아야지.

profile
함께 나아가는 개발자💪

0개의 댓글