본문 바로가기
회고/코딩테스트 회고

[우테캠] 우아한테크캠프 7기 - 2차 과제테스트 회고

by NewCodes 2024. 4. 22.

 

안녕하세요! NewCodes입니다!!

 

우아한 테크캠프 7기

 

 

우테캠은 자바 기반의 교육형 인턴 프로그램이라 볼 수 있습니다!

 

여름방학 때만 이루어지기에

대학생도 노려보기 좋은 캠프입니다!!

 

지원자격도 졸업자, 재학생

모두 지원 가능하다고 나와있습니다!

 

1차 합격

 

운이 좋게 1차 코딩테스트에 합격하여

2차 과제테스트를 응시할 수 있었습니다!!

 

이에 대한 저의 회고와 약간의 Tip을 공유해보고자 합니다!

 


📌 2차 과제테스트 참고 사항

개인적으로 2차 과제테스트를 준비하며, 관련 정보를 많이 찾아볼 수는 없었습니다 ㅠㅠ 자세한 정보를 찾기가 힘들더라고요

 

그래서 제가 찾은 정보들과 함께 이번 과제테스트에 대해 공개할 수 있는 선에서만 기재해보도록 하겠습니다!!

 

  • 제한 시간: 4시간 (13:00 ~ 17:00)
  • 감독: 화상감독 (프로그래머스 + 모니토 앱)
  • 환경 정보
    • 프로그래머스 (vscode)
    • Java 17
    • Spring Boot 2.7.1
    • Gradle 7.4.1
  • 제약 조건
    • 인터넷 검색, 레퍼런스 허용
    • 외부 IDE 사용 허용
    • 메모(빈 종이, 펜) 허용
    • 외부 라이브러리 금지
    • 식음료 섭취 금지
  • 주어지는 과제
    • Java / Spring Boot 기반 베이스코드
    • 문제 요구 사항 명세서
    • 각 클래스 별 테스트 코드

 

외부 라이브러리 사용이 불가능하지만, 주어지는 프로젝트에서 의존되어 있는 건 사용가능합니다. 이번 과제에서는 롬복과 JPA가 포함되어 있어 사용이 가능했습니다. 

 

하지만, 의존이 안 되어 있으면 사용이 힘들기 때문에 외부 라이브러리에 의존하지 않고 구현하는 연습을 해보시는 걸 추천드립니다. 그리고 DB 연동도 JDBC로 직접 쿼리 날려보는 연습도 해보시면 좋겠네요!

 

참고로 chatGPT와 같은 AI는 사용 불가능합니다! 웬만한 프로그램은 사용하기 힘들 거라고 보시면 될 것 같습니다. 인터넷 검색, 깃허브 참고, 책 참고 정도는 되는 것 같습니다~

 

 


🔥 과제테스트를 준비한 과정

4월 4일 ~ 4월 20일 17일 간의 여정이 끝났습니다!

  • 4월 4일 ~ 13일: 알고리즘 준비
  • 4월 14일 ~ 20일: 과제테스트 준비

'프로그래머스에서 잠깐 문제 풀어볼까~' 하면서 사이트 들어갔는데, 배너에 모집 공고가 떠있길래 놀랐던 기억이 나네요 ㅎㅎ.. (작년에는 5월 달에 테스트가 이루어졌는데, 올해는 4월 달에 이루어졌습니다!) 그래서 부랴부랴 4월 4일부터 알고리즘, 스프링에 대한 준비를 했었습니다. 

 

과제테스트를 깊게 준비하진 못했습니다. 스프링을 많이 다뤄본 상태가 아니었고, 준비 기간도 부족했습니다. 그래도 단기간에 과제테스트에 통과할 실력을 갖추기 위해 노력해 왔던 과정을 정리해보고자 합니다. 

 

1. 스프링 동작 원리 이해하기

스프링 입문 강의(김영한)

 

: 과제테스트를 원활하게 치르기 위해서는 무엇보다도 스프링에 대한 이해도가 높아야겠다고 생각했습니다. 무에서 유를 만드는 과제테스트가 아니라, 이미 짜여진 베이스코드가 주어지고 정해진 요구사항이 있는 테스트였기 때문입니다. 

 

단순히 스프링 조금 써봤다고 해서 쉽게 풀 수 있을 법한 과제테스트가 아닐 거라는 생각이 들었습니다. 그래서 우선은 스프링 입문 강의를 다시 빠르게 들으며 전반적인 동작 원리를 이해하고자 노력했습니다. 

 

해당 강의를 다시 들은 건 1차 알고리즘 코딩테스트를 준비와 병행하며 들었었습니다. 확실히 2번째 들으니 낯설게만 다가왔던 스프링이 조금은 '아~ 이런 프레임워크구나' 하는 감이 왔던 것 같습니다. 

 

스프링을 입문하시는 단계라면 김영한 선생님의 스프링 입문 강의 정말 추천드립니다!! 스프링으로 프로젝트를 만들어본 경험이 없는 제가 스프링에 대한 감을 잡을 수 있는 강의였습니다!!

 

 

2. CRUD + 로그인 프로젝트 진행하기

https://github.com/NewCodes7/spring-blog

 

GitHub - NewCodes7/spring-blog: 스프링을 통해 블로그 만들기

스프링을 통해 블로그 만들기. Contribute to NewCodes7/spring-blog development by creating an account on GitHub.

github.com

 

: 강의를 들은 이후에는 기본적인 CRUD 프로젝트를 진행했습니다. 

 

'소프트웨어 마에스트로' 전형 과정을 거치며, 깨달은 정말 중요한 피드백이 있었습니다. 바로 '백엔드 개발자로서의 기본기'를 다지는 것이었습니다. 그래서 저는 그 이후로 CS 스터디, 클린코드 책읽기, 정보처리기사 시험 준비, CRUD 프로젝트 등을 병행하며 학습해 왔습니다. 

 

'스프링부트3 백엔드 개발자 되기' 책을 참고하며, CRUD 기능 + 로그인/회원가입 기능을 구현했습니다. 이론 부분은 안 읽어봐서 잘 모르겠지만, 프로젝트 코드 부분은 도움을 많이 받았습니다! 처음에 스프링 어떻게 프로젝트 진행해야 할지 막막한 분들에게 추천드립니다!

 

 

3. 비슷한 과제테스트 연습하기

프로그래머스 주문관리 API 서버 개발 과제테스트

 

: 프로그래머스에는 알고리즘, SQL 문제만 있는 게 아니라 과제테스트도 있습니다!! 이번에 우테캠 준비하면서 처음 알았네요 ㅎㅎ 

 

과제테스트 또한 프로그래머스 환경에서 이루어지기에 프로그래머스 과제테스트를 풀어보는 게 많은 도움이 될 거라 생각했습니다. 그리고 스프링으로 하는 과제테스트도 딱 하나 있더라고요!

 

다 풀어보진 못했지만, 분명 도움이 된 과제테스트였습니다. vscode 환경에 익숙해질 수 있었고, 베이스코드 위에 요구사항을 구현해 보는 연습을 할 수 있었습니다. 

 

실제 우테캠 과제테스트와 성격이 비슷한 부분도 있었습니다. 우테캠 준비하시는 분이 있다면, 위 과제테스트는 꼭 풀어보시는 걸 권합니다! 그리고 과제테스트가 처음이라면 생각보다 어려우실 수 있으니 차분히 풀어보셔요~

 

 


🫢 과제테스트를 보고 나서...

테스트 종료

 

우테캠 과제테스트 쉽지 않더라고요... 문제는 간단히 유형만 말씀드리자면 인증 + CRUD로 나왔습니다. 6기 때 후기 보면 아마도 유형이 이전과 비슷했던 것 같습니다.

 

저는 과제테스트를 준비하며 로그인/회원가입 기능을 스프링 시큐리티, JWT로 구현했었습니다. 이번에도 마찬가지로 비슷한 인증 과정이었는데요. 그런데 제가 구현했던 방식과는 달랐습니다. 그래서 새로운 방식을 학습하고 이해하느라 시간이 많이 소모되었습니다. 

 

인증에 대한 구현 코드를 짜야하는데, 해당 방식에 대한 이해도 없이는 코드를 짜기 힘든 구조였던 것 같습니다. 그리고 인증 기능을 구현하지 못하면 CRUD도 정상적으로 구현하기 힘든 구조였습니다. 

 

그래서 결국 인증 코드를 제대로 구현하지 못하고 시험이 끝나게 되었고, 인증을 못하니 준비했던 CRUD 기능도 구현하지 못했습니다 ㅠㅠ 

 

프로젝트 이해, 초반 설정에 1시간 이상을 쏟았고, 나머지를 인증에 쩔쩔매다 끝나버렸습니다. 결과적으로 테스트 클래스 5개 중 1개만 통과했습니다. 

 

다소 아쉬움이 느껴지는 과제테스트였습니다. 4시간 동안 자리에 앉아있긴 했지만, 제대로 된 코드를 작성하지 못했습니다. 준비했던 과정에서 배웠던 걸 펼치지 못했던 시험이었습니다. 

 

 

제 생각에 아마 이러한 분들은 과제테스트를 수월하게 푸셨을 것으로 예상됩니다. 

  1. 한 가지 기능을 구현하더라도 '여러 방식'을 고려하고 시도해본 사람
  2. 기능을 구현하고 끝내는 게 아니라, '원리'를 이해하려 노력한 사람

저도 이제 이 두 가지를 실천해보고자 합니다 ㅎㅎ 저도 2번은 잘해왔지만, 1번은 새롭게 배워야 할 부분인 것 같네요!

 


🎯 앞으로 해야 할 것

  • 구체적인 피드백
    • 인터셉터를 포함해 여러 인증 방식으로 로그인/회원가입/인증 구현하기
    • 프로젝트 'CS 문제 모음 사이트' 주제로 잡고, 조금씩 디벨롭하기 
      • JDBC 템플릿을 활용해 쿼리 직접 짜보는 연습하기
      • 기본적인 CRUD 기능 구현에 더 숙달하기
      • 로그인/회원가입, CRUD 등 기본적인 기능 구현에 숙달되었다면, 기능 구현 조금씩 심화시키기
      • 인프런 멘토링을 통해 코드리뷰받기
      • 필요한 부분은 강의, 책 적극적으로 활용하기
  • 추상적인 피드백 (태도, 습관 등)
    • 특정 기능을 구현할 때, '여러 방법'을 고려하고 구현해 본 다음 각 방법을 정리해 두기 
    • 기능을 구현하고 끝나는 게 아니라, '원리'를 중심으로 학습하여 정리해두기
    • 나와 비슷한 프로젝트 코드, 스프링 내부 코드, 유명한 프로젝트 등 양질의 코드 읽는 연습하기

 

마지막 코멘트

 : 요새 너무 정적인 학습만 해온 것 같습니다. chatGPT를 통해 문제 해결, 책에 있는 코드 학습, 강의 듣고 이해, CS 책 읽으며 개념 학습 등 정말 필요한 부분들인 건 맞습니다. 하지만, 이러한 정적인 학습뿐만 아니라 역동적이면서도 야생적인 학습의 비중을 현재보다는 늘릴 필요가 있습니다. 

 

개발자는 야생에서 문제를 해결하는 사람입니다! 그에 반해 제 학습은 그렇지 못했던 것 같습니다. 정적인 학습이 효율이 높긴 하지만, 여기에 의존해서는 안 될 것 같습니다. 

 

또한, 역동적 & 야생적인 학습의 비율이 원활히 되기 위해서는 프로젝트 중심으로 학습해야 하며, 해당 프로젝트가 본인이 관심 있는 도메인이어야 한다고 생각합니다. 그래서 앞으로는 제 현재 주 관심사인 CS를 도메인으로 프로젝트를 진행해보고자 합니다. 

 

이상 우테캠 과제테스트 회고를 마치겠습니다!

 

“We do not learn from experience...
we learn from reflecting on experience.”

― John Dewey