📌 들어가며
감사하게도, 우아한테크코스 1차 심사에 합격했다. 메일을 읽던 당시, 혼자 집에 있었음에도 기쁨에 소리 질렀던 기억이 아직도 생생하다. 동시에 "내가 해낼 수 있을까? 하는 불안감도 밀려왔다. 하지만, 지원서와 프리코스를 통해 보여드리고자 했던 꾸준함과 끈기를 떠올리며, 결국 최종 코딩 테스트에서는 지금까지 쌓아온 노력을 온전히 담아내기만 하면 된다는 마음으로 임했다.
🔥 준비 과정
프리코스가 끝난 후, 다른 지원자들이 스터디를 꾸려 일주일에 한 번씩 꾸준히 문제를 푸는 모습을 보며 나도 연습을 해야 하지 않을까 고민했다. 하지만 내가 연습하지 않았던 이유는 밀린 프로젝트와 시험 때문이기도 했지만, 가장 큰 이유는 연습을 지속하다가 1차에서 떨어졌을 때 받을 감정적인 타격이 두려웠기 때문이다.
사실 우아한테크코스에 지원할 당시에 (지원서는 정말 열심히 쓰긴 했지만), 떨어진다면 내년에 다시 지원하면 된다는 가벼운 마음으로 시작했다. 그러나 프리코스를 진행하면서 성장하는 내 모습이 눈에 띄게 보였고, 회고를 하나하나 정성 들여 작성하다 보니 자연스럽게 본 과정에 참여하고 싶다는 간절함이 커져갔다. 이 과정에서 스스로 더 큰 기대를 품게 되었고, 그만큼 탈락에 대한 두려움도 커진 것 같다. 이성적으로는 실패를 잘 털어내고 빨리 일어서는 것이 중요하다는 것을 알면서도, 막상 그 순간이 오면 감정적으로 속상해할 내 모습이 뻔히 그려졌다.
그러다 보니 1차에 합격한 후, 일주일 뒤에 바로 기말 시험이 있음에도 불구하고, 모든 걸 뒤로 미룬 채 미친 듯이 문제를 풀기 시작했다. 남들보다 부족했던 시간을 메우기 위해 두 배로 노력해야 했다.
▶︎ 합격 후기 분석
처음에는 우아한테크코스 합격자의 공통점을 분석했다. 대부분이 제한된 시간 안에 문제를 해결하는 연습을 열심히 해왔고, "일단 돌아가는 쓰레기를 만드는 것이 중요하다"라는 내용을 자주 볼 수 있었다. 무엇보다도, 직접 스스로의 힘으로 코딩 테스트를 구현해 내는 것이 중요해 보였다. 또한, 리팩토링할 부분들을 깊이 회고하며 문제를 개선해 나가는 과정을 통해, 이들이 얼마나 많은 연습을 했는지, 그리고 문제의 핵심을 정확히 파악하는 능력을 갖춘 사람들인지 느낄 수 있었다.
▶︎ 연습
이와 같은 방식으로 시간을 기록하며, 5시간 안에 문제를 해결하는 것을 목표로 연습했다.
아래 과정을 철저히 지키며 최대한 빠르게 연습하려고 노력했다. 실제 현장에서는 긴장으로 인해 시간이 부족할 수 있으니, 연습 단계에서 시간 단축을 목표로 삼았다.
- 기능 목록 구현 (최대 30분)
- 기능 구현 (최대 3시간)
- 리팩토링
- 테스트 코드 작성
- 제출 서류 작성 (미리 작성해 두고, 추가 제출란이 있다면 최대 10분)
처음에는 테스트 코드를 작성한 후 구현하는 것이 익숙한 방식이라, 시간을 지키는 데 약간 어려움을 겪었다. 이후 접근 방식을 바꿔, 테스트 코드는 가장 마지막에 작성하고 기능 구현을 최대한 빠르게 끝내는 데 중점을 두었다. 이를 통해 시간을 효율적으로 활용하는 연습을 이어갔다.
▶︎ 풀었던 문제
💻 최종 코딩 테스트
▶ 전날
전날에는 일찍 잠자리에 들었고, 입장 시간인 12시에 맞춰 도착할 수 있도록 일찍 일어난 뒤, 아침까지 든든히 챙겨 먹고 출발했다.
시험 전에 준비해야 할 것들을 모두 작성해 철저히 준비했고, 소감문도 미리 작성해 갔다. 특히 소감문을 미리 작성해 간 것이 정말 중요했다. 현장에서 시간이 부족할 것을 대비해 예쁘고 정돈된 소감문을 미리 작성해 간 덕분에 구현에 더 집중할 수 있었다.
▶ 당일
오전 11시 30분쯤, 잠실로 향하는 지하철 2호선을 타고 한강을 지나게 되었다. 이 플레이리스트를 들으며 반짝반짝 빛나는 한강을 바라보니 묘한 기분이 들었다. 괜히 가슴이 벅차오르기도 했다.
14층에 도착하니 입장 시간인 12시임에도 불구하고 사람들이 정말 많았다. 신분증 검사를 마친 뒤, 굿즈를 챙겨서 시험장으로 입장했다. 굿즈에는 펜, 피규어, 공책, 스티커가 포함되어 있었다. 마침 공책 필요했는데...! 너무 센스 있는 선물이었다.
나는 뷰티풀샷 시험장으로 안내받았다. 이때부터 심장이 막 쿵쾅쿵쾅 뛰기 시작했고, 긴장을 풀기 위해 화장실도 일부러 세 번 이상 다녀온 것 같다. 시험장에는 온라인에서만 뵀던 코치님들도 계셨는데, 화면 속에서만 보다가 실제로 뵈니 마치 연예인을 만난 듯한 기분이었다. 아 그리고 옆자리 예쁜 언니가 사탕도 주셨는데, 감사해서 마음이 따뜻해졌다. 본 과정에서 뵐 수 있었으면 좋겠다. 🫶🏻
재밌던 일화도 있었다. 시험 전 코치님께서 "5분 정도 쉬는 게 오히려 도움이 될 수 있다"고 말씀하셨는데, 5분은커녕 1분 이상 쉬는 사람조차 없었던 것 같다. ㅋㅋ
▶ 시험 시작
https://github.com/soeun2537/java-attendance-7-soeun2537
GitHub - soeun2537/java-attendance-7-soeun2537: 우아한테크코스 7기 최종 코딩 테스트
우아한테크코스 7기 최종 코딩 테스트. Contribute to soeun2537/java-attendance-7-soeun2537 development by creating an account on GitHub.
github.com
최종 코딩 테스트 문제는 우아한테크코스의 출석 관리와 관련된 문제였다. 문제를 받자마자 "아... 역대급이다"라는 생각이 들었다. 문제 자체는 어렵지 않았지만, 그동안 준비하며 풀어봤던 모든 코딩 테스트를 합쳐놓은 듯한 느낌이었다.
파일 읽어오기, 기능 선택 후 특정 로직 실행, 상태 저장(Repository 형태 활용) 등 다양한 기능이 필요했고, 개인적으로는 페어매칭 과제보다 양이 훨씬 많게 느껴졌다. 그래도 다행히 편의점 과제처럼 빡구현을 요구하는 문제는 아니었다.
5시간 안에 모든 것을 완벽히 구현하기는 어렵겠다고 판단했고, 시간이 갈수록 그 생각은 더 확신이 들었다. 시험장 내에서 계속 한숨 소리가 들렸다. 마음을 차분히 가라앉히려 노력했다. 에어팟으로 빗소리를 들으며 준비한 대로 기능 목록 작성부터 차근차근 시작했다.
▶ 트러블슈팅
기능 목록을 작성한 뒤, 입력과 출력 처리를 완료하고 1번부터 4번까지 차례대로 문제를 구현하기 시작했다. 특히 3번 기능이 고비였다. 이 기능은 특정 사용자를 선택해 출석 기록, 출석/지각/결석 총합 조회, 면담/제적/경고 대상자 판별 및 출력 등 여러 로직을 처리해야 했다. 에러를 해결하며 3번을 마무리하고 나니, 남은 시간은 약 1시간 30분 정도였다. 연습할 때는 7기 4주차 편의점 과제를 제외하고 기능 구현까지는 항상 3시간 안에 끝낼 수 있었던 터라, 시간이 부족하다는 생각에 조금 마음이 급해졌다.
문제는 그때부터였다. 모든 기능 구현을 마친 뒤 1시간이 남았고, 테스트를 돌려보니 5개 테스트가 모두 빨간 불로 실패하는 역대급 시련이 찾아왔다... 테스트는 1~3번이 예외 처리를 검증하는 테스트였고, 4번과 5번이 비즈니스 로직을 검증하는 테스트였다. 당시에는 너무 당황한 나머지 닥치는 대로 코드를 고치기에 급급했다. 하지만 차분히 돌아보니, 1~3번 테스트는 내가 예외 처리를 제대로 하지 않아 실패한 것이었고, 4번과 5번은 비즈니스 로직 구현에서 약간의 실수가 있었던 것이었다. DateTimes 라이브러리를 사용하지 않으면 테스트 코드가 정상적으로 작동하지 않는 문제가 있었다. 또한, 이전에 연습했던 과제들은 입력에서 에러가 발생하면 해당 부분부터 다시 사용자 입력을 받도록 처리했지만, 이번 최종 코딩 테스트에서는 입력 에러 발생 시 프로그램을 종료해야 했다. 항상 요구사항을 꼼꼼히 읽는 연습을 해왔지만, 문제를 받자마자 마음이 급해지면서 연습했던 방식대로 진행하지 못하고 여러 중요한 사항을 놓쳤던 것이다. 처음 기능 목록을 작성할 때 스치듯 지나쳤던 요구사항이 떠오르면서, 마음을 다잡고 차근차근 문제를 해결하기 시작했다. 예외 처리까지 완료했지만, 4번 테스트만 여전히 실패했다.
단순히 생각해보면 LocalDateTime 파싱 오류로 인한 실패였다. 그러나 당시에는 너무 급하고 당황한 탓에 우왕좌왕하며 정확한 원인을 찾지 못했다. "4개라도 맞추자"라는 마음으로 우선 코드를 제출했고, 테스트 5개 중 4개를 통과했다. 이후 급하게 파싱을 처리하고 나니 최종적으로 5개 테스트 모두 통과시킬 수 있었다.
이후 메서드를 추출하고 리팩토링을 진행하던 중 시간이 끝나버렸다. 연습한 대로 모든 것을 완벽히 보여드리지 못한 점이 너무 아쉬웠다.
▶ 아쉬웠던 점
그날 집에 돌아와 복기해 보니, 아래와 같은 아쉬운 점들이 눈에 띄었다.
- 오늘 날짜 안내 및 날짜 에러 메시지에 요일 파싱 누락
- 크리스마스 공휴일 처리 누락
- 이미 출석한 경우에 대한 에러 처리를 누락
- 캠퍼스 운영 시간 외 출석 불가 에러 처리를 누락
- 이미 출석 확인된 경우에 대한 에러 처리를 누락
- 제적 위험자 정렬 기능 누락
- 제적 위험자 관련 하드코딩된 값을 Enum으로 추출하지 못함
- 메서드가 15라인을 초과한 경우 존재 (AttendanceController, AttendanceRepository)
- 인덴테이션 2단계까지 제한을 지키지 못함 (AttendanceController)
- 테스트 코드를 작성하지 못함
- 기타 리팩토링해야 할 부분들 다수 존재
사실 시간이 단 1시간, 아니 30분만 더 있었더라도 좀 더 깔끔하고 완성도 높은 코드를 작성할 수 있었을 것 같아 너무 아쉬웠다. 준비 과정에서 더 빠르게 연습하지 못했던 탓이다.
💭 회고
아쉬운 점이 많이 남았던 최종 코딩 테스트였지만, 5시간 동안 몰입해 무언가를 구현해 보는 경험은 처음이라 색다른 도전이었다. 그리고 우아한테크코스를 통틀어 깨달은 점이 있다.
프리코스에서 에러가 발생할 때마다 인상을 쓰고 힘들어하기보다는, 지식을 얻는 과정이라 생각하며 즐기려고 했더니 해결했을 때의 뿌듯함과 배움의 깊이가 배가되었다. 최종 코딩 테스트를 준비하면서도 불안에 휩싸이는 대신, 타임어택 게임처럼 재미있는 도전 과제로 여겼더니 오히려 집중력과 몰입도가 더 높아졌다.
우아한테크코스에서 강조하는 "몰입"이라는 키워드를 통해 나는 이러한 점을 배웠다. 이 과정이 단순히 기술만을 배우는 것이 아니라, 문제를 대하는 태도와 마음가짐을 배우는 여정이라는 생각이 들었다. 이게 우아한테크코스에서 전하려는 핵심 덕목 중 하나가 아닐까 싶어 감사한 마음도 함께 들었다.
🎬 마무리하며
정말 합격해서 최종 후기를 꼭 작성하고 싶다. 지원서부터 프리코스, 최종 코딩 테스트까지의 과정을 돌아보며, 팁과 후기를 기깔나게 정리할 자신이 있는데, 사실 좀 간절한 것 같다. 1차 합격도 간절했는데, 사람 마음이란 게 참 간사한지 최종 코딩 테스트를 치르고 나니 본 과정에 대한 욕심이 더 커졌다.
모쪼록 좋은 기회를 주신 우아한테크코스 팀께 진심으로 감사드리며, 27일까지 좋은 결과를 기다려 보려 한다. 함께 준비했던 모든 분들, 정말 고생 많으셨습니다!
'우아한테크코스' 카테고리의 다른 글
[우아한테크코스] 최종 합격 기록 (7) | 2024.12.29 |
---|---|
[우아한테크코스] 프리코스 4주차 기록 (3) | 2024.11.12 |
[우아한테크코스] Java Enum 활용기 (4) | 2024.11.05 |
[우아한테크코스] 프리코스 3주차 기록 (8) | 2024.11.05 |
[우아한테크코스] 프리코스 2주차 기록 (2) | 2024.10.29 |