TENSOR STUDIO
와 벌써 2월 중순인데, 가장 최근 올렸던 글이 12월 28일 올린 글이다. 매번 꾸준히 포스트를 올리는 것이 너무 어렵다. 리액트 관련 라이브러리 소개 포스트를 올릴까 했는데 솔직히 바쁘지는 않고, 시간을 내서 글을 쓰는게 좀 귀찮은 것도 있는 것 같다.
아무튼 최근 꽤 많은 곳의 면접을 다녀왔는데, 크게는 중견기업 ERP 개발 직무부터, 웹 개발, 그리고 풀스택 개발 직무, 또 작게는 SI 중소기업까지 면접을 보았는데, 내가 취업하기까지 받은 질문들과 면접 질문에 대한 답변을 한번 정리해보고자 한다. 물론 엄청 고등한 대기업은 지원조차 하지 않았지만 이정도면 누군가는 충분히 도움을 받을 수 있을 것 같다.
또 개발자 채용에 대해서 코딩테스트에 대한 이야기를 하지 않을 수가 없는데, 코딩테스트를 하는 기업이 있고 그렇지 않은 기업들이 존재한다(당연하겠지만). 그런데 코딩테스트 방법도 좀 다른데, 크게 보자면
이렇게 두 가지 방법으로 코딩테스트를 진행하는데, 나는 처음 코딩테스트를 볼 때 어쩌면 당연히 백준처럼 온라인에서 코딩테스트를 진행하는 기업이 많을 것이라고 생각했는데, 오히려 면접 전 종이에 손코딩을 해가며 진행하는 기업이 더 많았다. 그러니까, 손코딩을 꼭 어느정도는 익숙해져 있어야 한다고 생각이 든다.
왜냐하면 내가 가장 최악의 면접이었다고 생각하는(내가 너무 대답을 못해서) 브레인즈 컴퍼니의 면접에서 js관련 간단한 문제를(심지어 1번이었는데) 손코딩을 하라고 했기 때문이다. 진짜 너무 못해서 가끔씩 그 상황이 꿈에서도 나오는데 나중에 이야기를 할 수 있으면 하도록 하고.
그리고 또 특이했던 코딩테스트 중에 하나는 온라인으로 진행은 하지만, 구름이나 프로그래머스와는 다르게 온라인상에서 코드를 실행시킬 수 없고, 그냥 txt로 코드를 작성하는 것과 다름없는 방식이었다.
대기업은 물론 코딩테스트가 엄청 어렵고 백준 골드 및 플래티넘 문제까지는 준비해 가야 하는 경우가 많겠지만 내가 느끼기엔 중소 및 중견기업에서는 그것보다는 인성면접이나, 대학 생활, 서류 및 포트폴리오가 조금 더 중요하게 보는 경우가 많은 것 같다.
개인적으로 내 생각에, 앞으로도 직접 종이에 펜으로 손코딩을 하도록 하는 기업들이 많아질 것 같다. 뭐 그냥 감이기는 하지만, AI 도구들 때문에 집에서 코딩을 온라인으로 하는 경우에 치팅을 막을 수 없어질 것 같기 때문이다.
그리고 영세한 기업들만 손코딩 하는게 아니냐? 이렇게 생각할 수도 있는데, 내 경험상 꽤 큰 기업(신입사원 기준 초봉 5000만원 이상)에서도 손코딩을 하는 경우가 많았다.
게다가 요즘 개발이 AI 도구 (Chat-gpt 및 Cursor, 코파일럿 등)들이 IDE 형태로 제공되는 경우가 많아지고 있다 보니까 보일러플레이트 코드나 간단하거나 템플릿이 있는 코드 같은 경우에는 자동완성되는 경우가 많아지는데 이런 경우 간단한 코드 작성 또한 중요해질 수 있으니까 기본적인 코딩 실력은 반드시 필요하다고 생각한다.
손코딩의 경우에는 내가 받아봤던 문제들은
등등이 있었는데, 대부분이 그렇게 어렵다고는 할 수 없는 문제들이었지만 문제 다 합쳐서 A4용지 기준 다섯 장 정도는 썼던 것 같다. 기본적인 문법 문제(프로미스나 상속, 예외처리)가 중심이고, SQL 쿼리 및 조인문제가 대부분이었다.
그리고 당연하겠지만, 지정한 언어로 문제를 풀이해야 하는데, 나같은 경우는 자바 개발자를 목표로 하고 있었기 때문에(대부분의 웹개발자들은 그렇겠지만) 자바로 문제를 풀이해야 했다. PS를 빠르게 준비하고자 할 때 파이썬을 주로 공부하는 경우도 있는데 그런 경우에는 낭패를 볼 수 있겠다.
또한 자바 개발자라고 해도 자바스크립트 문제도 같이 제시하는 경우도 꽤 많았다. 이 둘은 아무래도 웹개발에서는 필수이다 보니 어쩔 수 없긴 하다. 그런데 이제 자바만 공부한 경우에는 자바스크립트 문제에 대해서 모르는 경우가 많아질 수 있으니 조금 주의해야 한다.
SQL 쿼리는 정말 농담이 아니라 단 한곳의 회사에서도 빠짐없이 출제가 되었는데. 테이블을 몇 개 주고, 두 테이블을 조인하고 정렬하거나, 조인해서 집계함수를 사용하거나 하는 문제였다. 물론 SQL 쿼리 정도는 대부분 잘 작성하겠지만 막상 시험에서 처음부터 쓰라고 하면 곤란할 수도 있다. 갑자기 ORDER BY 절이 기억이 안날수도 있잖아.
조인을 하지 않는 경우는 없었다. 정말 한번도 없었는데, 조인이 SQL에서 가장 중요한 개념이기 때문에 그럴 수 있다고 생각하고.
각각 조인의 성질을 묻는 경우도 있었다. 예를 들어서, 사원 테이블과 카드 테이블이 있는데 사원이 어떤 카드도 이용하지 않는 경우에도 카드 테이블이 빈칸으로 나오도록 출력하려면 어떤 조인을 사용해야 할지 물어보는 경우도 있었다(LEFT OUTER JOIN을 물어보는 문제였다).
트렌드라고 해야하나? 대부분을 다대다 면접을 본 입장에서, 어느정도 다른 면접자들의 면접 질문도 듣고, 경쟁자들이 어느정도 준비해 왔는지 느껴볼 수 있는 시간이었는데 일단 정리해 보면
(일단 나는 SSAFY 출신은 아니긴 하지만 부트캠프 출신이기는 하다) 나와 같이 지원한 지원자들의 대부분이 SSAFY 출신이셨고, 컴퓨터 공학 전공자들이었다. 전공자들이라고 해도, 실제 포트폴리오 준비를 하려면 어쩔 수 없이 어느정도 부트캠프(국비교육)에 들어가야 하기 때문에 그런 것 같기는 하다.
커뮤니티에서는 국비교육이나 부트캠프를 엄청 내려치고 뭐라고 하는 경우가 좀 있었는데, 실제 면접장에서 봤을 때 과장이 아니라 정말 전부가 국비교육이나 부트캠프를 이용한 경험이 있었다. 내가 느끼기엔 요즘 너무 취업이 어려워지기도 하고, 취업 준비를 하는 사람이 워낙 많다 보니 단순 전공자라고 해서 큰 메리트가 있지는 않기 때문인 것 같다.
비전공자이신 분들도 계셨는데, 이런 분들 중에서는 전부가 부트캠프를 수료하셨고 어느정도의 직무경험이 있으신 분들이 많았다.
실제로 내가 면접을 본 서울에 있는 서비스 기업에서 3대3 면접을 했었는데, 나 외의 두분 모두 SSAFY 출신이시고 약 1년정도의 경력을 가지고 있었다. 여담이지만 그래서 너무 면접도 잘 보시고 대답을 잘 하는 모습을 보고 멘탈이 갈려서 그냥 다른 지원자들의 질문을 듣고 다음에 다른 면접을 볼 때 참고해야겠다고 생각했다.
괜찮은 기업으로 가면 갈 수록 1년정도의 경력을 가지고 있는 지원자들이 많아진다. 초봉 4600만원 정도의 중견기업에서 나를 제외한 두 사람 모두 1년정도의 경력(비정규직이나 정규직 가리지 않고)을 가지고 있었다. 최근 슈카월드에서도 올라왔지만 중고신입 및 경력직 선호 현상이 심해지고 있다 보니, 신입 채용이라고 하더라도 싸워야 하는 상대가 경력직인 경우가 꽤나 많다.
흔히 개발자 취업에서 포트폴리오가 정말로 중요하다고 많이 말하고 실력이 뛰어나면 학벌이고 뭐고 상관없다고 많이 말하기는 하지만, 과연 그런가? 싶은 생각도 조금 든다.
결국 면접을 보기 위해서는 서류를 통과해야 하고, 서류를 통과하기 위해서는 이력서도 그만큼 중요한 것 같긴 하다.
그러니까 내가 말하고 싶은 건, 포트폴리오와 기술스택도 정말 중요하지만 그게 전부가 아니고, 고도한 기술스택을 많이 사용한다고 점수가 올라가는건 아닌 것 같다. 어떤 상황에 어떤 기술을 써야할지, 어떤 프레임워크가 어떤 상황에서 적합한지 어느정도 자기 자신이 알고 있어야 하고, 문제를 해결하는 방법을 말로 잘 표현할 수 있는 것도 중요하다.
그리고 면접보기 전, 자신이 작성한 포트폴리오 결과물에 대해서 정말 자세히 알고 있는게 그 무엇보다도 중요하다.
대부분 지원자들의 포트폴리오를 보면, 자바 스프링 프레임워크 + 리액트로 작성된 프론트엔드 프로젝트가 대부분이고, 여기에 RDB를 사용하고, 젠킨스 및 도커 정도의 컨테이너 도구를 사용하는 경우가 많았다. 생각보다 레디스 같은 캐시 도구를 사용한다고 했을때 눈에 띄는지 면접관이 질문하는 경우가 있었고, 카프카 및 메시지 큐 같은 경우에는 왜 사용했는지 구체적으로 질문하는 경우가 있었다.
당연히 대부분은 오버엔지니어링이지만(내가 면접봤을 때 실제적으로 포트폴리오에서 대규모 서비스를 구현한 경우는 없었음), 그래도 최소한 왜 이런 기술을 사용했는지, 기술에 대해 자세한 이유를 말할 수 있는 것이 중요하다.
지원자들의 포트폴리오는 대부분이 자신들만의 새로운 웹 서비스 프로젝트였는데, 게시판같은 CRUD에 치중한 간단한 프로젝트는 없던 것 같다.
리액트가 거의 표준적인 프론트엔드 프레임워크이기는 하지만 Vue.js 와 같은 프레임워크를 사용해 봤냐고 물어보는 경우도 있었기 때문에 상대적으로 특별해 보일 것도 같다.
그리고 대망의 면접인데, 솔직히 나는 면접을 정말 못해서 뭐라고 말해야 할지는 모르겠지만 일단 그래도 면접을 한 10개 이상 보면서 사소한 거라고 해도 내가 받은 질문 및, 같이 면접을 보는 면접자가 받은 질문과 그에 대한 답변을 정리해보고자 한다.
사실 나는 스프링 기반 웹 프로젝트에서 어쩌면 당연하게 JPA를 사용하는 경우가 많아서 팀 프로젝트에서 JPA를 기본적으로 깔고 접근을 했기 때문에 이 질문을 받았을때 조금 당황했다.
내가 팀장이었기 때문에 내가 사용하자고 했고, 사용한 이유를 덧붙여서 이야기 했다. JPA를 사용한 이유는:
이 질문은 받았을 때 조금 당황했는데, 왜냐하면 아무래도 실제 운영되는 프로젝트에서는 대규모 데이터를 처리해야 하기 때문에 JPA를 이용할 때 성능적인 문제가 체감 될 수 있겠지만, 소규모의, 흔히 말하는 포트폴리오용 웹 프로젝트에서는 성능적인 문제를 체감하기 힘들기 때문이다.
나의 답변: “대규모 데이터를 다뤄본 적이 없기 때문에 실제 성능적인 문제를 겪어본 적은 없었지만, N+1 문제, 지연로딩이나 즉시로딩 문제 등 그런 문제를 겪어본 적이 있고 해당 문제를 해결한 적이 있다”
이건 중소 SI 기업에서 면접을 볼 때 받은 질문이었는데, 일단 웹 서버는 웹 브라우저에서 요청한 정적 컨텐츠를 제공하는 서버이고, WAS는 동적 컨텐츠를 제공하는 서버이다. DB에서 데이터를 가져온다거나 하는 작업을 하는 것이 WAS이다.
나의 답변:
이 질문을 받고는 당황했는데 그래서 실제 면접에서 대답을 제대로 하지 못했다. 세션을 통해 크롤링을 완전히 막는 것은 어렵지만, 세션을 활용하여 크롤링을 어렵게 만들 수는 있다.
세션을 이용한 크롤링 방지 방법:
처음엔 MVC 패턴이 사용된다고 대답했는데, 답이 아니라고 하길래 조금 당황했다. 면접관님이 원하는 답은 싱글톤 패턴이었다.
스프링의 주요 디자인 패턴:
나의 답변: “스프링에서 DI를 사용하는 이유는 빈의 생성이나 실행 순서등을 개발자가 관리하는 것이 아니라 스프링이 관리함으로써, 개발자는 서비스 로직에만 집중할 수 있다.”
DI의 장점:
이는 객체지향의 원칙 중 하나인 의존성 역전 원칙(DIP)을 지키는 것이다. 이는 추상화에 의존하고, 구체화에 의존하지 않는 것을 의미한다.
나는 여기에서 제대로 대답을 못했는데, 면접에 익숙하지 않아서 그런 것도 있는 것 같다. 면접관 앞에서 SOLID 원칙을 일일이 나열하며 설명하기가 어려웠다.
나의 답변: “스프링 같은 경우에는 노드나 파이썬의 fast api에 비해서 보다 더 전문적인 엔터프라이즈, 즉 큰 프로젝트에서 사용하기 좋은 프레임워크라고 생각한다. 왜냐하면 스프링은 필터 및 인터셉터등을 이용해서 더 구체적인 접근 통제 및 인가 관리가 가능하다고 생각하기 때문이다.”
스프링의 장점:
이 질문은 중소 SI에서 면접을 볼 때 받은 질문이었는데, 이런 질문을 받고 조금 당황했다. 그러면 면접보러 오는 사람중에 혹시 DB를 깔아본 적이 없는 사람이 있기도 한건가? 그러니까 물어보는 거겠지?
나의 답변: “당연히 설치해 봤고, 그 외에도 젠킨스등을 설치하고 이용해서 간단한 배포 자동화를 진행해 본 적이 있을 뿐만 아니라 실제 프로젝트를 클라우드 서버를 이용해서 배포를 한 적이 있습니다.”
나의 경험:
솔직히 잘 맞지 않았다고 대답했다.
클라이언트 오류는 공부하는 입장에서 많이 봤던 경우가 많은데, 서버 오류는 보기 드물어서 모르는 경우가 많다.
의외로 안드로이드 관련 질문을 꽤 많이 받았는데(서비스 기업 및 SI 기업 둘 모두) 웹개발 직무라고 해도 자사 서비스 또는 SI 프로젝트에서 웹 기반 서비스를 모바일로 확장해야 하는 경우가 많기 때문인 것 같다.
나의 경험:
실제 현업에서도 전문적으로 모바일 개발을 하지는 않더라도 담당자가 자리를 비우거나 했을 때 오류를 잡을 수 있는 정도만 된다고 하더라도 많은 도움이 되고 메리트가 있다고 한다. 이력서를 쓸 때 기술스택에 도움이 될 수 있는 정보라고 생각된다.
개별적으로 답변을 준비해 가면 좋을 것 같다.
카프카는 비동기 메시징 시스템으로, 데이터 스트림 처리에 특화되어 있다.
카프카를 사용한 이유:
이렇게 대답했어야 했지만, 이 부분에서 대답을 제대로 하지 못했다. 내 실패한 면접 대부분이 카프카로 주접떠다가 망한게 좀 있다. 오버 엔지니어링이었지만, 학습하는 과정에서 카프카를 사용해 봤다는 식으로 대답했는데, 이런 경우에는 카프카에 대한 자세한 설명을 해야 되지 않을까 하는 생각이 든다.
이 질문은 다대다 면접에서 공통질문으로 받았다.
답변 사례들:
이 질문을 받은 회사가 엄청 영세한 회사도 아니고 꽤 규모가 있는 솔루션 회사였기 때문에 왜 이런 질문을 했는지 아직도 궁금하다.
대부분의 답변: