비전공 6년차 이직 실패(?)에 대한 이야기
안녕하세요
비전공으로 국비지원 학원 출신 개발자입니다. 이제 연차가 5.5라, 반올림해서 6년차로 하겠습니다.
많지 않은 연차이지만 더 좋은 곳에서 일하고싶어서 이직은 3번 했었습니다. 현재는 사정상 프리로 일하다가 규모 있는 곳에서 경험을 해보고 싶어서 이직을 준비했었습니다. (연차 대비 이직이 잦다는 이유로 서류 불합 된 곳도 종종 있습니다. 엄청 큰 문제라고는 생각 안합니다만, 이직 잘 선택하시길 바랍니다.)
최근에 약 2~3달간 IT대기업, 유니콘/시리즈A이상 스타트업 등에 지원하였지만 결국 원하는 수준의 기업에 이직을 못하고 스타트업에 출근하기로 했습니다.
개인적으로는 이직 실패의 경험이긴 하지만, 새로운 곳에서 또 좋은 경험을 할 수 있기 때문에 실패라고 단정짓지는 않으려고 합니다.
최근 이직 과정에서의 팁이라고 해야할까요, 준비했던 내용들 공유 드리고 넋두리 좀 해보려 합니다.
제 경력은 공공SI, 작은 서비스(라 부르고 SI처럼 일하는) 회사를 전전하다 규모있는 IT회사의 서비스 자회사로 갔었습니다. 작년에 코로나로 가계가 어려워지고 법인이 본회사에 인수합병되는 과정에서 프리로 전향해서 일하고 있었습니다. 다시 가계 사정이 좋아졌고 정규직으로 들어가려고 합니다.
프로젝트 이력으로는 Java 풀스택 개발자로 다양한 프로젝트를 진행했습니다.
대부분 Java/Spring 기반 MVC로 웹 애플리케이션(JSP 등 템플릿 엔진) 개발 또는 RESTful API 개발이 주로 이루었네요.
IoT 데이터 받는 Netty로 TCP 서버도 만들었고, React Native로 웹뷰용 앱도 출시해보고,
Python Django로 웹 서비스 하나 만들어보고, Airflow로 ETL 처리도 해보고,
Vue.js로 프론트도 개발해보고 이것저것 했네요.
데이터베이스 설계도 직접 해서 진행해보고, 데이터베이스 인덱스 튜닝, 스케일업, 슬로우쿼리 개선, DB 이중화 등 여러 장애 처리도 해봤네요.
이러한 경험들을 하며 나름 자신감이 붙었지만, 작은 서비스와 1인 위주 개발을 하다보니 약점도 분명 존재했죠.
그래서 느끼던 갈증들은 다음과 같습니다.
1. 대규모 트래픽에 대한 운영 경험
2. 내가 만드는 서비스 설계 또는 코드가 좋게 만들어졌는지에 대한 피드백
3. 개발자로서 잘 성장하고 있는지에 대한 피드백
4. 팀원들과 하나의 서비스를 같이 책임지면서 기술적으로 교류하고 피드백 주고 받고, 서비스를 만들어나가는 과정들
이런 갈증을 해결하고자 규모있는 IT서비스 기업, 유니콘 스타트업, 대기업 등에 도전을 해봤습니다.
한 20~30군데 넣은 것 같네요. 더 많이 지원하고 더 집중해서 준비 했어야 하는 후회가 드네요.
가계 유지를 위해 시급제로 프리일을 병행하다보니 어렵긴 했지만, 정규직 다니면서도 잘 준비하셔서 이직하시는 분들도 계시니 그저 구차한 변명이네요 ㅜㅜ
이직하면서 얻은 경험들을 토대로 참고차 팁을 공유하려고 합니다.
이력서 작성
처음에는 경력과 프로젝트를 나열만하고 문제 해결에 대한 초점없이 그냥 한 일들을 나열했었습니다.
예를 들면 다음과 같이 잘못된 내용이 있었습니다.
000 웹 서비스 개발
* 설문조사, 통계 시스템 개발
본격적인 서류 제출전에 다행히 이력서 피드백을 받을 기회가 있었습니다.
피드백 내용이 굉장히 많아서 아에 바닥부터 다시 썼었네요.
이력서 작성에 핵심은 경력과 참여했던 프로젝트들에 대해 어떤 문제를 '기술적으로' 어떻게 해결했는지에 대해 쓰는 것이더군요.
제 경우에는 이 부분이 꽤 어렵더라고요, 지금도 아마 피드백 요청 보내면 또 피드백이 많을 것 같아요.
구글링하면 어떤 문제를 어떻게 분석하고 어떻게 해결했고 왜 그렇게 해결했는지 등에 대한 글들을 찾아볼 수 있습니다.
(예시: HikariCP Dead lock에서 벗어나기 (실전편)_우아한형제들 기술블로그)
저는 작은 서비스들 위주로 하다보니 이러한 경험들을 자주 접해보진 못 했었습니다.
보통 이런 문제해결은 말그대로 장애(문제)가 발생한 후에 이를 해결하는 경험에서 많은 것들을 얻고, 이력서에 추가할 만한데요.
그냥 단순하게 개발하고 잘 굴러가면 사실 이력서에 특출나게 쓰기가 어렵더라고요.
개인적으로 위의 잘못된 예시에서 크게 벗어나기 어려웠습니다.
트래픽이 많다면 MQ등을 써서 메시징 처리를 하는 경험, 애플리케이션 스케일 아웃, DB 이중화 또는 샤딩, 특정 비즈니스 로직에서 어떤 알고리즘을 써서 개선 등에 대한 경험이 분명 있을텐데 말이죠.
결국 이런 경험에 대한 부재가 기술면접에서 그냥 책에서 본 '개념만 아는 정도'에 그치게 됩니다.
실무에서 이런 경험이 없더라도, 단순히 아는 정도가 아닌 한번 토이 프로젝트로 직접 만들고 테스팅을 해보면서 경험해본다면 이야기할 거리가 많을 것 같습니다.
그리고 이런 토이 프로젝트들이 일종의 포트폴리오로도 좋은 역할을 해주게 되겠죠.
코딩 테스트
이력서 잘 쓰고 운이 좋아 회사에서 원하는 인재라면 서류 합격이 되겠죠.
이 후에 보통은 코딩 테스트를 보거나, 1차 면접에서 라이브 코딩을 겸하는 경우도 왕왕 있었습니다.
비전공자라 cs 지식에 대한 공부를 했더라도 실제 알고리즘 문제 풀이에 대해 훈련을 하지 않으면 코딩 테스트가 어렵더라고요.
자료구조와 알고리즘 책, 강의를 듣고 문제도 여러번 풀어보면서 다행히 코딩 테스트 불합격률이 많이 낮아졌습니다.
심지어는 3문제 중 1문제를 틀렸지만 통과했던 경우도 있었고요.
생각보다 엄청 어렵지 않으니 기본적인 것들 연습하시면 충분합니다.
완전 처음이신 경우, 자료구조에 대해 잘 공부해보시는게 좋습니다. 은근히 자료구조만으로 잘 활용해서 알고리즘 문제를 푸는 경우가 많거든요.
예를 들면 문자열 뒤집기 문제의 경우 문자열을 Split 해서 CharArray 배열을 반복문으로 구성하는 것보다 Stack 자료구조를 활용하면 쉽게 해결 되더라고요.
기술 면접
주로 자기소개부터 시작해서 이력서에 대한 내용을 바탕으로 물어보고, 준비해오신 개념적인 질문들을 물어보십니다.
자기소개와 이력서에 대한 것에 대해 꼬리물기 질문들이 많이 들어옵니다. 이는 각자의 상황에 따라 준비하시면 됩니다.
하지만 준비는 철저히 하시는게 좋습니다.
특히 앞서 이력서에서 문제에 대한 기술적 해결에 초점을 맞춘다고 했는데, 꼬리물기 질문도 비슷하게 들어옵니다.
해당 문제에 대한 해결법에 대해 설명, 왜 그렇게 해결했는지, 다른 대안은 없는지 등 이런 부분을 꼼꼼히 준비하시면 좋습니다.
오히려 이런 유형은 좋은점이 있습니다. 내가 쓴 이력서를 바탕으로 질문을 유도할 수 있어서 어떤 질문이 나올지 예상이 됩니다.
개념적인 질문들은 CS 지식, 사용하는 기술 스택에 관련된 것들이 나오는데요
제가 받아봤던 주요 질문들을 꼽아 보겠습니다
[CS 지식]
* 프로세스/스레드 설명 및 차이
* TCP/IP에 대해 설명
* 패킷이 출발지로부터 목적지까지 이동하는데 아는대로 설명
* 웹 브라우저에서 특정 url을 입력할 때 발생하는 과정들 설명
* 데이터베이스 자료구조, 인덱스
[Java]
* Java의 String 처리에 대해 설명
* GC에 대해 설명, 튜닝 경험
* JVM에 대해 설명
* Java 최신 버전 변경점과 주요 기능 아는게 있는지
* Collection 라이브러리에 대해 아는대로 설명과 각 주요 인터페이스별 차이(List, Map 등)
* 접근 지시자 차이
[Spring Framework]
* 스프링 Proxy에 대해 설명
* IoC/DI 설명
* MVC, WebFlux 설명 및 차이
* Dispatcher Servlet 설명
* Spring Boot에 대한 설명
[프로그래밍 방법론]
* OOP
* DDD
* TDD
* MSA
(보통은 이런거 공부합니다, 관심있습니다 할 때 혹은 해당 팀에서 직접적으로 사용할 때 물어보더군요)
대부분 질문들은 인터넷에 검색하면 많이 나오는 흔한 질문들입니다. 근데 단순히 암기 수준이면 실제 대답할 때는 잘 안나오거나 꼬리물기할 때 답변을 못 합니다.
이런 부분들은 실제 하나씩 해보면서 공부하면 더 와닿을 것입니다.
(예를 들면, Spring IoC/DI에 대해 설명에 관련해서 ApplicationContext와 BeanFactory에 대해 같이 공부하면 이해가 잘 됨)
임원 면접
보통 2차 면접 단계, 컬쳐핏 면접 등에 속합니다. 실제 해당 부서의 임원분들과 인사담당자 분과 함께 면접자의 인격, 회사와 컬쳐가 잘 맞는지 등을 판단합니다.
자기소개와 이력서상에 대해 물어보면서 기술적인 것 이외의 상황들에 관련해서 질문하고 꼬리물기하고 압박면접 등이 들어옵니다.
이 부분도 각자의 상황에 맞춰서 준비하시되, 꼬리물기를 잘 준비하시고, 이 또한 질문을 유도할 수 있습니다.
넋두리
서류 탈락, 코딩 테스트 탈락, 1차 탈락, 2차 탈락 다양한 단계에서의 탈락을 다 경험했었습니다.
제일 힘든 것은 2차 면접 때 탈락하는 경우가 제일 힘들더라고요.
아무래도 마지막 단계였고 일말의 기대가 있었는데 탈락한 것도 있지만, 인격적으로 뭔가 부족한게 있나 싶은게 더 힘들더군요.
주변에서는 회사와 그냥 인연이 아닌 것으로 마음 편히 먹으라했지만, 계속 마음이 좋지 않더라고요.
이런 부분들에서 멘탈을 잘 잡는게 좋을 것 같아요.
앞으로 새로운 곳에서 어떤 미래가 그려질지 모르겠지만, 열심히 해서 더 성장한 개발자가 되려고 합니다.
사실 이직 실패후 들어가는 스타트업이긴 해도, 처우는 잘 받았고 유니콘 스타트업처럼 나름 잘해보려고 노력 중인 회사라 은근 기대도 되긴 합니다.
돌이켜보면 그동안 내가 하는 것이 작은 서비스이다, 팀원들이 없어서 힘들다 이런 핑계를 댄 것 같아요.
팀원이 없어서, 사수가 없어서 피드백 받기 힘들다면 커뮤니티 활동, 스터디 등을 하면서 좋은 멘토분을 적극적으로 찾아서 피드백을 받으려고 노력해야겠더라고요.
대규모 트래픽 경험, 쉽지는 않지만 관련 공부를 하고 직접 토이 프로젝트 만들어보고, 스트레스 테스트 툴 등을 이용해서 대규모 트래픽을 간접적으로 체험해본다면 경험해볼 수 있을 것이라 생각합니다.
이런 것들 생각만으로 그치지 않고 실천해서 더 좋은 경험을 쌓아 나중에 또 좋은 회사에 갈 기회를 잡을 생각입니다.
제일 좋은 것은 앞으로 다닐 회사에서 이런 성장스토리를 그려나가면서 경험하고, 회사의 서비스도 잘 되는게 금상첨화겠네요.
주변이나 커뮤니티에 무슨 기업 이직 성공기, 네카라쿠배 장원급제 스토리 이런 것을 보면서 성공한 사람들의 발자취를 따라가는 것도 좋습니다.
반면에 저와 같이 나름 노력은 했지만 실패한 이야기를 통해 '저렇게 하지 말아야지', '나와 같은 사람이 있구나' 혹은 '저렇게 해도 안되면 더 열심히 준비해야겠구나' 하는 생각이 드셨으면 좋겠네요.
긴글 읽어주셔서 감사합니다. 모두 행복하시고 건승하세요.
추신) 좋은 글 공유
제가 규모있는 혹은 성장하는 서비스 IT 회사를 가기로 마음 먹은 계기, 좋은 개발자란 무엇인가에 대한 고민을 하는 계기가 된 글들 입니다.
코딩은 ... 시작하면 죽을때까지 마스터할수 없는 수행의 길이다.