[책 후기] 토비의 스프링 3.1 (Vol. 1)
- 저자: 이일민
- 출판사: 에이콘
- 링크: http://www.yes24.com/Product/Goods/7516721
책을 읽으며 진행한 예제 코드는 레포지토리에, 학습한 내역은 PR에 모두 담았다.
😎 책을 읽고
읽은지는 두 달이 넘어가지만😅 취준 때문에 바빴어서 미루고 미뤄왔던 포스팅을 이제서야 하게 되었다. 스프링 사용자로서 항상 읽어야지 읽어야지 하면서도 엄청 어렵다는 소문 때문에 읽을 엄두를 못내던 책이었다. 그러던 와중에 저자이신 토비님이 직접 책 읽기 모임을 주최하셨고 냉큼 모임에 들어가서 완독까지 할 수 있었다. 아쉽게도 모임은 2권까지 이어지지는 못하고 1권에서 끝났지만 충분히 보람 있었고 재미있던 모임이었다. (다만 2권은 아직도 못 읽고 있다는거...)
스프링을 처음 공부하는 사람에게는 이 책을 비추천할 것 같다. 다만 스프링을 사용해보았던 사람들이라면 오히려 추천하고 싶다. 스프링이 처음인 사람은 절대 읽지마라! 라는 의미는 아니고 어느 정도 아는 사람이 봐야 이 책의 깊은 뜻을 더 잘 이해할 수 있다고 생각한다. 단순하게 스프링에 이런 기능, 이런 개념이 있다~의 설명이 아닌 왜 스프링은 이런 방향으로 발전해왔을까, 어떤 철학을 갖고 만든건지 엿볼 수 있도록 도와주는 책이고 개발에 있어 테스트 코드는 왜 중요할까, 라는 생각도 되짚어주던 책이었다. 물론 스프링에 어떤 기능이 있는지 하나하나 깊이 있게 살펴보고 싶은 사람들에게도 적절하다고 생각한다.
아쉬운 점을 꼽자면 스프링 버전이 너무 오래되었다는 점? 아무래도 책이 오래되다보니 어쩔 수 없는 문제이긴 하다. 이 책의 진행 방향에 따라 코드를 작성할 때 deprecated된 메서드들이 정말 많았고, 현재는 어떤 것으로 대체되었는지 찾아보는 과정에 꽤 많은 시간을 투자했다. 토비님이 스프링6을 기준으로 새로운 토프링 책을 준비하신다는 이야기가 있던데 간절히 기다리고 있다. 😄
🤩 읽기 방식
독서 모임에서 1주에 한 챕터씩 (분량이 길다면 2주에 걸쳐서) 두 달간 나눠 읽었다. 책을 읽은 뒤에는 일요일 밤마다 디스코드에서 서로 이야기 나누는 시간을 가졌다. 책을 가지면서 생긴 의문점이나 인상 깊게 읽었던 부분에 대해 서로 공유하고 모르는 점에 대한 것은 토비님 혹은 다른 참가자 분들께서 답변 해주셨다. 다른 언어를 사용하던 개발자, 시니어, 주니어, 취준생 등 여러 사람이 참여했던 덕에 다양한 시선으로 바라볼 수 있었다.
어쨌든 모임에 참여하려면 주에 한 챕터씩 읽어야한다. 생각보다 딱 보기에도 분량이 꽤 많은 책이라 어떻게 효율적으로 읽을 수 있을지 고민해야만 했다. 먼저 밝혀두는데 나는 글자만 읽는 공부를 싫어하는 편이다. 머릿속에 남지도 않고 잘못 이해하는 경우가 너무 많다. 간단한 예제라도 사용해본 적 없는 코드라면 직접 쳐봐야한다. 그래서 repository를 파서 예제 코드를 작성하기 시작했다. 글자를 싫어하는 내가 이런 식으로 읽다보면 코드만 보고 글을 안읽는 현상이 나타나기도 한다(..) 그래서 SQ3R* 방식도 함께 도입했다.
SQ3R: 책을 읽기 전에 제목, 도표, 요약본 등을 읽고 전체적인 흐름을 살펴본다. 이 정보들을 바탕으로 궁금한 점들을 질문으로 만든다. 그 다음 책을 읽고 앞에서 작성했다 질문에 대한 답변을 정리한다.
매 챕터마다 얻게 되는 지식들은 블로그에 적으려고 했는데 너무 짧고 간단한 내용이라 포스팅으로 올리기 민망하거나, 한 데 묶기 애매한 정보들이 많았다. 그래서 이 부분은 매 챕터마다 올리는 PR에 메모해두었다.
그러면서도 예제 코드에 집착하지 않으려고 노력했다. 예를 들면 xml로 이루어진 예제는 슥 훑기만 하고 코드 작성은 안했다. 앞으로 쓸 일이 없을 것 같다고 생각하면서도 필요하게 된다면 그 때 가서 봐도 충분하다고 생각했기 때문이다. 내가 토프링 책을 읽는 목적은 스프링이 어떻게 동작하는지를 깊게 살펴보고 싶었던 것이지 스프링을 xml로 활용하는 방법이 아니다. 앞서 말했던 SQ3R을 도입하다보면 책 읽기의 목적을 분명히 하여 딴길로 세지 않도록 길잡이 역할을 해준다.
예제 코드에 집착하지 않는 방법은 간단하다. 그대로 따라치지 않고 예제를 조금씩 변형하거나 내 스타일로 작성하면 된다. 예를 들어 생성된 자원을 close하기 위해 try-catch-finally를 이용하던 예제가 있었다. 나는 try-with-resources를 알고 있었기 때문에 예제 코드보다 좀 더 간단한 코드를 작성할 수 있었다. 또는 간단한 클래스를 만들더라도 자료형을 다르게 만들었다. 예제에서 Animal 객체가 String name을 갖고 있다고 가정하자. 그러면 나는 다리 개수를 의미하는 int legCount를 추가한다던가, 포유류, 파충류 같은 동물의 분류를 enum으로 만들어 필드로 추가한다. 그러면 예상하지 못한 이슈들이 자연스럽게 따라오고 난 그걸 해결하면 된다.
물론 위의 방식은 내가 시간 많은 백수였기 때문에 도입 가능했던 방식이다. 취준생들에게라면 추천하겠지만 바쁜 직장인들이 하기에는 너무 벅찬 방식이 아닐까 싶다. 앞으로도 어떻게 하면 시간을 더 단축시키면서도 효율적인 공부를 할 수 있을지 고민해봐야겠다.