산업기능요원 면접 후기 - stateful 서버, 좋은 개발자가 될 수 있는 환경

zunzero·2022년 9월 28일
1

개발 이모저모

목록 보기
6/7

오늘은 몇 시간 전 다녀온 면접에 대해서 이야기 해보려 한다.
생애 3번째로 보는 면접이었는데 굉장히 굉장히 좋은 기억이고, 기록해두고 싶은 얘기가 있어서 적어보려 한다.

그 간의 면접

이번에 본 면접을 제외하고 면접을 총 2번 봤다.
첫 번째 면접은 약 1년 반 전에, 2021년 3월 초쯤 여의도에 있는 한 회사였다.
당시 막 2학년을 마친 나는 CS 지식도, 웹 관련해서도 지식이 전무한 상태였고, 그냥 군문제가 빨리 해결하고 싶어서 잡코리아에서 대충 몇 곳을 지원하여 한 곳에서 면접을 보게 되었다.
조건은 단순히 C랑 Linux를 쓸 줄 알면 된다는 것이었는데, 뭣도 모르고 일단 그냥 지원해서 면접을 봤다.
그 땐 정말 무식해서 용감했던 그런 시기였기에 긴장도 안된 채로 면접을 봤다.
C언어로 짜여진 아주 간단한 함수의 답을 도출해내는 시험이 있었고, 그 뒤에 면접을 간단히 보게 되었다.
전공 관련해서는 대답할 수 있는 것들이 아예 없었고, 대충 인적사항에 대한 대답만 하다가 나온 기억이 있다.
그런데 면접에 붙어버려서 가지 않았다.
그렇게 무식했던 나를 받아주는 곳은,,, 조금 수상했다.
(물론 지금와서 보면 이것도 감지덕지였을 것이다.)

그리고 두 번째 면접은 바로 그저께 보게 되었다.
1시간 코딩테스트 이후 30분의 면접이 예정되어 있었는데, 면접에서 뭘 그다지 물어보지를 않았다.
체감상 5-10분 면접을 본 것 같은데, 기억에 남는 질문은 "보통 지원자분들이 코딩테스트 어디까지 풀었을 것 같아요?", "어떤 개발자가 되고 싶어요?" 등이었다.
기술적인 질문은 하나도 없었다.
면접관이 나한테 딱히 흥미가 있던 것 같지도 않았다.
물론 내 이력서나 코딩테스트 결과가 좋지 않았기 때문이었을 것이다.
어찌됐든 정말 기억에 남지 않는 면접이었고, 날 어차피 붙일 생각이라 질문이 없는건지 어차피 떨어뜨릴 생각이라 질문이 없는건지 긴가민가 한 채 귀가했다.
다음날인 어제 탈락 통보를 받게 되어 씁쓸했다.

왜 기억에 남는 면접이었나

해당 면접이 기억에 남는 건, 앞선 두 번의 면접과는 아주 달랐기 때문이다.
독립적으로 놓고봐도 이런 경험은 겪기 어려울 것 같다.
그렇기에 더욱 합격을 기대하기 어려워서 쓸쓸한 부분이 있다. ㅜㅜ 😭

우선 1시간동안 총 3문제의 코딩테스트를 보았는데, 1문제 밖에 풀지 못했다.
면접은 코딩테스트의 결과와 상관 없이 1시간동안 보았다.
첫 번째로 최대힙의 최악의 경우와 최적의 경우 insertion 연산의 시간복잡도를 물어보았다.
머리가 경직되어 제대로 답을 하지 못한 부분도 있지만, 충분히 생각하고 대답할 수 있도록 시간을 주셨다. (너무 기본적인거라 대답을 헷갈렸다는 것 자체가 미쓰...)
언어에 대한 질문이 오고가면서, 가장 익숙한 언어가 뭐냐 물으시기에 C라고 대답했다.
사실 익숙한 언어는 없다.
대부분 구글링을 통해 그 때 그 때 문법을 확인했기 때문에, 그냥 1학년 때 열심히 파고든 C라고 대답했다.
하지만 C에 관련해서 물어보신 것에 대해서 아무런 대답도 할 수 없었다...

중요한 건 다음 질문이다.
RESTful한 API에 관해 stateless한 서버를 왜 만들어야 하고, stateful한 서버는 어떤 문제가 있으며 stateful한 서버를 만든다는 건 어떤걸까 하는 질문이 꼬리에 꼬리를 물며 등장했다.
난 충분히 내가 RESTful API에 대해서, 그리고 stateless한 서버를 만들어야하는 이유에 대해서 안다고 생각했는데 그게 아니었다.
state라는 것 자체가 매우 추상적인 개념이었다.
내가 생각하는 state는 로그인 정보, 그 간의 사용자 정보가 담긴 로그 등을 의미할 수 있고 이를 서버에 저장하는 stateful한 서버를 만들게 되면 서버 증설 시 문제가 발생한다고 대답했다.
그럼 그건 왜 문제가 발생하나요? 라는 질문에 웬 이상한 뜬구름 잡는 소리만 몇분동안 해댔다.

온라인 쇼핑몰의 경우, 내가 장바구니에 담아둔 상품의 목록이 state가 될 수 있는 거다.
즉 state는 사용자의 데이터이다.
이를 서버에 저장하게 되면 서버의 메모리나 디스크에 저장하게 되는데, 만약 우리가 서버를 1대 증설했다고 가정해보자.
stateful한 서버라면 해당 요청에 대해 state를 갖고 있는 서버가 응답을 해야할 것이다.
하지만 서버 1대로 모든 state, 즉 데이터를 갖고 있던 상태에서 서버 1대를 증설하면, 해당 서버는 state(데이터)를 갖고 있지 않게 된다.
그렇다면 장바구니 목록을 갖고 있는 사용자가, 장바구니 접속 요청을 보내면 장바구니 목록이 있었다 없었다 하는 상태가 발생하게 되는 것이다.
왜냐하면 해당 유저의 state를 유지한 서버가 해당 요청에 응답할지는 미지수이기 때문이다.

그렇기에 우리는 state를 외부 데이터 베이스에 보관하는 것이다.
그래서 서버는 stateless하게 개발을 하게 되는 것이고.
이러한 대화 속에 정말 많이 배웠고, 정말 많이 부족하다는 것을 느꼈고, 지식을 이해한다는 것이 어느 정도 수준(깊이)에서 이뤄져야하는 것인지 깨우쳤다.

두 번째로는 면접관님께서 요즘 관심있는 오픈소스 프로젝트 같은 것들이 있는고 물어보셨다.
그래서 나는 오픈소스 프로젝트 같은 걸 직접 찾아보진 못했다고 얘기했다.
면접관님께서는 개발자로 나아갈 것이라면 목표를 설정하는 게 중요하다고 생각한다고 하셨다.
그리고 좋은 소스를 많이 보고, 좋은 개발자가 어떤 개발자인지 두 눈으로 확인하는 것이 중요하다고 말씀하셨다.
축구도 마찬가지지 않느냐, 나 혼자 축구하고 동네 친구들하고만 축구하면 우물 안 개구리가 되는 것이다.
나보다 잘하는 사람의 플레이를 보고, 메시의 플레이를 보면서 어떤 것이 뛰어난 선수인지 파악할 수 있는 것과 일맥상통하는 부분이다.
주변 동료들하고 스터디하고 코드리뷰하는 것들도 좋지만, 좋은 동료를 만나는 건 스스로가 컨트롤할 수 없는 일이다.
또한 앞서 말했듯, 우물 안 개구리가 될 수도 있다.
좋은 소스코드와 좋은 개발자를 많이 접하고 그들의 discussion을 보게 되면, 그 어떤 환경보다도 좋은 환경을 구축할 수 있다고 하셨다.
맞는 말인 것 같다.
굉장히 공감이 많이 갔다.

너무 좋은 면접 기회였다.
그만큼 나의 부족함이 드러나는 경험이었기에, 붙을 확률은 없지만 그래도 씁쓸하지는 않다.
아직 그런 좋은 환경에서 근무하기엔 내가 너무 부족한 것 같기 때문이다.

빨리 산업기능요원으로 채택되는 좋은 결과를 만나, 시간적 여유가 생기면 좋겠다.
지금 당장은 면접과 코딩테스트가 너무 급하다.
빨리 자리를 잡고 좋은 엔지니어로 성장하고 싶다.

profile
나만 읽을 수 있는 블로그

0개의 댓글