본문 바로가기
블로그/도서

[도서] 스프링 코딩 공작소

by 똘똘이박사 2023. 3. 23.

 

스프링 코딩 공작소

출판사 : 길벗, 송미영 지음

 

오래간만에 스프링 입문 관련 서적을 살펴볼 예정이다.

길벗 출판사의 서평단에 응모해 운좋게 담첨 되었고, 좋은 책을 읽어 볼 수 있는 기회를 얻었기 때문이다.

 

시중에는 이미 꽤 많은 스프링 관련 서적이 나와있다. 하지만 내가 이 책을 택한 이유는 조금 다르다.

동일한 기술이라도 그 책을 집필하는 저자의 관점에 따라 책에서 중요하게 다루어지는 부분이 조금씩 달라지는데.

난 이 책에서 그 다른 점을 보았기 때문이다.

이 책에서는  '스프링 웹 플로우'와 '아파치 타일즈'를 다루었다는 점이다.

사실 '스프링 웹 플로우'는 처음 들어 보았다.

(들어는 보았지만  사용한 적이 한 번도 없었기 때문에 잊어 버렸을 가능성도 있다.)

'타일즈'는 예전에 많이 사용했지만 현재는 최근에는 거의 써보지 않아서 잊고 지내고 있었다.

특히, '타일즈'를 다루는 도서가 없었기 때문에 공식 홈페이지나 포스팅을 통해 정리된 내용을 접하는 것 말고는

제대로 공부해 본적이 없었기 때문에 이 책의 차별성은 더욱 뚜렷하다.

 

각설하고 이 책의 살펴보자.

우선 이 책의 대상은 스프링으로 일을 처음 시작하는 개발자, 그리고 공부하려고 하는 학생이 보기에 좋을것 같다.

스프링에 대한 개념과 스프링을 이용한 시작과 끝이라고 할 수 있는 환경설정에 대해서

너무 깊게도, 그렇다고 너무 띄엄띄엄 다루지 않고 적당한 선을 잘 지키고 있다고 생각되기 때문이다.

('스프링부트'가 왜 나왔는지 알고 있는가? 스프링의 설정이 얼마나 귀찮고 어렵운 일인지 그것을 더 간편하고 최소화 하기 위해서이다.)

 

1~2장은 스프링에 대한 간단한 설명과 함께 개발을 시작하기 위한 설정 작업이다.

따라서 편안한 마음으로 읽고 넘어가자.

 

3장부터는 슬슬 스프링을 이용한 개발의 재미를 맛 볼 수 있는 장이 시작된다.

프레임워크 라는 것은 이미 누군가 어떠한 목적을 위해 만들어 놓은 뼈대이기 때문에 그 구조를 제대로 파악하고,

목적에 맞게 살(비즈니스 로직)을 붙이는 것이 중요한데, 3장에서 스프링 MVC의 구조를 다루는 것으로 시작하고 있다.

스프링을 구조적으로 지탱하고 있는 여러 가지 설정 파일에 대해서 딱 필요한 만큼 설명하고 있다.

 

4장은 갑자기 놀랄 수도 있다. 단숨에 아주 깊은 곳까지 들어갔다가 나온다.

예제 프로그램을 짜기위해 가장 기본적인 모듈을 만들어 놓기 위해서 이다.

여기서 이제 다른 책과 또 다른 조금 차별화되는 부분이 있는데

다른 서적에서는 보통 이 쯤에서 데이터베이스 설치와 설정을 다룬다.

하지만 이 책에서 데이터베이스는 가장 마지막 장에 다룬다.

그럼 예제를 위해 읽어와야 할 데이터는 어떻게 처리 할까?

그 내용을 4장 Repository에서 임시로 데이터 객체를 만들어 사용하게 된다.

 

5~6장은 4장에서 만들어 놓은 모듈을 따라가며 조금씩 살을 붙인다.

각각의 페이지가 찾아가야 할 경로에 대한 설정과 그것을 검색을 위해 파라미터를 넘기는 다양한 설정 방법을 익힐 수 있다.

 

7장은 도서를 직접 등록할 수 있는 페이지를 직접 만들어 볼 수 있고, 여기에서 JSP를 이용해 화면을 개발한다면

절대 빼놓을 수 없는 '스프링 폼 태그'에 대해서 배울 수 있다.

물론 5-6장의 목록을 출력하기 위해서는 반드시 JSTL을 사용해야 한다.

하지만 5-6 장의 중요 내용은 서버측의 구현에 있다면

7장은 클라이언트쪽에서 서버쪽으로 데이터를 보내기 위해 해야 할 작업에 좀 더 중점을 두고 있다는 것이다.

여러 가지 데이터를 어떻게 구조적으로 서버로 보낼 수 있는지, 기본적인 방법과 개발자가 상황에 맞게 처리하여 보낼 수 있는 방법(커스텀)을 배우게 된다.

 

사실 7장까지만 하면 공부를 막 시작한 학생이나, 막 입사하여 개발을 시작한 신입 개발자들은 충분한 내용일 것이다.

8장은 어려운 부분이다. 권한과 인증, 보안을 다루는 부분이기 때문인다.

스프링에서는 이것을 '스프링 시큐리티' 라는 별도의 프레임워크를 제공하는데,

머리말에 '스프링' 이라는 말이 붙은 것처럼 '스프링 프레임워크'와 잘 어울린다.

이 내용이 책의 전반부 보다는 후반부에 나올 만한 내용이라고 생각된다. (내 주관적인 생각이다.)

 

9장은 파일 업로드 부분이다.

이 부분은 게시글 쓰기와 같이 있어야 하지 않을까 하는 부분이다.

 

10장. 중요한 부분이다.!!

예외처리에 대한 부분이다. 일을 하다 보면 예외처리를 제대로 안하는 개발자들을 많이 있다.

나도 그럴 때가 많다. 귀찮다.

'설마 사용자가 이렇게 쓸까? 에이~ 이렇게는 안쓰겠지? 바보도 아니고..'

 

하지만 사용자들은 실제로 그렇게 쓰는 경우가 많고 테스트 도중에 시스템은 먹통이 되어 버린다.

따라서 예외처리 반드시 잘 알고 넘어가야 한다. 

 

11장은 기록에 대한 이야기다. 어떤 문제가 생겼는지를 파악하기 위해 로그를 잘 남겨 두어야 한다.

로그를 남기는 방법에는 여러 가지 방법이 있고, 여러 가지 라이브러리가 존재한다.

여기서는 log4j를 사용한다.

설명이 잘 되어 있다. 이전에 미쳐 깨닫지 못했던 내용을 이 책을 보면서 깨달은 부분이 있다.

고맙다. 정말 감사한다.

(그리고 서평단에 뽑아주신 관계자 분께도 감사 드린다. 서평을 쓰기 위해 책을 보지 않았다면 깨달음을 얻지 못했을 것이다.)

 

12장은 다국어 지원을 위한 내용이다.

서비스가 아직 국내 한정이라면 나중에 봐도 무방하다.

 

13장.. 이 장 역시 앞쪽 글 쓰기와 함께 있어야 할 내용이다.

등록 하려는 데이터에 대한 유효성을 검사하는 부분이기 때문이다.

하지만 이 부분은 또 다른 의미로 상당히 중요한 의미를 갖고 있기 때문에 후반부에 다루는 것이 맞을 수도 있다는 생각이 든다.

이유는 JPA를 사용하기 위해 도메인 관련 설정과 연관이 깊기 때문이다.

따라서 서비스를 나중에 더욱 확장하여 JPA까지 적용할 계획이라면, 이 책에 이 내용이 있다는 것을 잊지 말자.

(지금 꼭 봐둬야 할 필요는 없다. 어차피 금방 다 까먹는다. 잊지만 말자. 이 책에 이 내용이 있다는 것을.. 유효성 검사는 다른 방법으로도 충분히 할 수 있다)

 

14장은 RESTful 서비스 적용하는 방법이다.

공공데이터(Open API) 또는 타기관과 데이터를 주고 받는  시스템을 개발한다면 반드시 필요한 장이다.

뿐만 아니라 요즘은 리엑트나 Vue.js 등과 같은 자바스크립트 프레임워크를 이용해 화면을 개발 하거나

모바일을 이용한 서비스 개발에서는 거의 Rest 방식을 사용하기 때문에 반드시 알고 있어야 한다.

하지만 너무 겁먹을 필요는 없다. 이미 스프링에서는 그 부분까지 아주 쉽게 처리 할 수 있도록 우리를 배려(?)하고 있기 때문에

이 책을 통해 충분히 학습 할 수 있을 것이다.

 

15장은 스프링 웹 플로우에 대한 내용이다.

사실 나도 이 내용은 처음이다. 간략하게 설명하자면 서비스의 흐름을 미리 어딘가에 정의해 놓아 유지관리를 편의성을 높이는 전략이라 볼 수 있겠다.

 

16장은 아파치 타일즈에 대한 내용이다.

반복되는 레이아웃을 미리 정의해 놓고 개발자는 비즈니스 처리 부분에 더 집중할 수 있도록 도와주는 라이브러리이다.

헤더나 풋터, 메뉴 같이 메 페이지에 계속 동일한 코드가 들어가는 것을 따로 분리해 관리 할 수 있도록 도와주는 라이브러리를 학습 할 수 있다.

 

17장. 마지막이다.

처음에 말했듯이 마지막은 DB설정에 대한 내용이다.

사실 좀 의아한 부분이다. 이게 왜 가장 마지막에 있는지 말이다.

(아니면 나도 기존의 스프링 도서들에 익숙해져 DB 설정이 앞에 있는게 당연하다고 받아들이는 꼰대가 된 것은 아닐까?)

그 이유에 대해 몇 가지 변명을 해보자면 테스트와 관련이 깊다.

나중에 이 책의 아쉬운 부분에 대해서 다시 이야기 해보겠지만 개발의 시작은 데이터이다.

즉 데이터의 관리에서 부터 시작이다. 

적절한 도메인의 관리는 향후 프로젝트의 난이도에 직접적인 영향을 미치는데

이 부분을 테스트를 통해서 사전에 상당 부분 해소 할 수 있기 때문이다.

목표로 하는 독자층과 난이도를 고려하여 해당 내용을 생략하고 DB관련 부분을 뒤쪽에 배치 하였다면

꼭 나쁜 전략은 아니라고 생각된다. (하지만 개인적으로 아쉬운 부분이다.)

 

전체적인 책의 내용을 간략히, 그리고 지극히 개인적인 시점으로 적어 보았다.

그리고 지극히 주관적인 관점에서 아쉬운 내용을 몇 자 적어보면서 이 책의 리뷰를 마쳐본다.

 

우선 테스트에 대한 내용이 없다.

TDD에 대해서는 많이들 들어 보았을 거라고 생각한다. Junit 테스트는 요즘의 트랜드다.

개발자의 시간을 절약해 준다. 절약된 시간은 서비스의 품질로 이어진다.

화면이 나오기 전이나 아파치 톰캣이 구동되지 않은 상태에서 서버쪽의 테스트를 할 수 있다는 것은

무시할 수 없는 이점이다. (톰캣 서버 올리고 내리는 시간도 아깝다!)

테스트를 꼭 assertThat 같은 것을 사용하여 정석적인(?) 방법으로 하지 않아도 된다. 나도 야매로 테스트 한다.

assertThat 안쓰고 실제로 데이터가 원하는 대로 나오는지만 확인 하면 된다. 

그렇기에 테스트는 중요한다.

 

두번째는 RESTful 서비스를 다루면서 해당 서비스를 테스트 하는 방법이 소개되지 않은 것이 아쉽다.

많이 쓰는 서비스로 포스트맨(Postman)이 있다. 단순히 서버가 제대로 동작 하는지 확인 하는 것을 넘어

가상의 서버를 구축 함으로써 서버가 없는 상태에서도 화면 테스트가 가능하다.

(이건 프론트/서버 개발자의 룰이 명확하여 서로 개발되기 만을 기다리는 상황에서는 반드시 필요하다.) 

 

마지막으로 

요즘 많이 쓴다는 intellij를 통한 설정이 있었으면 좋겠는데 없다.

IDE는 도구일 뿐이다. 연장은 손에 익은 것이 최고다. 고수는 연장 탓을 해도 된다.

(연장은 고수의 생산성과 직결된다.)

이클립스가 편하면 이클립스를 쓰면 될 것이고 intellij가 좋으면 intellij 로 작업하면 된다.

(intellij가 유료인건 공공연한 비밀이다. 유료인지 모르는 사람이 생각보다 많더라.)

따라서 책 초반에 이클립스를 가지고 프로젝트를 생성했던 것처럼, intellij 로 작업 할 수 있도록 같이 설명이 있으면 좋지 않았을까 싶다.

조금 더 깊이 나간다면

한 프로젝트에서 이클립스와 Intellij를 같이 쓸 수 있도록 버전관리(git, svn 등)에 대한 설정이 있었으면 정말 좋지 않았을까?

(이건 개인적으로 정말 궁금한 내용이라 적어봤다.)

 

길벗에서 도서를 지원받아 작성한 리뷰(포스팅)입니다.
반응형

'블로그 > 도서' 카테고리의 다른 글

[도서] 요즘 개발자  (0) 2024.02.14
[도서] Street Coder  (1) 2023.11.26
[도서] 더 보스  (1) 2023.03.01
[도서] 빚 때문에 고민입니다.  (0) 2023.02.26
[도서] 팀장의 탄생  (0) 2023.02.18