본문 바로가기

소프트웨어,IT,컴퓨터공학 도서리뷰/개념 서적: (Conceptual Books): TDD, OOP, DDD

JAVA EE 디자인 패턴 책 후기 -무라트 예네르 지음 이일웅 올김- [길벗출판사] [디자인패턴] [2021] [4or6/7]

현실을 설계하기 위해선 디자인은 피할 수 없다.

 

 

Java 웹서비스(커스텀 애플리케이션)의 패턴을 망라한 책

 

이 책에서의 디자인 패턴은 고전적인 GoF(갱포)가 정리한 디자인 패턴에 국한되지 않는다.

 

Java 커스텀 웹서비스에서 자주 보일 수 있는 흔한 패턴들까지 디자인 패턴으로 바라보고 있다.

 

대표적으로 데이터 접근 객체, 의존체 주입 방식, REST형 웹서비스 처리, 비동기 처리, AOP(관점 지향 프로그래밍), 마이크로 서비스 아키텍처 등등...

 

현실세계를 컴퓨터에 맞도록 객체지향적인 세상으로 커스텀 웹 서비스를 만드는 과정에서

 

만나게 되는 대부분의 패턴들을 망라한 책이라 생각한다.

 

그래서 정말 좋았다. [ 기대하지 않았던 좋은 정보들이 너무 많았다. ]

 

디자인 패턴(고전적인 GoF의 23가지 패턴)을 공부하려고 이 책을 들었다면 아쉬울 수도 있을 것이다.

 

이 책은 디자인 패턴보다는 자바 커스텀 웹 서비스의 시작부터 끝을 담았다고 생각되며, 그 부분을 비집고 공부하고자

 

하는 분들에게 추천하고 싶다. (개인적으로 디자인패턴을 세밀하게 공부하는 용도를 위해 이 책을 읽는 것은 비추천하는 입장이다.)

 

추천도

-자바의 웹서비스 전체를 공부하는 것이라면 6점 : ★★★★★★☆

-디자인 패턴 공부용이라면 4점 : ★★★★☆☆☆

 

읽은 기간 📅 : 2021년 5월 24일 ~ 2021년 6월 24일. (하루 1 뽀모도로 투자)

 

이 책을 추천하는 이들 👨‍👧

  • Java EE 아키텍처가 궁금한 사람들... (과거의 산물로 취급받는 요즘... Java EE에 대해서는 나도 잘 모른다.)
  • 주요 디자인 패턴을 공부하고 싶은 사람들 (팩토리, 싱글턴, 옵저버, 데코레이터 등등..)
  • 웹 서비스에서 자주 마주하는 개념들(AOP, 의존체 주입, 데이터 접근 객체)을 공부하고자 하는 사람들

 

난이도 🦈

"중상"이라고 생각한다.

어느 정도의 객체지향적인 지식과, 디자인 패턴에 대한 기초 지식을 필요한다고 생각함.

 

관련된 책들 📚

  1. 스프링 프레임워크 책
  2. 객체지향 개발론과 관련된 책
  3. 디자인 패턴 책

 

한 줄 평 ✍️

구조(패턴, 양상)를 공부하는 것은 언제나 올바르다.

 


J2EE.

 

나는 J2EE를 잘 모른다.

 

몇몇 스프링과 관련된 책에서 언급되는 정도로만 알고 있다.

 

지옥 같은 XML 설정이 개발자를 엄청나게 괴롭게 했다고 책들에서 소개되곤 한다.

 

그런 좋지 않은 역사를 지녔던 J2EE를 이 책의 저자는 사랑한다. 그

 

래서 J2EE에서 사용되는 실제 디자인 패턴 적용 사례로 이 책의 예시들을 꾸몄다.

 

안타깝지만 나는 이 책의 예제들의 코드들을 눈으로만 음미했다. 딱 그 정도가 좋아 보였다.

 

J2EE는 역사적으로 남게 될 것 같기에... 

 

이 책을 통해 들여다본 J2EE는 복잡하다. 입문자가 접근하기에 너무도 까다롭다.

 

Java를 활용한 객체지향 모델링 자체가 입문자에게 까다롭다.

 

형식적인 부분들이 많고, 알아야 할 추상적인 개념들도 많다.

( 소프트웨어 자체도 추상적인데, 추상적인 것을 더 추상적이게 표현하는 개념들...)

 

거기에 디자인 패턴까지 익히면서 J2EE를 다뤄야 하나 싶을 정도로... 매우 복잡해 보인다.

 

로드 존슨(스프링 창시자)는 그런 회의감에 스프링을 개발했다. 

 

EJB는 POJO로, 엔티티 빈의 개념은 JPA로, SOAP이던지 RPC였던지 통신 프로토콜은 이제 REST API로 전환되었다.

 

각종 설정은 XML에서 직접 다루는 게 아니라 애너테이션에 속성을 달아주면서 처리하고 있다.

 

그렇게 스프링은 모든 이들에게 열려 있을 정도로 추상적인 개념을 최대한 숨겼다.

 

허들이 낮아지게 되면서 J2EE의 인기를 급속하게 떨어졌고 많은 이들이 스프링을 택하게 되었다.

 

많은 이들의 인기를 누리는 데에는 그만한 이유가 있다. 이 책의 J2EE 실습사례를 보면서 든 생각이다.

 

디자인 패턴 깊게 배울 필요가 있을까?

 

라이브러리와 프레임워크 그 중간에 걸쳐진 애매한 디자인 패턴.

(디자인 패턴 책에서 소개하는 디자인 패턴의 위치이다.)

 

깔끔한 사용의 라이브러리와 구조적인 틀을 제공하는 프레임워크 사이에 위치는 정말 애매한 포지션이다.

 

이 애매한 포지션 때문에 디자인 패턴은 항상 논란을 끌고 다닌다.

 

라이브러리의 논란은 API의 사용과 관련되어있다. (성능이나 작명 인자 개수, 인자 위치 등등.)

 

프레임워크는 복잡성과 편리함에서 논란이 있다.

 

디자인 패턴은 적용하냐 안 하냐의 유무에 있다. 

 

그런데 해서 문제가 있고, 안 해서 문제가 있는 이 애매한 결과들 때문에 디자인 패턴은 그 자체로 안티 패턴이라고 욕먹는 상황도 존재한다.

 

공감한다. 디자인 패턴의 각 패턴을 소개할 때 장점과 단점을 명시하지 않던가.

 

호불호가 갈릴 수밖에 없다.

 

모든 디자인 패턴 책에서 강조하듯이, 망치를 들고 있다면 모든 것이 못으로 보일 뿐이다.

 

그래서 나는 디자인 패턴을 깊게 공부하지 않는 편이다. 망치를 들게 될까 겁나기 때문이다.

 

딱 추상적인 디자인 패턴의 이름과 그 사용처만 두루 익히는 편이다.

 

현실세계에서 추출한 디자인 패턴의 이름들 덕에

 

꼭 프로그래밍이 아니더라도 현실세계에서도 바라보는 관점이 달라지기 때문이다.

(코드 상의 문제보다는  도메인에서의 문제를 해결하는데 패턴 용어를 사용하게 되는 것이다.)

 

무언가를 연결하는데 연결 부분이 없다면, 어댑터를 떠올리게 되고

 

복잡한 인터페이스가 여기저기 흩어져 있다면 자연스레 퍼사드가 떠오르게 된다.

 

객체들이 여기저기서 사용되었을 때 상태 값이 혼란을 줄 수 있다면 싱글턴을 떠오르게 되듯 말이다.

 

딱 그 추상적이고 설계 용어로 쓰는데 만족한다.

 

UML이 어떻다더니, 장점이 어떻다드니, 단점이 어떻다더니... 그러한 세부사항은 저 멀리 두는 편이다.

 

호불호가 갈리고, 애매해서 문제가 발생하는 기술들은

 

모든 도메인은 가까이 두지 않는 것이 좋다.

 

갈등의 근원이 될 수 있기 때문...

 

하여튼 나에게 디자인 패턴이란 그런 개념이다.

 

"함수형 사고"라는 책에서는 디자인 패턴에 대해서 독설을 남기기도 한다.

 

객체지향 개발론으로는 도저히 자동화시킬 수 없는 템플릿이라고, 이것이 객체지향 개발론의 한계라고

 

함수형 프로그래밍 방식은 프로그래밍적 패러다임을 전환해서 이 디자인 패턴이 해결하고자 하는 문제 상황을 디자인

 

패턴이 제시한 해결책보다 더 간결하고 편리하게 해결해 줄 수 있다고 말이다.

 

소프트웨어 설계에서 디자인 패턴의 사용을 피할 수는 없다. 무의식적으로라도 쓰게 될 것이다.

 

객체지향 개발론은 죽지 않을 패러다임이고, 그에 따라 나름 기술적인 디자인 패턴도 죽지는 않을 것이다.

 

이 책은 기술적인 측면에 집중하기보다는 서사적인 패턴을 보여줘서 정말 좋았다.

 

분산 시스템, 객체지향 시스템을 공부하는 사람이라면

 

스프링을 다루거나 자바 웹서비스를 배워나가는 입문 자라면(현재 나의 위치이다)

 

내용만으로도 좋은 책이라 생각한다. 

 

이 책의 앞부분에 붙인 설명을 누가 지어주었는지는 모르겠으나

 

딱 좋은 표현이라 생각한다.

 

"아키텍처를 이해하기 위한 디자인 패턴" 

반응형