이 포스트는 현재 작성중입니다
우아한테크캠프
우아한형제들의 교육 프로그램인 우아한테크캠프 7기가 시작됐습니다.
이번에는 Java 백엔드 트랙만이 준비되었고, 이전의 8주→10주로 교육기간이 연장 되었습니다.
지원 전형은 접수 → 1차 코딩테스트 → 2차 과제테스트 → 서류접수 → 면접 단계로 이루어집니다.
커리큘럼
또한 기존의 TDD, 클린코드, Spring, JPA 등을 다루었던 교육에서 서블릿, JSP등 하위 동작들에 대한 교육 내용으로 일부 변경이 있었습니다.
지원 이전에
사실 이번 우테캠 지원 이전에 나는 자바와 스프링과는 거리가 있는 사람이었다. 그동안 해본 자바 공부는
- 10년 전에 본 자바 기초서 <난 정말 Java를 공부한 적이 없다구요>
- 2년전에 학교 ‘인터넷 프로그래밍’ 강의에서 배운 JSP와 기말 프로젝트
이렇게 한번도 접해보지 못한것은 아니지만, 제대로 스프링으로 프로젝트를 해본 경험이 없었다.
그렇기 때문에 좀더 빠르게 다른 사람들과 함께 공부하며 성장해나가고 싶은 마음에 우아한테크캠프에 지원하기로 결정했다.
1차 코딩테스트
2024.04.13(토)
코딩테스트는 3시간동안 진행되었으며, Java 언어 한정, 레퍼런스 금지, 프로그래머스 플랫폼으로 진행되었다.
전체 문제는 알고리즘 코딩 3문제와 CS 객관식 5문제로 출제되었다.
준비
코딩테스트전 준비는 자바로 문제풀이를 해본 적이 없어, 프로그래머스 기초문제를 자바로 풀어보며 준비했다.
기존에 파이썬과 C++을 이용해 PS를 자주했는데, 자바로 해보며 느낀점은 Array와 List 변환과, 문자열과 Stream등이 처음 써볼때는 어색한 느낌이 들었다.
레퍼런스를 보는것도 불가능하기에, sort와 List, Array 전환등을 공부하고, 암기…하여 코딩테스트에 임했다.
문제
- 알고리즘 3문제
- 간단한 정렬 문제
- 백트래킹, 재귀 구현 문제
문자열과 숫자 변환을 하며 풀었던 문제로 기억하고, 자바로 자주 문제를 풀어보아서 문자열과 정수 전환등이 익숙하다면 큰 문제없이 풀이할 수 있을 것 같다.
- 수학 문제
구현 상 두 선의 교점을 구하는것과 비슷한 문제가 나왔던 것으로 기억한다. 특이 케이스에 대한 예외 처리만 해주면 문제없이 풀 수 있을 것 같다. 사람들 말로는 이진 방식으로도 풀이가 가능하다고.
- CS 객관식 5문제
CS 문제는 생각보다 넓은 범위에서 출제되었다. 일반적인 CS 과목에서 배울만한 내용부터, 메세징 큐등의 내용도 있었다.
그러나 크게 깊거나 난이도 있는 문제는 아니여서, 얕고 넓은 지식으로도 풀이가 가능했다. 또 개인적인 생각으로는 문제를 자세히 본다면 적절히 추론해서 풀 수도 있게 유도하신 것 같다.
2차 과제테스트
2024.04.20(토)
과제 테스트는 스프링 부트의 CRUD + 인증을 구현하는 문제가 주어졌다.
환경은 Java 17, Spring Boot 2.7.1, Gradle 7.4.1 으로, 스프링부트 3버전을 사용해온 사람 입장에서는 조금 어색했을 수도 있을 것 같다.
프로그래머스 내부의 환경은 VSCode와 비슷한 환경으로 되어있고, 외부 IDE 사용과 레퍼런스 검색이 가능했다. 다만 타인과의 대화 또는 ChatGPT의 이용은 불가능한 것으로 보인다.
준비
레퍼런스 사용이 가능한 환경이니, 몇몇 스프링 프로젝트를 레퍼런스로 미리 준비해두고, 상세한 코드는 테스트를 치며 검색해보자는 생각으로 준비했다.
이때도 한창 스프링 기초를 공부하고 있을 때라
- 스프링의 핵심 개념인 Bean, DI
- Spring Boot의 사용 이유
- JPA & Hibernate 기초
- 컨트롤러에서 HTTP 메소드별 맵핑, Path와 Body에서 값 받기, Status code 지정법
정도의 지식만을 가지고 테스트에 들어갔다.
사실상 레퍼런스 그리고 다소 탄탄하게 쌓은 기본 Spring 구조 지식, 다른 웹프레임워크를 사용했던 경험을 믿고 도전했다.
문제
문제는 대부분 예상할만한 구조로 출제되었으며, 다들 인증부분과 관련하여 난이도가 있다고 느끼신 것 같다.
풀이는 전체 테스트케이스의 50%정도를 풀었다고 생각하는데, 정말 결과상 작동만 하는것이 이 정도이고, 내부 코드의 수준은 처참했다…
결과
다행히도 초반부분이 높은 난이도로, 다같이 모르는 내용이어서 그런지 운좋게 합격할 수 있었다.
다만 이는 요행으로 통과한 부분으로, 실제 평가를 할때는 단순 요구사항 구현 수준 만이 아닌, 언어 이해 및 활용도, 코드 설계 수준을 깊게 보시는 것 같다.
즉, 어느정도 자바와 스프링에 대한 지식과 경험이 있고, 깔끔한 구조를 고민해본 사람이 통과하기에 더 쉬워보인다.
서류
마감: 2024 5월 중반
면접
준비
면접
2024 5월~6월
후기
면접은 과제 테스트 당시의 코드나 포트폴리오에 관련한 사항들로 기술 질문들이 많이 나왔다.
사실 여러 후기들을 보며 인성 면접부분이 많은 부분을 차지할 것이라 생각했는데, 자기소개서를 너무 못써서인지… 그렇지는 않았다.
- 아쉬웠던 점
우선 과제 테스트 당시의 코드를 제대로 다시 체크해보지 않았는데, 생각보다 훨씬 이상하게 작성되어 있었다. 당시 아무것도 몰랐다지만, 정말 보일러플레이트 코드조차 제대로 사용하지 못해 이상한 방식으로 구현되어 있는 것들이 많았다. 그래서 한번쯤 리뷰해 볼껄, 하는 후회가 남는다.
그래도 이번 면접으로 다시 돌아보며 뭔가 학습해 볼 키워드를 여럿 얻을 수 있었다는 것이 좋다면 좋았던 점인것 같다.
이뿐만 아니라 기존에 알고 있던 CS 지식이 확실히 정리되지 않아 실수하기도 했다.
다형성에 대한 답변을 해야하는데, 머리속에서는 다형성 = upcasting, downcasting, virtual, pure virtual function, abstract class 과 같은 C++의 복잡한 것만이 생각나서 답변을 하지 못했는데, 다시 찾아보니 다형성은 좀더 보편적인 개념으로 흔히 쓰이는 메소드 오버로딩/오버라이딩도 포함하는 개념이라는 것을 알았다.
CS에 관한것들을 간단히 치트시트 만들듯 키워드 위주로 정리하며 공부해볼 필요성을 다시 느꼈다.
또한 면접에서의 답변을 다시 회고해보며 큰 문제점 2가지를 찾았다.
- 학습시에 전반적인 구조나 개념은 추상적으로 기억하나 명확한 키워드를 기억하지 못함
- 생각을 정리해서 말을 조리있게 하지 못함
주기적으로 다시 빠르게 학습할 수 있게 간단히 정리해보고, 말은 면접을 많이 시도해보며 늘여야겠다.
결과
최종 결과는 탈락이었다.