해당 책은 일본에서 초반이 발행되고(국내 출간은 안됨) 이번에 2판이 나온 책입니다.
기존에 변하지 않는 원칙에 대한 부분은 항샹 유효합니다. (모듈화, 재사용성, 유연성등의 설계원칙)
그 이후에 기술환경 속에서도 안정적으로 지속 가능한 새로운 부분도 추가되어서 설계의 정석이라고 할수 있는 부분은 설명합니다.
이번 개정판에서는 그동안 변화한 표준 프레임워크와 도구에 대한 설명을 새롭게 정의했습니다.
프레임워크에는 스프링부트를 채택하고, RESTful과 GraphQL을 이용한 API설계 및 아키텍처 설명에서는 MSA도 추가하였습니다.
애자일 개발에 대해서도 저자분의 경험을 통한 설명이 추가되었습니다.
현 시점에서 가장 많이 사용하고, 관심이 있는 기술 요소를 기반으로 책의 내용이 설명되어 지는 부분은
이번 최신 출간된 책의 장점이라고 생각되어 집니다.
■ 책의 구성
총 3편으로 되어 있습니다.
입문 / 설계 / 아키텍처 편으로 구성되어 있습니다.
입문의 내용을 살펴보면, 다른책과 조금 다른 편안한 분위기로 누구나 공감을 하는 내용을 기반으로 책의 공감대를 이끌어낸다는 생각이 많이 들었습니다.
책에 소개되어진 내용입니다. 큰 구성에 대해서 설명하고 있는 부분이여서, 이 책을 통해서 최종 아키텍처를 구성하는 과정까지
어떻게 이어져 있는지 소개되는 부분이라서 읽어보시면 좋을거 같습니다.
각자 서비스 필요한 부분을 선택적으로 읽어도 문제없는 구성입니다.
설계를 잘 하기 위한 3가지 큰 주제로 저자분은 아래와 같은 항목을 제시합니다.
1) 설계의 목적을 정확히 파악하는 것
2) 설계의 필요한 최소한의 테크닉을 알아야 한다는 것
3) 제대로 된 의사소통을 하는 것
이 3가지 중심으로 구성되어 있고, 설계에 필요한 최소한의 지식으로 다음 네가지를 중점적으로 다룹니다.
☞ 유스케이스 모델
☞ 개념 모델
☞ 데이터베이스 설계
☞ 아키텍처 설계
■ 설계 대상
보는 사람들의 관점마다 설계의 구조와 대상이 달라질수 있다고 생각되지만, 분명한 범주가 있고 대상이 있습니다.
☞ 설계의 대상은 범주가 넓고 포함하는 대상이 많이 있습니다.
이 책에서는 애플리케이션, 미들웨어, 데이터베이스 부분 Stack의 "소프트웨어 설계" 부분에 대한 설명을 합니다.
· 설계를 담당하는 사람은 누구인가?
설계를 해야 하는 사람에 대해서 정의 하기 앞서 책에서 프로젝트 및 개발 프로세스에 대해서 다시한번 언급해줍니다.
이러한 과정을 통해서, 각 상황이 다른 시점에서 어떤 사람이 설계에 대한 Role을 가지고 역활을 수행할지
고려할수 있는 부분을 언급합니다.
☞ 워터풀 개발, 점진적 개발, 애자일 개발 등 대표적인 개발 프로세스 중에 이책에서는 점진적 개발 방식을 통해서 첵에 필요한 개발설계의 방향을 잡고 있습니다.
· 설계의 목적
· 요구 사항의 기능요건, 비기능 요건
· 설계 접근법 : 외부설계, 내부설계
· 객체지향설계, 플로차트, DFD
· 개념모델 작성법, 화면설계법
· 데이터베이스 논리 설계
- 1,2,3정규화 및 기본키 결정, 보이스코드 정규화, 외래키, 다대다 관계 설정, NoSql설계 등에 대해서 데이터베이스 설계시 고려해야 하고, 이론적으로 고려해야 하는 내용이 있습니다. DB설계시 반드시 알아야 하는 부분이 중요한 사항을 기준으로 잘 설명되어 있습니다.
· 비기능 요구사항에 대해서도 많은 부분을 다룹니다.
- 평귱 장애 간격, 처리량/대기시간, 유지보수성, 이식성, 보안등에서 다양한 키워드들이 제공되고 정의되어 있습니다.
■ 4장. 내부 설계 방법
해당 Chapter에서는 기본적으로 SW 개발자분들이 가장 많이 접하고, 많이 고민하고 검토하시는 내용으로 구성되어 있습니다.
내부설계라고 하면 어색한 단어라고 생각이 들수 있는데, 상세설계라고 이해하시면 됩니다.
아래의 사항에 대해서 설계 관점으로 하나하나 체크해봅니다.
· 예제는 SpringBoot를 기반으로 설명을 진행합니다.
- Controller 설계를 할때 수행처리할
요청 파라미터의 유효성 체크
요청 파리미터 획득
비지니스 로직 호출
응답에 대한 데이터 설정
화면 전환 등을 담당합니다.
· http 세션 설계에 대해서도 무상태 프로토콜에서 상태를 유지하기 위해서 설계 구성시 반드시 고민해야 합니다.
서버가 여러대 있을때, 해당 session clustering에 대한 부분이 중요합니다.
· 비지니스 로직 구성시, DB정보 조회시 고려 사항
- 트랜잭션 스크립트 패턴
- 도메인 모델 패턴
- DAO 패턴
- 트랙잭션 제어
- 커넥션 풀
및 성능을 위해서 DB의 쿼리 plan에 대해서도 설계시 고려해야 할 내용이 설명되어져 있습니다.
■ 아키텍처 설계
· 아키텍처 정의 및 기본적으로 접근방법
· 객체지향 설계, 서브시스템 분할, 레이어 아키텍처에 대한 내용이 있습니다.
레이어 아키텍처에 대해서 어떤 기준으로 Presentation, Domain, Data Source에 대한 부분이 있고, 자바에서 레이어 구현 및 레이어의 문제점에 대해서도 구성합니다
· DRY 공통처리를 위해서 접근하기 위한 방법등이 있습니다.
최신의 기술 트랜드 및 개발 방법론의 내용이 포함되어 있고, 소프트웨어 설계시에 고려해야 하는 부분이 책에 잘 표현되고
개발설계시 고려하지 못한 다양한 부분을 살펴볼수 있는 좋은 책이 출간 된 것 같습니다.