나는 무언가를 배울 때 공식 문서를 많이 봤다. 내가 뭘 모르는지도 모르고, 내가 필요한 게 뭔지도 잘 모르니까 진짜 무식하게 처음부터 끝까지 다 읽었다. AWS Lambda, DynamoDB를 배울 때 페이지가 500페이지가 넘어가는데 그냥 처음부터 끝까지 다 읽었다. 최근에는 스프링 부트 문서를 제본을 맡겨서 책으로 출력했다. 근데 문서는 카탈로그 식으로 된 자료들이라서 읽기가 어려웠다. 그럴 때는 책을 구입해서 책을 읽었다.
쉽게 풀어주거나 문맥이 있어서 문서보다는 쉬웠다. 설치하는 방법에서부터 응용까지 설명 해주니 편했다. 문서에 나와있지 않는 클린 코드나 객체지향, DDD 같은 내용들은 책을 통해 공부를 했다.
책으로도 안 되는 것들은 강의를 들었다. 최근에는 아샬님의 스프링 부트 강의를 들었다. 따라 치기도 하고 자바 코드를 코틀린 코드로 바꿔보기도 하면서 강의를 들었는데, 막상 강의를 끄고 직접 코드를 작성하려고 하면 아무것도 생각이 안 났다.
위의 사진은 읽어야 할 책들을 쌓아놓고 찍었던 사진이다. 충동구매 때문에 산 것도 있고 필요해서 샀던 책들도 있는데 책을 아무리 읽어나가도 결국 새로운 책들이 쌓이는 속도를 따라갈 수가 없었다. 심지어 전에 읽었는데 새로운 버전으로 출시된 리팩터링
자바스크립트 버전이 새로 나왔다.
블로그에 이렇게 기록하면서 “나는 정말 열심히 했어”라는 만족감을 얻었다. 하나하나씩 쌓아가는 기분도 좋았다. 지금까지는 새로운 지식들을 머리속에 집어넣기만 하는 input 중심의 학습을 하고 있었다. 내가 몇 권의 책을 읽었는지, 어떤 강의를 수강했는지, 어떤 문서를 읽었는지로 학습의 척도
로 잡고 있었다.
그러다 우연히 다른 분이 운영하고 있는 책 스터디에 참여했다. 기존에 책을 읽고 책에 대해 토론하는 게 일반적인 스터디였는데 여기서는 책을 읽고 시험
을 봤다.
책을 읽을 때는 분명히 이해했다고 생각했다. 하지만 막상 백지 위에 적으려고 하다보니 기억이 안 났다. 절차적으로 설명을 해야 하는 것은 순서가 정확히 기억이 안났다. 예를 들면 HTTPS에 대해 설명하려면 개념뿐만이 아니라 동작하는 순서도 알아야 한다.
나는 이해했다라는 착각
에 빠진 것이었다. 착각이라는 것은 굉장히 위험하다. 이해했다라고 생각하기 때문에 더 이상 공부하려고 하지 않게 된다. 책을 다시 보더라도 이미 아는 것이라고 대충 읽게 된다. 하지만 막상 시험을 보면 할 수 있는 게 없다.
그래서 시험을 봄으로써 내가 알고 있는 것이 무엇이고, 모르는 것이 무엇인지 피드백
을 얻을 수 있었다. 지금까지는 내가 머릿속에 지식을 넣는 학습만 하고 있었다. 시험을 보면서 내가 가진 지식을 output 바깥으로 꺼내는 연습을 할 수 있었다.
시험을 본다고 생각하면서 책을 읽으니까 어떤 문제들이 시험에 나올까? 나 같으면 이런 문제를 낼 텐데 하면서 읽게 되었고 이를 책 앞에 기록했다.
스터디를 할 때 이렇게 문제집을 만들면서 서로에게 질문을 하면서 스터디를 진행했다.
개념에 대해 어떻게 공부할지는 알겠다. 근데 배워서 내가 무엇을 할 수 있게 되었는가? 개념에 대해 잘 안다고 해서 그것을 잘 한다는 것은 아니다.
그래서 내가 만든 문제집으로 셀프 시험을 볼 수 있는 웹앱을 만들기 시작했다.
앵귤러만 쓸 줄 알았는데 리액트를 배우고 싶어서 리액트로 셀프 시험을 볼 수 있는 웹앱을 만들었다. 직접 만들면서 컴포넌트 테스트, 데이터 흐름 설계, 관심사 분리라는 문제에 부딪히면서 모르는 것을 더 많이 알게 됐다.
초기 버전은 간단하게 질문이 있고 답변이 있는 웹으로 만들었는데 단순하게 텍스트를 읽는 것 만으로는 시험의 느낌이 안 났다. 주관식으로 하자니 평가하기가 어려웠다. 이런 고민을 하는 중에 관계형 데이터베이스 스터디에 참여하게 됐다.
비사이드소프트의 맹기완 대표님이 진행하시는 관계형 데이터 베이스 스터디에 참여하게 되었는데 이론적인 부분이 굉장히 많았다. 실무적인 내용도 뒤에 많이 나오지만 이론이 실질적인 구현으로 나타나는지 배울 수 있어서 좋았다.
관계형 데이터베이스에 대해 잘 알게 된다고 하더라도 데이터베이스 설계조차 하지 못한다면 아무런 의미가 없다고 생각했고, 셀프 시험앱을 만드는데 관계형 데이터베이스를 사용해보자라고 생각했다.
기존의 셀프시험 앱은 질문과 답만 보여주면 되니 이렇게 간단한 데이터만 필요했다.
하지만 시험을 보기 어려움과 채점이 어렵다는 문제를 해결하기 위해 핵심 키워드를 빈칸으로 만들고 빈칸 만들기로 만들기로 했다. 그래서 필요한 데이터들이 더 필요해졌는데 처음엔 이렇게 설계했다. 하지만 이러한 데이터로는 응용프로그램에서 데이터를 활용해 만들 수 없었다. 어디에 빈칸을 만들고 어떤 빈칸에 어떤 정답을 매치시킬지 알 수 없기 때문이다. 책에서 응용프로그램이 원하는 데이터를 잘 파악해야 한다
라는 것을 직접 만들면서 배우게 됐다.
그래서 이렇게 설계를 했고 이를 스터디에 공유했다. 스터디에서 이 설계에는 어떤 문제점들이 있어서 어떻게 개선해야 하는지 배울 수 있었다.
대표님이 다 설계를 해주신 거긴 한데 결국 이렇게 데이터가 만들어졌고 이를 토대로 프런트와 백엔드를 구현했다.
빈칸에 키워드를 입력하고 제출하면
정답이라면 이런 식으로 화면이 바뀌게 만들었다.
내가 무엇을 배웠는지가 중요한 것이 아니다. 그래서 내가 무엇을 할 수 있는가가 더 중요하다. 배움을 척도를 내가 무엇을 할 수 있는가?
로 잡았다. 그러기 위해 다양한 시도들을 할 것이다.
사실 지금도 하고있다. 쿠버네티스 책 스터디를 할 때 서로 문제를 내주고 배운 것을 실습하는 등 많은 시도들을 하고 있다. 쿠버네티스를 배워서 쿠버네티스로 셀프 시험 웹앱을 배포를 준비하고 있다.
다른 사람들에게 내가 배운 것을 많이 알려줄 것이다. 그러기 위해 코딩의 신 아샬님과 과제 위주의 학습 서비스인 코드숨을 만들고 있다.
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!