이번에 우아한 테크캠프 테스트 참여했었습니다. 결론부터 말하자면, 1차는 합격했으나.... 2차 과제 테스트에서 결국 떨어졌습니다. 제 실력의 부족이겠죠... 그래서 간단하게 회고록을 작성해보고자 합니다.
🔒 1차 코딩 테스트
- 언어 : Java만 가능
- 문제수 : 알고리즘 3문제 + CS 5문제
- 시간 : 3시간 (13:00 ~ 16:00)
- 제약조건:
- 인터넷 검색 및 레퍼런스 금지
- 물 마시기, 화장실 가기 금지
- 외부 IDE 금지
- A4 용지 1장까지 사용 가능
- 웹캠과 휴대폰 감독 둘다 필수
코테 문제 난이도는 굉장히 쉬웠습니다. 대충 백준으로 치자면 실버3 ~ 골드 5 정도 수준이었다고 봅니다.
Java로 백준좀 어느정도 풀어봤다하면 그냥 다 풀 수 있는 정도였습니다.
알고리즘은 정렬, 백트래킹, 수학 이 정도였고, DP나 BFS 등의 특정 알고리즘을 전혀 요구하지 않았습니다.
CS 5문제도 굉장히 쉬웠습니다. 컴퓨터 네트워크, 데이터베이스, 자료 구조, 정보 보 등등 백엔드 개발에서 꼭 알아야되는 기본적인 CS 지식들이 나왔습니다. 거의 백엔드 개발과 연관이 깊은 CS 위주로 나왔습니다.
또한, CS문제는 전부 객관식이었는데, 어느정도 알고 있다면 답을 쉽게 알 수 있을 정도로 매우 쉬웠습니다. 그래서 아마 알고리즘 올솔 + CS 올솔 해야 1차 합격을 했지 않았나 생각해봅니다...
저는 다맞고, 1차 합격할거라고 확신하고 제출했습니다.
그리고 이렇게 합격했다고 메일을 받았습니다.
틈틈히 백준 문제도 풀고, CS 공부도 해왔기 때문에 무난하게 통과했다고 생각합니다.
📝 2차 과제 테스트
- 프레임워크 : Spring Boot + Gradle
- 시간 : 4시간 (13:00 ~ 17:00)
- 제약조건:
- 인터넷 검색 및 레퍼런스 허용
- 물 마시기, 화장실 가기 금지
- 외부 IDE 사용 허용
- A4 용지 1장까지 사용 가능
- 웹캠과 휴대폰 감독 둘다 필수
- Chat GPT 및 Postman 이용 불가
- 주어진 라이브러리 외 라이브러리 사용 불가
과제 테스트는 로그인 및 CRUD를 Spring Boot로 구현하는 것이었습니다.
롬북이나 JPA는 포함되어 있었습니다.
기본적으로 Test Code들이 주어져있고, 이를 통과하면 되는 방식입니다.
저는.... 이 과제 테스트를 너무 만만하게 봤습니다. 우테캠 6기 후기도 보면 단순 로그인 + CRUD라길래,"맨날 하루종일 하고 있는건데 쉽지 뭐"라고 생각했습니다. 하지만... 저는 너무 자만했던 것 같습니다.
우선, 외부 IDE 사용이 허용 됐지만, 일단 기본적으로는 웹 Vs Code 환경에서 시험이 진행됩니다. 하지만, 파일을 다운받을 수 있는 방법이 없습니다. (개별 파일은 다운 받아지지만, 전체 파일 다운로드가 안됐음) 그래서 Intellij로 개발하고 싶으면 하나하나 코드를 복사해가고, 제출전에 다시 옮겨야 됩니다.
저는... 외부 IDE를 사용하려고 시도했으나, 알 수 없는 오류가 발생해서 포기하고 결국 웹 VsCode 환경으로 개발을 진행했습니다. 하지만, 저는 VsCode를 혐오해서 잘 안쓰다보니.... 너무 익숙하지 않고 어려운겁니다. 너무 JetBrains사의 IDE에 뇌가 절여져서 그런지 몰라도... 그래서 제대로 진행하지 못했었습니다.
두번째, 문제에서 주어진 Spring 버전은 2.7이었습니다. 저는 항상 3.0 대 버전으로 개발을 진행해왔습니다. 그런데 생각보다 3.0 번대 버전이랑 2.0번대 버전이랑 문법적인 차이가 좀 있는 겁니다. 그래서 항상 하던건데 이거 왜 안되는거지? 왜 이 문법이 오류나는거지? 너무 당황했습니다...
세번째, 제가하는 프로젝트의 구조나 문법, 구현 방식에 너무 익숙해져있다는게 문제였습니다. 이게 무슨 말이냐면, 프로젝트 구조나 문법 등 전체적으로 제가 하던것과 다르고, 특히 JWT 토큰 검증 부분에서 저는 항상 Filter를 이용해서 개발해왔습니다. 단 한번도, Interceptor를 쓸 생각을 못해봤죠 (인터셉터가 뭔지는 알고는 있었지만) 그러니깐 한번도 안해본걸 하다보니 제대로 구현도 못하겠고 계속 오류나고, 원인도 모르겠고 멘탈이 터졌었습니다. 또 다른 예시로, 저도 공통 API Response를 정의해두고 개발을 하는데, 이를 호출하는 방식에 제가 구현하는 방식과 많이 다른겁니다. 그래서 아니 맞는데 왜 안되는거야..? 이렇게 하는거 아닌가? 엄청 당황했습니다.
아무리봐도, 제가 너무 자만했던 것 같습니다... 저는 우물안에 개구리였던겁니다. 제출하면서 이건 무조건 떨어졌구나 예감했습니다. 이런 시험봤을 때 제 감은 항상 정확했기 때문에....
그리고 5/8에 결과 메일이 왔고 예상한대로였습니다. 이미 알고 있었기 때문에 그렇게 상심하지 않았습니다. 제가 너무 거만했던 것 같다고 느꼈고, 이를 반성하는 계기가 되었습니다.
📌 마지막으로 할 말
"자신이 현재 하고 있는 프로젝트에서 잘한다고 너무 자신에게 심취하지 말자" 이게 이번에 제가 느낀점입니다. 개발이라는 분야는 새로운 기술이 끊임 없이 나오고 무궁무진한 발전 가능성을 지닌 분야입니다. 즉, 현재 내가 잘하고 안다고 느끼는 것은 전체 개발에서 극히 일부라는 것을 명심합시다. 성장하기 위해서는 끊임 없이 도전해보고, 다양한 프로젝트의 참여해 어떤 구조로 되있는지 알아보고, 다른 사람과 협업해서 이 사람은 어떻게 코드를 최적화 했지? 연구해보고, 서로 코드 리뷰 해보고, 새로운 기술에 거부감을 느끼지 말고 연구해봐야됩니다.
또한, 개발 방법을 한가지로 단정짓지 말자입니다. 앞서 소개한 것 처럼, JWT 토큰 확인을 Filter 단에서 할 수도 있고, Interceptor 단에서 할 수도 있고, 또 API Gateway를 구축해서 그곳에서 처리하게도 할 수 있습니다. 또다른 예시로 내가 "실시간 검색어" 기능을 구현하다고 해봅시다. 이는 단순 RDB의 Order By로도 구현할 수 있고, ElasticSearch로도 구현할 수 있고, Redis의 Sorted-set을 이용해서도 구현할 수 있습니다. 하지만, 다른 방식은 쳐다보지도 않고 "이 방법이 제일 이해가 쉽고 편하네~"라고 생각하고 그 방식으로만 개발한다면 개발자로서 발전이 전혀 없습니다. 각각 방식이 어떤식으로 구현하는지 보고, 어떤 장점이 있고 단점이 있는지 알아보고, 우리 프로젝트에 맞는 방식으로 적용해야됩니다.
제가 이번 테스트를 보고 어려운건 이해하지말고 무시하고, 개발하기 편한 방법으로만 택하자! 이 마인드가 굉장히 안좋다는 것을 뼈저리게 느꼈습니다. 그래서, 이후로 어떤 기능을 도입해야된다하면, 어떤 기술 스택을 활용해서 어떻게 개발하는지 여러가지 알아보고, 그 중에서 택한 뒤, 내가 왜 그 기술을 선택하고 도입했는지 팀원들에게 설명하려고 노력하고 있습니다.
이상 우테캠 회고를 마치겠습니다.
'활동 > 회고' 카테고리의 다른 글
[회고] 작심심주 오블완 챌린지 시작하기 (0) | 2024.11.06 |
---|---|
[회고] 캡스톤 졸업 프로젝트를 마치며 (feat. 외국민 프로젝트) - (2) (0) | 2024.06.23 |
[회고] 캡스톤 졸업 프로젝트를 마치며 (feat. 외국민 프로젝트) - (1) (1) | 2024.06.22 |
[회고] 한국지능정보시스템학회 춘계 학술 대회 회고 (4) | 2024.05.12 |