스프링 입문을 위한 자바 객체 지향의 원리와 이해

들어가며

이 책은 직접 사서 봤던 것은 아니고, 갓 사회 초년생일 때 회사의 책장 구석에 박혀있는 걸 계기로 접하게 된 책이다. 대한민국에서 자바개발자라면 스프링 프레임워크와 인연을 놓을 수 없는 데,(대한민국 공공기관 표준 웹 프레임워크가 스프링 프레임워크이다.) 스프링 입문이라는 타이틀에 혹해서 책장에서 꺼냈엇다.
당시의 나는 열악한 환경에서 (당시 팀장님이 자바와 자바스크립트를 구분을 못했다.) 자바 웹 프로그래밍을 독학하며 이직에 대한 강렬한 열의를 품고 있었는 데, 나는 대부분의 한국형 찍어내기식 코더들과 마찬가지로 ‘스프링 어떻게 써요?” 란 관점으로 단순 취업을 위한 스프링 프레임워크를 바라보던 시기였기 때문에 그때 당시 이 책이 얼마만큼의 값어치가 있는 지를 모르고 듬성듬성 읽으면서 책을 덮었었다. 시간이 많이 흐른 지금 이 책이 그때 시기에 얼마나 값어치 있었을 지를 이제서야 알게 되었는 데, 시간을 돌릴 수 있다면 과거의 나에게 꼭 두번 정독해라고 권하고 싶은 책이다.

이 책은

이 책은 스프링 프레임워크란 타이틀과 달리, 정작 스프링 프레임워크에 대한 자세한 이야기는 하지 않는다. 이게 무슨 소릴까? 이 책을 바라볼 때에는 관점을 바꿔보아야 이 말의 의미를 알 수 있다. 만약 스프링 프레임워크가 현재 자동차의 소나타 라면, 소나타의 구동 방법에 대해서가 아닌 자동차란 무엇인지에 포커싱을 맞춘 책이기 때문이다. 이직을 한창 갈구하던 신입 시절의 나처럼 소나타란 차를 보유하고 있는 회사에 어떻게든 입사 하고 싶어서, 소나타의 시동은 어떻게 걸고.. 소나타의 엑셀은 어디 있으며.. 정지는 어떻게 해야하는지 조작을 위한 관점으로는 이 책을 보면 매우 실망할 것이다.

스프링 프레임워크는 객체지향의 꽃이라 봐도 무관할 만큼 자바라는 객체지향 언어를 보다 더 객체지향답게 완성시켜주는 모든 고민과 해법이 들어있는 프레임워크이다. 이는 객체지향이란 무엇인가? 객체란 무엇인가? 자바는 왜 객체지향 언어인가? 를 모르면 스프링 프레임워크에 대해 이해할 수가 없다를 의미한다. 백날 천날 디버깅하며 호출 부분을 쫓아가거나, 갱신 된 공식 문서를 보더라도 객체지향에 대한 이해가 없으면 결국은 왜? 이렇지 라는 질문에 막혀서 단순 노동 밖에 되질 않는다.

저자는 이러한 관점에서 책의 시작을 자바라는 객체지향 언어란 무엇인지에 대해 설명을 위해 객체지향프로그래밍은 무엇이며, 자바는 이를 어떻게 구현했고 왜 JVM 의 메모리 구조가 이러한지를 살피며 단계적으로 설명한다. JVM 메모리라는 말이 나와서 그런데 대다수의 사람들이 JVM 의 메모리 구조에 대한 인식은, HEAP AREA가 있고.. STATIC AREA 가 있고.. 줄줄 암기 대상으로 이해를 한다. 나 역시 한창 JVM 에 대해 학습할 때 이러했는 데, 당시 면접을 위한, 이직만을 위한 방향으로 ‘가만 어떤 사람은 STATIC AREA 라 하고 CLASS AREA 라는 사람이 있네? 이게 뭐지.. 아 몰라 일단 외우자. ‘ 라며 달달 외웠던 기억이 있다. 이 책을 읽고나면 JVM 이 왜 이런 메모리 구조를 가지며, 이클립스와 인텔리J의 디버깅 기능이 왜 제공하는 정보가 비슷한지 알 수 있게 될 것이다. (여담으로 왜 JAVA8 에서 STATIC 키워드에 대한 동작을 자바 개발진영이 바꾸었는지도 짜투리 지식도 알려 준다.) 자바란 언어에 대한 관점에 따라 심도 있는 내용이거나 기본적인 내용을 익히고 나면, 왜 절차지향에서 객체지향이 되었는지, 왜 객체지향에 대한 이야기를 하면 꼭 SOLID 를 물어보는 지, 왜 디자인패턴을 이해해야하는 지에 대한 물음의 힌트를 준다.

이 책의 단점이라면 저자도 책의 전반적인 내용이 물음의 힌트만 줄 뿐, 깊이 있는 내용에 대해서는 다루지 않는다. 마치 옆 자리에서 고수의 아우라를 풍기면서 공부를 위한 핵심 키워드만 짚어주고, 웃으며 다음주까지 정리해오세요 라고 말하는 나처럼 말이다. (자화자찬은 내 아이덴티티이다.) 이는 책의 저자도 인정하는 부분인데, 그래도 독자로서 기분이 나쁘지는 않다. 왜냐면 그것을 다 설명하기에는 이 책의 페이지는 1만장이 넘어갈 것이고, 사람의 심리는 처음부터 많은 것을 설명하면 거부감이 드는 생물이니깐..

이 외에도 (개인적으로 진짜 단점이라 생각하는 부분다.) 곶곶에 책을 읽는 이가 뉴비들일 뿐일 것이라고 가정하고 설명하는 부분이 있는 데(당연히 입문을 위한 키워드가 제목이니깐), 잘못 이해하면 잘못 된 지식으로 변절 될 내용이 몇몇 보이는 부분이 있다. 독자들에게 쉽게 설명하기 위해서 원문을 조금 뒤틀어서 설명하는 안좋은 습관이 있다. 물론 뒤튼 부분은 단순히 쉽게 이해시키기 위한 부분이기에 큰 오류라고 지적할 수는 없으나, 사실만을 위한 철학을 가진 나로서는 조금 거부감이 들었다.(예를 들면 디자인패턴의 챕터를 꼽고 싶다. 챕터의 분량 자체도 빈약한 것에서 느끼겠지만, 빈약하게 설명하기에는 말이 안 되니 저자가 몇가지를 뒤틀어서 생략을 위한 설명을 하는 부분이 있다. 이는 저자도 어느정도 인정하고 있으며 이에 대한 대안을 어디서 학습해야할지 서술되어 있다.)

마무리하며

최근 자바란 언어가 참 많이 변했다. 함수형 도입에서 부터 자바의 모듈이란 관점을 뒤흔든 직소까지.. C# 을 만든 엔더슨이 보고는 야 이제는 너희가 우리 따라하냐? 란 말을 할 만큼.. 많이 변했다. 기술의 패러다임이란 언제나 변화하지만, 자바처럼 보수적인 언어도 없었고, 대한민국의 웹 프로그래밍이란 시점으로는 대다수 기반이 자바 언어였기 때문에 대한민국에서 많은 부분 보수적인 관점의 프로그래밍이 많았다. 사실 모든 것을 자바라 탓하기에는 전자정부 프레임워크나 생태계 구조적인 부분 때문이라고 자바 역시 억울함을 호소할 수 있겠지만 현실이 그러하고 현재 사실이 그렇다. 이러한 나라에서 자바란 언어의 변화는 많은 생태계가 뒤흔들리고 변화를 거부하는 등 많은 변동이 일어났다. 심지어 최근에는 오라클에서 자바를 버리겠다고 (관점의 차이이지만, 이 글에서는 최근 오라클의 행보를 B2B에만 집중하겠다로 해석한다.)선언 했고 많은 곳곳에서 대혼란이 왔었다. 객체지향 언어인 자바를 객체지향언어로 바라보지 않고, 스프링 프레임워크를 단순 소나타라는 차처럼 조작을 위한 프레임워크로 인식하던 대한민국이 이러한 변화를 맞이하며 극복할 수 있을까?

이러한 격변 속에서 영세 SI에서 자바6,7 버전만 사용하다가 이직을 위해 정신차리고보니 많은 기업에서 자바를 사용하지 않는다고 한다. 코틀린..? 스클라? 이건 또 뭐지.. 그루비 이건 또 뭐야? 아 몰라 취업을 위해서라면 공부해야지.. 란 생각의 당신에게 필요한 책이 코틀린 따라하기, 스칼라 시작하기 란 책이 아니라 본인이 경험했던 기술 스택에서 객체지향에 대한 이해를 먼저 하고 해당 언어를 습득해야 한다. 이를 거부할 경우 신입 때 처럼 또 다시 소나타 말고 스타렉스, 무쏘, 아반떼를 위한 동작 메뉴얼을 외우는 꼴밖에 되지 않는다… 언제까지 그러고 살것인가? 10년 후에도 암기가 쉽게 될 것 같으나? 그러기 위한 책들 중 하나로 걸음마를 때기에는 이 책 이 스프링 입문을 위한 자바객체지향의 입문이란 책은 비기너나 뉴비들을 위한 책으로 적당하다. (실제로 이 말은 내가 면접관일 때, 어떠한 면접자의 질문에 대답을 해주었던 내용이다. 당연하겠지만 그 면접자는 나에게서 자신이 탈락할 것을 알고 있었기에 개선을 위해서 질문했고, 지금은 더 좋은 곳에 취업했다.) 비슷한 내용으로 토비의 스프링 vol.1 이란 책이 이 책과 겹치는 부분이 많으나, 개인적으로는 스프링 입문을 위한 자바 객체지향의 원리란 책을 먼저 읽고 토비(이일민) 님의 책을 학습하길 추천한다.