지난 포스팅 취준 과정에서 배운 것들 - 인성편에 이어 기술편을 작성해보았습니다.
저의 경험들을 중에 취준 중이신 분들께 도움이 될만한 내용들을 정리해보고자 했습니다.
경험해본 코딩테스트 유형들
testdome
- 구현 위주의 코딩테스트에 사용되는 플랫폼이며, Java, Spring, SQL 위주로 경험했습니다.
- 주로 이메일로 링크가 전달되고, 최종 마감기한과, 시험 시작 후 제한시간이 주어집니다.
- 보통 난이도는 낮은 편이며 이 링크에서 연습해볼 수 있습니다.
codility
- 알고리즘 위주의 코딩테스트에 사용되는 플랫폼입니다.
- 마찬가지로 이메일 링크와 최종 마감기한, 시험 시작 후 제한시간이 주어집니다.
- 난이도는 문제에 따라 다르나, testdome 보다는 높다고 생각됩니다.
- 링크에서 연습해보는 것이 도움이 될 수 있습니다. 관리자가 어떤 결과를 전달받는지 확인할 수 있습니다.
오프라인 코딩 인터뷰
- 알고리즘 문제의 풀이 과정을 화이트보드에 풀이를 적는 코딩 인터뷰였습니다.
- 상당히 긴장되더라고요. 난이도가 높은 편이라고 생각합니다.
- 한 번이라도 동료와 연습해보신다면 크게 도움되실 것 같습니다.
온라인 코딩 인터뷰
- 리트코드에서 캠을 연결하고 함께 타이핑하며 문제를 출제받고, 코드를 작성하는 식이었습니다.
- 오프라인 보다는 긴장이 덜합니다만 문제의 난이도는 역시 문제에 따라 천차만별일 듯 합니다.
알고리즘이던 구현이던, 코딩테스트는 결국 평소 실력으로 보는 영역이지만,
유형과 플랫폼을 경험해보는 것은 도움이 될 겁니다.
경험해본 구현 과제들
자바, 스프링을 이용해 백엔드만 구현 또는, 간단한 HTML/CSS/JS도 필요했습니다.
- 이 경우, 프론트와 AJAX를 이용한 데이터 주고 받기와 예외 처리에 대해서도 검증하고자 함이었던 것 같습니다.
- 프론트 디자인 완성도에 대해선 평가하지 않을 거라고 사전에 고지해주시기도 했습니다.
중요 평가 요소라고 생각되는 키워드를 꼽아보자면 다음과 같습니다.
- 설계, 동시성 제어, 테스트 코드, 예외 처리, 코드 스타일, 커밋 컨벤션, 문서화
- 설계, 테스트 코드, 예외 처리, 코드 스타일, 커밋 컨벤션은 평소 실력으로 보는 영역 같습니다.
동시성 제어에 대해 개인적인 의견을 드리자면
- 광고는 아니지만.. 다시 돌아봐도 이 돈을 지불하는 게 나은 것 같아서 말씀드립니다.
- 이 강좌를 수강하시는 게 가장 효율적인 방법이라고 생각합니다.
- 동시성 제어에 대한 개념과 구현, 테스트 코드 작성 방법을 습득할 수 있습니다.
문서화에 대해 개인적인 의견을 드리자면
- Readme 생각보다 중요합니다. 코드 보다 먼저 보는 게 이겁니다. 구현한 과제의 첫인상이라고 봐도 무방합니다.
- 주제, 사용 기술, 아키텍처(이미지 추천), 구현 내용, 고민한 내용과 해결 방법 등을 구체적으로 서술하시면 좋습니다.
- 우테코에서 진행했던 저의 과제 예시가 참고가 되었으면 합니다.
테스트코드에 대한 의견을 드리자면
- 단위, 통합, E2E 테스트를 모두 작성하고 RestDocs로 문서화를 했었는데, 이에 대해 좋은 평가를 받았습니다.
- 최대한 테스트를 촘촘히 작성하고, 테스트코드가 곧 명세가 되게 작성하시면 좋을 듯 합니다.
- 개인적으로 생각하기에 매우 중요한 평가 요소라고 생각합니다.
동시성 제어의 개념과 구현, 그리고 이를 어떻게 테스트할 수 있는지는 강력한 무기가 될테니 꼭 준비해두시길 추천드립니다.
일부러 준비하고 공부하려 하지 않으면 얻어지지 않는 영역이어서 더욱 그러한 것 같습니다.
이외의 영역은 평소 실력과 성실한 코드 작성으로 채우실 수 있을 것 같습니다.
경험해본 면접 질문들
- HTTP, Java, 디자인패턴, Spring, 데이터베이스 등 대부분 백엔드 면접 단골 질문들에서 나왔습니다.
- 김영한님의 강의들에서 대부분 커버되는 내용이고, 데이터베이스는 Real MySQL로 커버가 가능할 듯 합니다.
- 스프링의 트랜잭션의 전파와 격리 레벨, 데이터베이스의 트랜잭션 격리 레벨과 락은 매우 단골 질문입니다.
- 대부분 포트폴리오로 제출했던 내용을 꼼꼼히 보시고 인터뷰를 진행해주셔서 감사한 마음이었습니다.
- 그만큼 내가 작업한 내용에 대해서는 깊이있게 알고 있어야 합니다.
- 주로 나오는 질문이 '그렇게 하면 ~한 문제가 있을 수 있는데 어떻게 개선할 수 있을지' 와 같은 질문입니다.
- 또다른 유형으로는, '대체 가능한 다른 기술에 대해선 고려해보지 않았는지'와 같은 질문입니다.
- 대답하지 못해서 가장 아쉬웠던 질문 두 가지를 꼽아보자면
- 하나는 커서 기반 페이징에 대한 역량 검증을 상황 질문으로 주셨는데 의도를 간파하지 못하고 동문서답을 했었던 것입니다.
- 이동욱님의 포스팅을 읽어보시면 금방 이해되실 겁니다. 그리고 이건 백엔드로서 중요한 역량이라 생각됩니다.
- 다른 하나는 동시성 제어에 대한 역량 검증을 상황 질문으로 주셨는데 제대로 답변하지 못했던 것입니다.
- Java의 Atomic 클래스들, synchronized 키워드, 스레드, OS스레드, 데이터베이스 락 등 꼬리질문이 가능합니다.
- 이 내용은 동시성 제어 관련 자료를 검색해보시면 아주 많으니 꼭 준비해두시길 추천드립니다.
- 하나는 커서 기반 페이징에 대한 역량 검증을 상황 질문으로 주셨는데 의도를 간파하지 못하고 동문서답을 했었던 것입니다.
인프런 김영한님의 스프링 완전정복 로드맵 내용은 다 준비해야 한다고 보시면 좋을 것 같습니다.
그 외 HTTP, 트랜잭션 격리, 전파, 락, 동시성 제어는 항상 질문받았습니다.
돌아보니 아쉬운 점
보다 전략적으로 학습했으면 좋았겠다 싶습니다.
- 끝을 알고 준비하는 것과 그렇지 않은 것에는 분명히 차이가 있습니다.
- 취준생 입장에서 공부의 목적은 취업이 가장 큰 부분을 차지할 수밖에 없습니다.
- 그렇다면 취업에 나오는 질문에서 내가 모르는 영역이 무엇인지 알고 시작했어야 했구나 싶습니다.
인프라에 너무 힘을 썼구나 싶습니다.
- 제로베이스에서 시작해, 3달을 들여 Github Actions, Jenkins, Nginx, SonarQube, SSL, Grafana, Prometheus, Loki, 무중단배포, CI/CD를 밑바닥부터 모두 직접 구현했습니다만...
- 취업시장에서 주니어 백엔드 개발자에게 요구되는 핵심 역량과는 거리가 있다는 걸 많이 느꼈습니다.
- 이동욱님도 최근 개발바닥에서 비슷한 말씀을 해주시더라고요. 백엔드 취준생들이 포폴용으로 인프라에 힘을 쏟는데.. 와 같이요.
- 물론 로깅, 모니터링, CI/CD, 무중단배포 아주 가치 있고 운영 레벨에서 꼭 해야 하는 작업이지만..
주니어 백엔드 취준생에겐 후순위라 생각합니다.
자료구조, 알고리즘, 코딩테스트는 빨리 시작했어야 했구나 싶습니다.
- 알고리즘 역량이 취업 시장에서 진짜 큰 무기가 됩니다. 기회의 폭이 현격하게 차이납니다.
- 코테를 준비하다보면 자료구조 지식은 따라올 수밖에 없는데, 이게 이후 학습에도 스노우볼이 크게 굴러갑니다.
- 가령, 트리 자료구조에 대해 깊이 있게 알고 있는 사람이라면, MySQL의 인덱스에 대해 이해하기 쉬울 겁니다.
CS 준비를 더 빨리 시작했어야 했구나 싶습니다.
- 유튜브 채널 쉬운코드, 널널한 개발자 두 채널에 있는 내용을 하나씩 꾸준히 섭렵하시길 추천드립니다.
- 퀄리티가 엄청납니다. 취준에 도움될 뿐만 아니라 이후 커리어에도 꼭 필요한 내용들입니다.
고작 몇 달 지난 것인데, 지나고나니 보이는 게 많습니다.
자료구조, 알고리즘, CS 지식은 앞으로도 계속해서 쌓아가야겠습니다.
감사한 일들
스프링MVC의 아키텍처를 이해할 수 있었습니다.
- 어렵다고 느껴져서 미루기만 하다가, 김영한님 강의로 스터디를 하며 깊이 있게 이해되었습니다.
- 한 면접관분으로부터 '자신이 들어본 스프링MVC의 요청 처리 과정에 대한 답변 중 가장 좋았다'는 피드백을 받았습니다.
- 어렵다고 느껴졌던 걸 깊이 있게 이해한 경험이 앞으로의 학습에도 자신감이 되어주고 있습니다.
설계, 구현, 테스트, OOP 역량이 향상되었습니다.
- 위 주제들은 혼자 공부해서는 높은 효율을 내기 어려운 주제들이라고 생각합니다.
- 우테코 레벨 1, 2에서 주어지는 미션들을 수행하며 많은 고민과 토론 끝에 저만의 틀이 생겼습니다.
- 한 회사에 제출한 과제에 대해 피드백을 받았는데, 자바 스프링에 대한 이해도가 좋아보인다 는 피드백을 받았습니다.
양질의 컨텐츠를 생산해주시는 선배 개발자분들께 감사합니다.
- 김영한님, 쉬운코드 채널, 널널한개발자 채널등 많은 선배 개발자분들을 통해 정말 많이 배우고 있습니다.
- 저도 배울점이 있는 개발자로 성장할 수 있도록 정진하겠습니다.
좋은 면접 문화를 만들고 계시는 회사, 선배 개발자분들께 감사합니다.
- 돌이켜보면 모든 면접들에서 정말 많은 배려를 받아왔다고 느낍니다.
- 인사팀 분들 모두 매우 친절하셨고, 인터뷰 자리도 다들 최대한 편하게 해주셨습니다.
- 대부분의 경우, 제가 제출한 이력서와 포트폴리오를 읽고 인터뷰를 준비해오신 걸 느낄 수 있었습니다.
항상 저에게 필요한 모든 것이 주어져 있고 저만 열심히 하면 되는 감사한 환경에 있다고 느낍니다.
도움 주시는 모든 분들께 감사드립니다.
'Thoughts & Records' 카테고리의 다른 글
자바 백엔드 무료 멘토링 합니다. (2) | 2024.04.08 |
---|---|
가치관으로 경영하라를 읽었습니다 (0) | 2023.02.26 |
취준 과정에서 배운 것들 - 인성편 (7) | 2023.02.14 |
우아한테크코스 레벨3 팀 프로젝트 복기 (0) | 2022.08.21 |
자유의 비용과 협상의 필요성 (0) | 2022.08.15 |