본문 바로가기

TIL(Today I Learned)

주니어 개발자로 실무경험 해본 후기

안녕하세요! 개발 공부 및 취업활동을 하고 있는 주니어 개발자 왕란이라고 합니다.(이름의 이유는 중요하지 않다고 해주세용..)

 

작년 8월까지 일본에서 워홀을 하다가  끝내고 연장할까 말까..도 고민하며 더 늦으면 꿈을 이루기 힘들겠다라는 판단에 시작한 개발공부!

 

귀국하자마자 KDT 국비지원 부트캠프인 팀스파르타의 내일배움캠프에서 Java & Kotlin Spring 백엔드 개발자 트랙에 참여하여 지금까지 개발자 공부를 한지 반년이 조금넘었습니다.

 

올해 1월에 트랙을 수료하고 이력서 작성, 알고리즘 공부 등을 하며 약간은 수비적인 취업활동을 하다가 지금까지 이력서도 15군데 이상 넣어보고 지금까지 경험해본 내용과, 앞으로의 방향에 대한 경험을 정리해보고 다시 블로그활동을 꾸준히 해보려고 합니다.

 

1. 이력서 제출 및 결과 💬

내일배움캠프를 하면서 팀장도 많이하며 리드했고, 학습한 내용을 블로깅도 하고, Github 에서 프로젝트를 작성할 때 리드미도 깔끔하게 해서 작은 프로젝트여도 좀 제대로 했다는 모습을 어필하는 것이 필요하다고 생각했습니다. 물론 이런 내용은 시니어분들이나 갓 취업한 따끈따근한 주니어 개발자분들의 조언을 반영한 것이었습니다.

 

사실 이력서에 제가 어필할 수 있는 것은 내배캠을 수료하는 과정에서 최종프로젝트로 진행했던 `Chairing Project` 말고는 아무것도 없었습니다. 개발자와 완전 관련된 일을 해온 것도 아니고, 전공이 컴공도 아니었기 때문입니다. 그래도 조언을 토대로, 지금까지 해왔던 다른 일들의 경험을 "개발자의 자세"에 대입하여 어필해보려고 했고, 이력서를 완성한 후 3주정도 동안 15개의 회사를 지원해보았습니다.

 

제가 지원에 사용한 플랫폼은 Blind Hire 와 Wanted 였는데 대부분은 원티드에서 지원했습니다. 필터를 적용할 때는 완전 처음시작하는 햇병아리 주니어 개발자이지만, 신입뿐만 아니라 1~2년 경력자 부터 뽑는다는 공고도 넣어서 지원했습니다. 결론부터 말씀드리자면, 15개의 회사중에서 이력서 통과 후 코딩테스트까지 도달한게 단 한 곳 뿐이었습니다.

 

15개의 회사중에서 뭐 3~4개 서류 통과하는걸 바라는 것은 스스로도 양심없다고 생각합니다. 지금 백엔드 개발자 시장이 좋지도 않고, 경험은 비슷비슷하거나 저보다 매력적인 이력서인 분들이 훨씬 많고, 평균적으로 4~50개의 회사에 지원하고 2~3번의 면접기회를 얻는다는 통계를 본 적 있으니까요.

 

코딩테스트를 본 한 곳의 회사에선?

서울에 위치한 'N' 소프트 라는 회사였습니다.(회사이름은 일단 공개하지 않겠습니다)

 

처음 회사에 도착한 후, 화려하면서도 깔끔한 건물에 입장하니 두근거리며 이런 곳에서 일하게 될 수 있는걸까? 라고 생각했는데 결과적으론 김칫국이었습니다.

 

약 40분 정도의 코딩테스트 시간이 주어졌고, 문제는 4문제가 나왔습니다. 이 중, 2문제는 Java 알고리즘 문제, 2문제는 SQL 문제였습니다.

 

테스트를 시작하기전 40분은 너무 짧은거 아닌가? 라는 생각이 들었지만 Java 알고리즘 문제의 난이도를 보고 "흠.. 한문제당 5분에서 10분정도 사용해서 풀고 나가는 시험이었구나" 라는 걸 알게되었습니다. 환경은 그냥 책상에서 빈 종이에 수기로 코드를 작성해가면서 문제를 푸는 것 이었는데, 기억나는 첫번째 문제는 다음과 같은 내용이었습니다.

 

1000000000 과 같은 문자열을 입력했을때 1,000,000,000 와 같이 단위를 콤마로 나누어 출력하는 함수를 작성해주세요.

 

문제를 보고 제한조건이 있는지 살펴보고 어떤식으로 해결할까..? 하다가 우선은 적기 시작했는데 코드를 수기로 적는 것은 살면서 처음해보다 보니 중간에 틀려서 앞에 내용을 다 지워야 하는 경우도 생기고, 긴장해서 손에 땀이나니 종이가 더러워져 지워지지도 않고 갑작스럽게 뇌정지가 오는 경험을 했습니다.

(사실 연필이랑 지우개를 사용해도 되는지도 의문이었습니다)

 

어찌저찌.. 하다보니 시간은 끝났는데 전 알고있습니다. 제가 너무 못풀었다는 사실을...

 

이렇게 얼렁뚱땅 코딩테스트를 보고나니 스스로가 너무 자극이 되었습니다. 왜 이렇게 쉬워보이는 논리 흐름의 문제를 간단하게 뚝딱 해내지 못한걸까 하고 자책하고, 또 왜 이런 경험을 해야 다시 알고리즘 공부에도 집중하고 SQL 공부에도 집중하게 되는걸까 하며 한번 더 자책했습니다.

 

그렇게 망쳤다고 생각한 'N' 소프트의 결과도 역시 탈락이었고, 이날 집 돌아가서 부터 프로그래머스 알고리즘문제를 기초, 입문 부터 Lv.1 문제까지해서 간간히 Lv.2 문제까지 간간히 공부하고 있습니다.

 

 

그래서 큰 의미는 없지만 쉬운문제로 점수도 약간 오르긴 했더라구요. 이것도 올리다보니 순위 500위 안에 들어가보고 싶다는 생각이 들었습니다. 이렇게 제 초라한 이력서로 지원했던 회사들은 모두 "서류 탈락" 이라는 결과로 끝나게 되었습니다.

 

2. 실무 경험을 해보다(계약 연장까지..!)

벌써 내용이 좀 길어졌지만 이랬던 제가 어떻게 실무 경험을 할 수 있게되었는지도 말해보겠습니다.

 

바로인턴?

우선 KDT 국비지원 내일배움캠프를 수료하면, 팀스파르타 측에서 수료 후에도 수료생들이 실질적으로 취업에 도달할 수 있게끔 다양한 애프터 서비스를 진행하고 있습니다.(팀 스파르타 추천합니다!)

 

딱히 홍보용 포스팅은 아니지만 수료생에게 지원해주고 있는 서비스에 대해서 간단히 나열해보겠습니다.(무료입니다)

 

1. 이력서 첨삭 지원(현업 인사담당팀 또는 채용경험이 있는 개발자 분이 봐주십니다)

2. 기술면접 대비 모의 면접 지원

3. 4주간 회사에서 인턴을 할 수 있는 "바로인턴"(한달인턴 이라고도 합니다)

4. 기타 트랙 수강중에 들었던 강의 6개월정도(?) 추가지원

 

이 중에서 가장 매력적인 것은 아무래도 3번 바로인턴 이었습니다.

수료생들을 대상으로 기초적인 온보딩과제, 이력서, 간단한 자기소개서 등을 제출하면 팀스파르타측과 계약을 맺은 100개 전후의 회사(스타트업 위주)들에 4주간 인턴직무로 실무 경험을 할 수 있게 해주는 좋은 서비스였습니다.

 

저를 포함한 막 학습이 끝난 취준하는 주니어 개발자들에겐 아무리 짧은 기간이라도 실무경험이 매우 중요하다고 생각합니다. Github 이나 Slack, Notion 과 같은 협업 툴을 사용하는 것, 회사에서 신입으로 들어가서 가져야할 태도, 새 회사에 들어가서 온보딩하는 과정, 일할 회사가 어떤 서비스를 하고 있는지 이해하는 것 등등 많은 경험이 필요합니다.

 

실무 경험에 대하여

4주라는 시간은 사실 상기한 내용중 하나를 제대로 하기도 힘들 수도 있는 기간이지만 하기 나름이라고 생각합니다. 바로인턴을 지원하여 'S' 라는 회사와 매칭이 되었고, 이 회사에서 처음 실무경험을 해볼 수 있게되었습니다.

 

물론 이렇게 인턴을 하게되면 회사측에서 임금을 받는 구조는 아니고, 팀스파르타 측에서 활동지원금 느낌으로 어느정도의 급여(140만원~169만원)를 제공하고 기업측에서는 팀스파르타에서 인턴 인력을 제공받는 협력구조입니다.

(아마 국비지원 사업이라 팀스파르타 측에서 국가에서 받은 지원금을 임금의 형태로 제공하는 방식이라고 생각합니다)

 

지금 인턴을 경험하고 있는 회사에서 제공하는 서비스는 신입이나 경력직 개발자 들에게 다양한 채용공고정보를 크롤링하여 AI 를 통해 채용공고 데이터를 다듬어 제공해주는 그런 서비스를 하고 있었습니다.

 

제가 처음들어가서 맡은 업무는 700~900개 정도되는 회사의 채용공고 사이트에 각각 동작하고 있는 크롤러가 제대로 동작하지 않는 경우 정상동작하도록 수정하는 업무와 채용공고를 크롤링 할 신규 회사들을 위해 크롤러를 추가하는 업무 등을 맡았습니다.

 

처음 이 기업과 매칭이 되었을 때, 걱정했던 부분이 몇가지 있습니다.

 

1. 나의 주특기는 Java/Spring 백엔드 개발자 인데 회사의 스택은 Python/Django 이며 백엔드 업무를 하지 않는다.

2. 따라서 온보딩 과정에서 회사가 어떻게 운영되는지 알아봄과 동시에 Python 학습이 필요하다.

3. 크롤링 관련 프로젝트를 해본경험이 아예 없다.

 

였습니다.

 

한달동안 인턴을 하기위해 새로 Python 언어를 공부하면서 처음해보는 크롤러 제작하는 업무가, 나의 Java/Spring 백엔드 개발자의 역량에 도움이 되는게 있을까? 라는 생각이 딜레마로 다가왔습니다. 결론 부터 말하자면 어떻게든 무조건 도움이 된다 인것 같습니다.

 

사실 개발에 사용되는 언어라는 것은 동적 타입언어인지, 강타입 언어인지 이런 언어마다의 특징차이만 있을 뿐 "개발"이라는 개념 자체에서 코드들은 다 일맥상통하는 것 같습니다. 더군다나 코드를 작성하고, 검토하는 과정에 있어서 저같이 처음 접하는 언어로 개발을 하게되었을 때 또는 확신이 없을 때, 참고할 수 있는 다양한 아티클도 너무 많이 존재하고 인공지능모델 등을 활용하여 얼마든지 실시간으로 학습 및 적용이 가능하다 보니 이 부분은 크게 문제되지 않는 것 같았습니다.

 

또한 크롤링 서비스를 개발해본 경험이 없는데 회사마다 모두 다른 HTML 폼에 내가 잘 적용하고 작성할 수 있을까? 하고 걱정했던 부분도 마찬가지였습니다.

 

이미 회사에서 어느정도 서비스가 개발되어있었기에, 프로젝트를 꼼꼼히 살펴보며 크롤러가 어떻게 채용공고를 긁어오고, 긁어온 채용공고의 세부내용을 어떻게 파싱하는지 모든 과정을 천천히 살펴보다보니 내가 뭘 만들어야 하는지 어떻게 만들어야하는지 가 그려지는 것 같았습니다.

 

그리고 이미 만들어져있는 다양한 크롤러의 형태뿐만 아니라 Greeting, Nine Hire, 외국계에서는 AshByHQ, Green House 같은 채용공고 페이지 제작 및 배포 플랫폼에서는 각각 플랫폼의 형태가 고정되어있기에, 전용 크롤러를 작성하면 추가적인 작업은 훨씬 빨라지는 것을 깨닫고 제가 새로운 전용크롤러도 만들기도 하였습니다.

 

이때 더 나아가서 저는 스스로 백엔드 개발자라는 사실을 잊지 않고! 크롤러 자체를 공장에서 찍어내듯 만드는 것 보다, 어떻게하면 서버와 클라이언트가 임베딩된 데이터를 주고받을 때 효과적일지, 데이터를 크롤링하고 영속화 하는 과정에서의 속도나 안정성 부분에서 효율적으로 할 수 있을지를 고민해본 것 같습니다.(물론 이 업무를 맡아서 할 수는 없었지만요)

 

인턴 계약 연장!

그렇게 시간이 흘러 한달인턴이 끝나가는 시기즈음, 회사에서 저에게 "정식으로 계약을 하고 기간을 어느정도 연장해서 같이하고싶다" 라는 말씀을 해주셨습니다. 제 입장에선 한달의 기간동안 배운 사소한 것들도 고마웠고 뜻 깊었다고 생각했는데 이번에 연장하면서 백엔드 개발분야도 해볼 기회가 생길 수 있다는 것에서 너무 설렜던것 같습니다.

 

특히 팀스파르타에서 매칭해주는 바로인턴을 하는 기업들은, 바로인턴 이 후에 정직원이나 인턴으로 계약을 연장하는 경우도 많다고 들었고(기업마다 다릅니다) 저에게도 그런 기회가 온다면 좋겠다 라는 생각이 들긴 하였지만, 첫날 회사에서 미팅을 할 때 저는 될 것 같지 않다 라는 생각이 들었습니다.

 

왜냐하면 바로인턴으로 들어온 사람이 저포함 5명이었고, 그중에 3명이 Python 주특기였으며 나머지 한 분은 저보다는 개발 경력이 꽤 탄탄하신 분 같았습니다. 그래서 저는 좋은 경험으로 남기고 인턴이 끝나더라도 짧은 임팩트를 남기는 개발자가 되자 라는 생각으로 열심히 임했던 것 같습니다. 

 

여담으로 약간의 자랑을 하자면, 저는 모르는 부분에 대해 스스로 학습해서 알아보다 도저히 안될 때 시니어나 사수에게 질문하는 타이밍을 잘 잡는 것 같습니다. 이말은 즉슨, 고민하느라 시간을 낭비하지는 않으면서 그렇다고 아무런 고민도없이 질문을 하여 선배의 시간을 낭비시키지는 않는 타입이라는 뜻입니다. 그래서 업무를 진행할 때 거의 막힘없이 물흐르듯 진행할 수 있던 것 같습니다.

 

또한 질문을 하고 그 질문에 대한 솔루션이나 피드백을 들으면 최대한 머릿속에 흡수 시켜 놓고 이해하지 못한 키워드는 검색하고, 관련된 내용을 찾아보며 들은 피드백을 100퍼센트 내가아는 지식으로 이해할 수 있게 하여 그대로 적용하도록 한 것이 많은 도움이 되었던 것 같습니다.

물론 피드백을 처음듣고 시니어분께서 말씀해주신 내용을 한번에 다 이해하고 업무에 적용을 할 수 있는 역량을 가진사람이면 더 좋지만, 제 역량에서는 듣고 모르지 않는다 만 해도 꽤나 괄목할 만한 부분이라고 생각합니다. 하지만 전자의 사람이 되려고 노력해야겠죠?

 

여하튼 이렇게 한달 간의 인턴이 끝나게 되고 저는 추가적으로 근무할 수 있게 되었습니다.

 

3. 팀네이버 코딩테스트

인턴 이야기를 하다가 왠 네이버 코딩테스트 이야기를 하지? 라는 생각이 드실 것 같습니다.

 

 

사실 네이버는 너무 업계에서 유명한 회사이고 사람 마다 다르겠지만 저 같은 주니어 개발자들은 로망처럼 꿈꾸는 회사 리스트중에 하나라고 생각합니다. 이유는 다양하겠지요.

 

이번 팀네이버에서도 상반기 신입 공채를 뽑는다는 공고가 올라왔기에 인턴 연장이 확실히 되지 않는 타이밍에 지원해보았습니다. 이런 기업의 코딩테스트나 기술면접을 볼 수 있다면 합격이든 불합격이든 좋은경험이 될거라고 생각했기 때문입니다.

 

네이버에 이력서를 넣어보니 이틀도 되지않아 SMS 와 이메일로 코딩테스트와 CS 테스트, 기업 적합도 테스트를 보라는 연락을 받았습니다. 네이버 같은 회사는 지원자가 무수히 많고, 이력서를 보고 코딩테스트를 검토하는 과정을 하면 시간과 인력이 너무 소비되기에 이력서와 코딩테스트를 동시에 확인하고 둘다 통과한 인재에게 다음 단계의 기회를 주는 구조같았습니다.

 

코딩테스트를 보니 앞서 말했던 'N' 소프트와는 역시 난이도가 다르긴 했습니다. 이쪽 경험이 많으신 분들은 팀네이버 코딩테스트는 대기업에 비해 쉬운편이다 라고 하기는 했는데 그래도 여전히 어렵긴 했습니다.

 

하지만 'N' 소프트에서 코딩테스트를 보고 각성했던 저는, 이 후에 아주 기초적인 알고리즘 문제를 좀 학습한 상태였기 때문에 못풀지는 않았습니다. 알고리즘 3문제, CS지식 20문제 해서 총 23문제를 2시간 30분동안 푸는 방식이었는데, 어찌저찌 해서 알고리즘 2문제정도는 풀었습니다. 이런 부분을 보면 다른 기업보다는 쉬운 것 같습니다.

 

하지만 저에게 가장 큰 문제는 CS 지식 테스트였습니다. 솔직한 마음으로 말하자면 너무 헷갈리고 제대로 풀었다! 싶은 문제가 몇개 없었던 것 같습니다. 애초에 문제 보기도 "모두 고르시오" 가 대부분이었고 정답이 2개인지 3개인지 모르는 상태이기 때문에 얼추 아는 지식으로 찍어서 맞출 수도 없었습니다.

 

그래도 CS 지식에서 나오는 문제유형을 알 수 있었고, 이런 부분도 개발자로서 기본적인 학습이 필요하다는 생각이 들었기에 서류에서 떨어질 것으로 예상은 되지만 값진 경험이었다고 생각합니다.

 

4. 기술면접 기회를 받다

이것 또한 인턴을 하는중에 생긴 좋은 경험이었습니다. 특수한 경로로 또다른 회사에서 기술면접을  볼 수 있는 기회를 얻었습니다.

 

사실 이때의 기술면접을 경험으로 다시 한번 스스로 각성할 수 있었던 것 같습니다. 왜냐하면 이 기술면접에서도 잘 못보았다고 생각이 들었기 때문이죠.

 

이번 회사는 'P' 라는 서울소재 회사였습니다. 현재 크게 스케일업 하며 회사를 키워나가고 있고, 꽤나 혁신적인 기술을 선보이며 유망한 회사라는 글이나 활동 등에서 매력적으로 보였고, 이 회사에서 하고 있는 서비스가 제가 관심있는 스포츠 분야를 다루고 있어서 저에겐 더욱 더 흥미롭게 다가왔었습니다.

 

면접을 보기전에 회사에서 사용하는 기술스택이나, 어떤 개발자를 원하는지에 대한 내용을 급하게 찾아보았습니다. 면접 자체가 급하게 잡힌 일정이라 변명이지만 준비할 시간이 부족했던 것 같습니다.

 

면접에서는 백엔드 개발자로서 갖추어야될 기본적인 지식과, 사내 문화에 적합한지 인성적인 측면을 확인하는 다양한 질문들이 나왔습니다. 총 1시간정도의 시간이 주어졌는데 이런 기술면접이 저에겐 처음이었기에 당황도, 긴장도 많이했던 것 같습니다.

 

Spring 관련 백엔드 지식에 대해서 기억나는 질문들은 다음과 같았습니다.

 

1. JPA 가 어떤것인지에 대해서 말해주세요.

2. Thread 에 대해서 말해주세요.

3. N+1 문제에 대한 내용과 이것을 방지하는 방법에 대해서 말해주세요.

4. 트랜잭션에 대해서 말해주세요.

5. Ehcache 에 대해서 말해주세요.

6. Websocket 을 프로젝트에서 적용하셨는데 이 이유에 대해서 말해주세요.

7. Spring 에서 Bean이 무엇인지 말해주세요.

8. Redis 서버와 Cache 부분에서 데이터를 주고받아야 하는 부분이 있는데 이런 부분에 대해서 말해주세요.

9. 디자인 패턴에 대해서 아는 것을 말해주세요.

10. 체크예외와 언체크 예외에 대해서 말해주세요.

11. 영속성 컨텍스트에 대해 아는데로 말해주세요.

12. 쿼리 실행계획에 대한 내용을 말해주세요.

 

등등 1시간동안의 기술면접이었기에 이것들 이외에대 대답한 내용에 대한 꼬리질문 형식의 내용이 있었지만 현재 기억나는 내용은 이정도였습니다. 부끄럽지만 대답도 거의 제대로 못했다고 생각합니다.

 

특히 블로그 활동을 하면서 제가 과거에 작성해놓았던 글들도 참고하시면서 질문을 하신 것 같았습니다. 과거에 썼던 글들이라 제대로 기억나지 않는 부분, 그리고 블로그 작성당시에는 학습해놓은 내용을 나중에 다시보고자 급하게 정리하여 블로깅 한 부분도 있어서 제가 쓴 글이지만 기억나지 않는 상황이 부끄러웠습니다. 그래도 염치불구하고 혹시 블로그 첫 시작부분을 제가 어떤식으로 작성했는지에 대해서 알려주실 수 있나요..? 라고 물어보니 알려주셨고, 글의 내용이 떠올라 약간 대답할 수 있었지만 제 블로그 글에 대해서 진정성을 느끼시긴 힘들었을 것이라고 생각듭니다.

 

기술면접이 끝나고 주말동안 질문들과 제 블로그, 제가가진 지식에 대해서 복기를 해보니 스스로도 사전적으로 설명할 수 있는 지식을 가지고 있는 것은 아니라는 것을 깨달았습니다.

 

이후에 다시 구글링과 ChatGPT 등을 써가며 지식들을 정리해 보았고, 운영체제 단 부터 시작해서 스프링으로 개발할 애플리케이션이 OS 로 부터 어떤 메모리를 할당 받으며 프로세스를 차지하고 쓰레드를 부여받고 애플리케이션이 동작하는지, JPA 가 객체로서 DB와 매핑되면서 데이터를 주고받는 공간에서 영속성 컨텍스트가 어떻게 동작되는지, 로컬 캐시에서 캐시가 동작하는 방식과 Redis 서버가 인메모리 공간을 할당받아 개별적인 서버로서 운영되는지에 대해서 다시 한번 공부하면서 저만의 스토리로 만들었습니다.

 

글내용이 쓸데 없이 길어지긴 했지만, 이제 부터는 블로그에 가능한 스토리텔링 방식으로 저같은 주니어 개발자도, 개발을 꿈꾸는 입문자도 누구나 이해할 수 있는 편안한 내용으로 포스팅을 해보려고 합니다. 스스로의 지식을 정리하며 보여주기식이 아닌 "진짜 기술블로그"로 만들어보고 싶다는 생각을 하게 되었습니다.

 

너무 긴 내용입니다. 이까지 읽어주셨을지는 모르겠지만 읽어주셔서 감사합니다!!

728x90
반응형