본문 바로가기

우아한테크코스 7기

우아한테크코스 7기 레벨 2 회고

메타인지와 성장

우테코에 오기 전, 스프링을 사용해 프로젝트를 한 경험이 두 세번 있었다.

레벨 2를 시작하며 큰 기대를 품고 있었다. 스프링을 어느 정도 깊이로 학습하게 될 지 궁금했고, 대단한 걸 배울 수 있으리라 생각했다.

그러나 레벨 2는 초심자를 위한 레벨이었고, 주인공은 내가 아니었다.

미션 요구사항과 구현 수준은 이미 습득했다고 생각하는 것들이었다.

 

사용해 본 것과 아는 것은 다르다

 

이 사실을 망각한 채 "나는 다 아는데..." 라고 말하며 오만한 생각을 했다.

이미 안다고 생각하니 미션이 귀찮게 느껴졌고, 하기 싫어졌다.

 

월요일 마감인 미션을 일요일에 시작한 적도 있었고, 테스트 코드를 짜지 않았던 적도 있었다.

 이런 생각이 반복되다 보니 캠퍼스에 와서 할 게 없었다. 기술적 고민이 없으니 토론도 하지 않게 되었고, 스프링 강의를 들으며 시간을 떄우게 되었다.

 

한 달 정도 의미없이 시간을 보내다 무언가 잘못되었다는 생각이 들었다.

하루 종일 강의만 들을 거면 왜 우아한테크코스에 왔는가?

 

그토록 원하던 "토론할 수 있는 환경"에 왔는데 강의만 듣고 있다니. 후회가 밀려왔고, 한 달의 시간이 아까웠다.

 

스프링 강의를 들으며 얻은 지식도 많았다. 미션과는 관련없다는 것이 문제였다.

스프링 강의는 우테코가 아니더라도 들을 수 있다. 그러나 미션을 하며 토론하는 경험은 우테코가 아니면 얻을 수 없다.

 

메타인지를 하니, 사용해 본 것과 아는 것은 다르다는 생각이 다시 들기 생각했다.

비록 스프링 경험이 있더라도 효과적으로 학습할 수 있을 것이라는 생각이 들었다.

그때부터 별 생각 없이 사용했던 기술을 돌아보게 되었다. 표면적이었던 지식은 역시나 금방 바닥을 드러냈다.

 

지식의 깊이를 확장하는 과정에서 아래에 서술할 "나만의 공부법" 이 도움이 되었다.

레벨 2까지의 여정에서 기술적 메타인지를 할 수 있었다.

이와 동시에 익숙한 기술에 대한 마음가짐을 변화시킬 수 있었다.

 

 

나만의 학습법

 우테코에서 4달간 공부하고 토론하며 형성된 공부 성격이 있다. 근거가 합리적이지 않거나 명시적인 사실이 아니라고 판단되면 절대 받아들이지 않는 성격이다. 의미있는 토론과 학습을 위해 팩트만을 다루는 과정에서 이런 성격이 생겼다.

 "A 는 B 를 수행한다" 라는 지식을 접하면, A 의 구현체와 동작 코드를 열어 봐야 이해를 한다. 그렇지 않다면 "명확하게 검증되지 않은 지식" 으로 처리되며, 금새 잊게 된다.

 예를 들어 Interceptor 의 preHandle() 은 Handler 실행 전에 호출된다는 지식을 접하면, DispathcerServlet 의 doDispatch() 코드를 분석해야 명확히 이해하게 된다.

 

이런 성격 때문에, 지식을 습득하는 과정에서 내부 코드를 분석하는 학습 방식이 자연스레 만들어졌다.

 

장단점이 명확한 학습 방식이다.

 기술을 더 깊게 이해하고 명확한 동작 과정을 학습할 수 있다는 것이 장점이다. 내부 동작을 파헤치다 보면 어떤 일을 하는지, 누구의 호출로 인해 수행되는지를 파악할 수 있다. 너무 깊은 영역이라는 생각이 들 수는 있지만, 개발 과정에서 문제가 생기거나 의사결정을 해야 할 때 도움되는 경우가 생각보다 많다.

 학습의 속도가 현저하게 떨어진다는 것이 단점이다. 알아도 크게 도움되지 않는 지식을 깊게 학습하는 데에 3일이 걸린 적이 있다. 지금 생각해도 별로 필요하지 않은 지식이라 생각한다. 그냥 넘어갔으면 다른 지식을 더 많이 습득할 수 있었는데, “납득” 을 이유로 3일을 사용했다.

 

이젠 이 학습 방식이 익숙해졌다.

 코드 분석 속도가 빨라졌고, 익숙한 코드 패턴과 디자인 패턴이 나오니 방향성을 쉽게 잡을 수 있다.

이를 통해 유일한 단점인 학습 속도 저하를 어느 정도 해결했다.

 

 레벨 3에서는 습득한 이론과 구현을 프로젝트에 적용해보려고 한다. 내부 구현을 탐구하면서 접한 황홀하고 아름다운 설계와 매력적인 추상화를 프로젝트에 적용해보고 싶다.

 

이상(객체지향 설계)과 현실(실무) 사이를 조율하는 경험을 하게 되리라 생각한다.

 

스터디

스프링 스터디

스프링 MVC 내부 코드를 분석하고 동작 과정을 공부하는 스터디에 참여했다.

View 를 반환하지 않는 핸들러의 동작 과정, @RestController 와 ResponseEntity 사이의 모순을 탐구했다.

별 생각 없이 쓰던 개념들의 동작 원리를 즐겁게 공부했던 스터디였다

네트워크 스터디(진행 중)

컴퓨터 네트워크 하향식 접근 책을 읽고 의문점을 공유하는 스터디에 참여했다.

소켓 프로그래밍 실습 코드를 준비하며 TCP 와 UDP 소켓의 동작 차이를 이해할 수 있었다.