0. 시작하기 전에

필자는 흔히 말하는 네카라쿠배에 취업한지 2년좀 안됐고, 최근 3달전에 취업한 주변인까지 보면서 최근 취업시장이 어떻게 돌아가는지에 대한 흐름 정도는 알고 있다. 네카라쿠배 이하 서비스 IT 기업 취업한 친구들 10명가까이보면서 느낀점들, 그리고 내가 취업할때 당시에 몰랐던 부분들 관련해서 대충 싸질러본다. 말했듯 10명 가까이와 대화하면서 어느정도 공감하는 부분들에 대해서 추려서 이야기하는거라 객관성이 일부 보장될거라고 생각하는데, 우물안 개구리처럼 우리끼리만 옳다구나 하는 이야기일수도 있으니 어느정도 걸러듣기를 바람.(=반박시 니말이 맞음)


본 글에서 다루는 내용은 "어디까지 공부해야 취업할만한가?"에 대해서임.(!= 무슨 책을 어디까지 봐라)


1. 코테

코테는 카카오 공채처럼 알고리즘 빡세게 보는 곳 아니면 사실상 허수 거르기다. 본인은 백준 기준으로 골드1정도까지 무지성으로 풀었는데, 내가 빡대가리인걸 감안하면 너희같이 머리 좋은 친구들은 골드3정도만 되어도 무난하게 풀 줄 알면 앵간한 기업은 될거라고 생각한다.(단 카카오 공채는 제외. 여기는 알고리즘빠들만 있는것같음)


2. CS

CS 는 파고들면 한도끝도 없지만, 신입 기준으로는 대충 "이런식으로 흘러간다"라는 개념을 이해할 정도면 됨. 근데 이 말이 역설적이기도 한게, 이 개념을 이해한다는게 사실 쉬운일이 아님. 실무에서 CS 기초지식을 중요하게 여기는 이유가 뭐냐면, 사실 기술이란 것들이 다 원리 자체는 다 거기서 거기이기 때문. 예를 하나 들어보면, 니가 카프카를 새로 배운다고 가정해보자. 이벤트라는 개념에 대해서 제대로 알고, 언제 어떻게 이벤트를 쓰는게 좋은것인지에 대해서 제대로 알고있다면 프로듀서/컨슈머의 동작 원리를 배울 때 전혀 어려움이 없고, 오히려 "아 이 개념을 카프카에선 이런식으로 풀어내는구나" 라고 고개를 끄덕이게 된다. 혹은, 니가 네트워크 기초지식이 빠삭하다면 config에 설정하는 수많은 timeout 옵션들에 대해서 이게 언제 어떻게 쓰이는건지 당연하게 알 수 있다.


그럼 누군가는 "아니 내가 그 개념을 이해했는지 어떻게 암?" 라고 할 수 있는데, 이에 대한 답변은 사실 주변인들간에서도 갈렸긴 하지만 내 개인적인 답변으로는 니가 이해가 번뜩이는 순간을 겪었는가 아닌가에 따라 갈린다고 본다. 무슨말이냐면, 니가 예를들어 db 격리레벨에 대해서 공부하다가, 처음에는 무슨말인지 이해도 안되고 이것저것 실험해봐도 긴가민가했는데, 시간을 꼬라박다보면 어느 순간 생각이 정리되고 "내가 예전에는 이걸 왜 도대체 이해 못했지?" 라는 순간이 그 순간이다. 나와 비슷한 경험을 한 지인 하나는 다른 표현으로 "모든 원리가 다 거기서 거기인게 느껴진다" 더라.


이런 기반지식이 다져졌을때 장점 중 하나는, 니가 면접 때 모르는 내용을 면접관이 물어봐도 질의응답을 통해 "아 그럼 이런식으로 돌아가겠군요" 라고 하면서 추측하면서 답변을 할 수 있게 되고, 면접관 입장에서는 이새끼 똘똘하네 라는 인상을 받을 수 있다는거다. 


3. 스프링

우리나라는 자바공화국이기 때문에, 자바+스프링(혹은 코틀린+스프링) 기준으로 설명함. 스프링 시큐리티니 배치니 이런 기술들에 대해서 아는것도 좋지만, 2번에서 말했듯이 기술이란게 다 거기서 거기이기 때문에 니가 mvc 만 제대로 할줄 알아도 된다.(오히려 다른 기술들을 스택에 넣으면 니 공격당할 포인트만 늘어나는거다) 그러면 역시 또 나올 수 있는 질문은 "어디까지 알아야 MVC 를 잘안다고 할 수 있느냐?" 인데, 나는 기준점을 "내가 무엇이든 만들 수 있다는 자신감이 있을 때" 라고 본다. 가장 단순하게 게시판을 만들어본다고 가정해보자. 회원, 게시글, 댓글이라는 도메인이 있을 때 게시글/댓글의 엔티티를 어떻게 구성할지, 좋아요 기능은 어떻게 넣을지 테이블 설계를 머릿속으로 상상할 수 있고, 이를 찍어낼 수 있으면 끝이 아니다. 수많은 트래픽이 몰려왔다고 가정했을 때(물론 니가 만든 서비스가 그렇게 될 가능성은 적다) 어떻게 최적화를 할지, 이에 대응해서 톰캣 튜닝은 어디를 건드려야 할지, 인덱스는 어떻게 걸어야할지 등에 대해 당연하게 떠올릴 수 있으면 충분하다.


만약 니가 자바+스프링이 아니어도 니가 사용하는 프레임워크에 대해서 깊게 이해하고있으면 전혀 문제될 게 없다.


4. 클린코드

사실 클린코드에 대해서는 진짜 할말이 많은데, 좀 줄여서 이야기하겠다. 클린코드가 중요한건 맞는데, 니들이 하는건 클린코드가 아니다. 가끔 보면 클린코드를 무슨 광신도마냥 맹신하는 친구들이 있는데, 도대체 뭐가 클린코드인지에 대해서 설명하라면 아마 99%는 답변을 못할거다. 코드를 왜 이렇게 짰냐고 물어봤을 때 무지성으로 "객체는 이래야 하니까" 가 아니라, 인터페이스라는 관점을 접목시켜서 어떤 장점이 있는지, 왜 이게 일종의 convention 으로 자리잡았는지 등에 대해서 설명할 수 있어야 진짜 클린코드를 할 수 있다.(특히 DDD 언급하면 한대 쥐어박고싶다)


5. 면접

나도 원체 찐따새끼로 태어나서 면접은 잘 못보는 편인데, 그나마 조언해줄 수 있는 말은 "최대한 깊게 알아라" 정도가 될 것 같다. 사실 이게 2, 3번에서 언급한 이해랑도 직결되는 말인데, 깊게 알면 알수록 단순 암기가 아니라 원리에 대한 이해가 되니까 하는 소리다. 블로그 같은것도 하는건 좋은데, "~해결기" 라고 타이틀 달아놓고 원리원칙 하나도 모르면서 "이렇게 하니까 해결되더라" 수준으로 찍 싸지르는새끼들은 진짜 뺨올리고싶으니까, 한글로 검색했을 때 잘 안나오는 정도로 이해해라.(혹은 나오더라도 작성자 깃허브 들어가봐서 알아줄만한 회사 다니는 사람일 정도)




---


써놓고보니 걍 깊게 이해하라는소리밖에 없는데, 사실 이게 A to Z 고 알파 오메가라고 생각함. 물론 이걸 몰라도 취업한 능력자들은 많겠지만, 반대로 이걸 알고있으면서 취업 못한사람은 못봤다.