벌써 취업한지 3년이 됐구나.

세월 빠르다.

곧 결혼도 할 것 같다.

무섭다.

 

카페에서 무서워하던 와중에 취업당시 판교에서 n자형 건물에서 기술 면접 볼 때가 생각났다.

이 때 기술면접 진행 방식은 다음과 같았다.

여러 게임 개발 팀에서 면접보고 싶은 지원자를 선택했다.

그래서 스펙이 좋으신 분들은 여러번의 기술 면접을 볼 수 있었고

나같은 경우에는 오직 1팀만이 면접보고싶어했다.

그 때는 그것만으로 기적같았다.

요즘도 핫한 그 팀.

내가 게임에 빠지게 만들었던 그 게임의 팀.

니니지.

 

초등학교 6학년 때 사촌형으로부터 이 게임의 존재를 처음 알게되고

숱하게 3일 무료 계정을 이용해서 요정의 숲 노가다와 용의계곡 먹자를 하던 추억이 담긴 게임.

내게 사기란 사기는 다 경험하게 만들어 인간의 악독함을 알게해 준 게임.

초6때 '신선조천검'이란 아이디를 체렙까지 찍기위해 어머니에게 내기를 했다.

만약 반에서 1등하면 월정액 2만9천700원을 결제해딸라!

그리고 거짓말같이 중간고사? (초등학생도 있었나? 가물가물하다.)

에서 반에서 1등해버렸다.

이 때문에 어머니는 내가 천재인줄 알고 각종 학원에 등록하러 다니셨다.

나에게 그런 게임이다.

니니지는.

 

잡소리가 길었는데

아무튼 기술면접에 오게되니 신기했다.

만약 입사하게 된다면 연봉으로 반드시 집행검을 구하리라 생각하고

n자형 건물에 들어갔다.

 

진심 건물 너무 좋다.

두근두근했다.

대기시간동안 하필 환절기 시즌이라 환절기 알레르기와 긴장이 겹쳐서 콧물이 막 났는데

응급처방을 위해 화장실에서 열나게 팔굽혀펴기를 하다가 화장실에 들어오던 한 직원분과 마주친 기억은 넘 쪽팔리다.

아무튼 이런 우여곡절 끝에 드디어 기술면접 장소로 들어갔다.

 

진행을 다음과 같았다.

자기소개가 끝나자마자 손코딩을 시키셨다.

1부터 100까지 더하는 함수를 3가지 방식으로 작성하시오.

for문

while문

재귀적 방식

...

문제만 듣고 너무 쉬워서 코웃음치다가 콧물이 나올뻔했다.

조심하자.

 

그런데 손코딩은 항상 이상한 마력이있다.

마치 무대공포증에 걸린 사람이 무대에 세우게 만드는 그런 이상함.

 

for문과 while문을 지나 재귀적방식 손코딩을 하는데

재귀 어떻게 하는거였지?

막막하다.

주어진 시간은 5분이었는데 한 4분동안 ... 진심으로 뻘짓했다.

슬쩍 심사위원 분들 표정을 봤는데

코웃음치더니 그것도 못푸냐?

이런 표정.

그러다 행운의 신이 강림했다.

갑자기 재귀 방식에 대한 그간 공부했던 부분들이 머릿속에 파바밧 꽂히더니

순식간에 적어냈다.

다행이다.

심사위원분들의 표정도 덩달아 좋아지셨다.

 

이게 은근 웃긴게 나중에 면접을 마치고 대기실에 가보니

나보다 월등한 스펙을 가지셔서 3번의 기술 면접을 앞 두신 분도 이 문제를 풀지못해 속상해하셨다.

너무 쉬운 건데 긴장하셔서 머릿속에 아무 생각이 안들어 못푸셨다고 한다.

 

이해된다.

나도 그럴뻔했다.

 

다행히 손코딩을 풀고나니 이번에는 A4용지 한장을 주셨다.

영어로 작성된 한 API의 함수였는데

이를 읽고 어떤 기능의 함수인지 설명해보라하셨다.

 

다행히 나는 영어에 조금 자신이 있었다.

손코딩도 해결했다는 자신감 덕택에 무리없이 그 함수에 대해 설명했다.

물론 함정카드도 존재했다.

아주 교묘하게 처음은 읽기 쉽지만 중간에 똑바로 해석안하면 기능 자체가 달라지는 함수였다.

기억은 잘 안난다.

스트링관련된 함수였는데.

아마 영어 읽기 능력과 꼼꼼함을 보는 면접같았다.

 

위의 2번의 실기를 거치고 이제 본격적인 면접이 시작됐다.

여러 질문들.

그 중에서 이제 기억나는 것은 realloc()에 대한 위험성에 대한 질문과

대망의 이번 포스트를 위한 질문.

바로 메모리 처리에 대한 질문이다.

 

이 질문의 도입은 이러했다.

혹시 가비지콜렉션(Garbage Collection)의 원리에 대해서 아느냐.

 

당연히 몰랐다.

그래도 주워들은것은 있어서 고민했다.

아는척 말해볼까. 아니면 솔직하게 잘 모르고 주워들은 것만이라도 이야기해볼까.

 

당연히 나는 후자다.

아는척하면 끝맛이 좋지않았다. 항상.

 

가비지콜렉션의 참조와 사용 빈도에 따른 그리고 세대별로 나뉘어진 메모리 관리 부분에 대해서 설명했더니

다시 나에게 물어보셨다.

가비지콜렉션이 장단점에 대해서.

 

이건 그래도 말하기 편했다.

속도와 안정성의 반비례적인 문제.

JAVA와 C#은 가비지콜렉션을 통해서 메모리 할당과 해제에 대해서 신경쓸 필요가 없다.

(사실 경험해보니 조금 필요하다. 특히 해제 시점이 명확하지 않아서 더 어려웠다.)

대신 이를 위해서 두 언어 모두 가상머신이라는 개념이 존재하므로 당연히 속도는 느리다.

이렇게 설명했던 것 같다.

 

여기까지 왔을 때 나는 이번 면접에 대해서 합격할 자신이 생겼다.

슬슬 면접 시간도 다되가는것 같고 분위기가 굉장히 모닥불 앞에 있는 것처럼 훈훈했다.

 

그러던 와중에 들은 질문.

그럼 C++에는 이렇게 알아서 메모리 관리를 해주는 가비지콜렉션이 없는데

안전하게 메모리를 해제하려면 어떻게 해야할까요?

 

지금보면 이 기술면접 질문중에서 가장 쉽다.

왜냐하면 이미 스마트포인터의 존재를 알기 때문이다.

 

그런데 이 때에는 나는 스마트포인터의 존재를 몰랐다.

잘 나가던 면접이 틀어졌다.

한 호흡에 메모리 할당과 해제를 해야한다.

독립성을 잃으면 안된다.

한참을 헛소리했다.

 

지금 생각하면 이 질문은 스마트포인터의 존재를 아냐고 물어본 질문이었다.

그런데 모르니까 당연히 헛소리를 할 수 밖에 없다.

그렇게 내 기술면접 마지막 질문이 끝났다.

관심있으면 한 번 이 부분에 대해서 찾아보세요. 라는 말과 함께.

 

이 말은 날 굉장히 심숭생숭하게 만들었다.

합격인가? 불합격인가? 아니면 그냥 조언?

떨렸다.

스마트포인터는 C++ 개발자라면 반드시 알아야한다.

스택 오버플로우에서는 RAII라는 개념을 통해 이미 이 C++ 메모리 관리에 대한 논의는 얼추 정리된 상태다.

다음에는 이 부분에 대해서 스택 오버플로우 번역 포스트를 올려야겠다.

 

그래서 결과는...

 

두구두구두구

 

합격!

 

눈물이 터졌다.

그리고 간 최종 면접.

그 때에 나는 깝치지 말았어야 했다.

신입 지원자였어야 했는데 게임 유저가 되버렸다.

 

그 때 최종면접에서 마지막으로 하고싶은 말이 있냐고 물었을 때

당시의 게임 현질 문화에 대해서 너무 과도하다

라고 말하지않았다면 결과가 달라졌을까?

 

물론 변명이다.

그냥 실력부족.

 

지금 니니지m을 보면 회사 입장에서는 분명 당시 정책의 성공이라고 말할 수 있겠다.

다른 게임 업체들이 휘청거릴 때 사상 최고의 주가를 경신중이다.

회사 입장에서는 어마어마한 성공이겠지만

게임 유저로서는 솔직히 이 문화가 아쉽다.

 

그래도 잘 나가고있으니 좋다.

내가 그렇게 힘들었던 시절에 내게 희망과 기회를 줬던 곳이었으니까.

끝.

 

+ Recent posts