클린 코드(Clean Code)/클린 아키텍처요약
-
34장 - 빠져 있는 장클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 28. 00:01
계층 기반 패키지 전형적인 계층형 아키텍처에는 웹, 업무 규칙, 영속성 코드를 위한 계층이 하나씩 존재합니다. OrderController(Spring MVC) OrdersService(인터페이스) OrderServiceImpl(구현체) OrdersRepository(인터페이스) JdbcOrderRepository(구현체) 기능 기반 패키지 서로 연관된 기능, 도메인 개념, 또는 Aggregate Root에 기반하여 수직의 얇은 조각으로 코드를 나누는 방식입니다. Aggregate Root란 에릭 에반스의 도메인 주도 설계에 나온 개념으로 데이터 변경의 단위로 다루는 연관 객체의 묶음입니다. orders라는 패키지를 두고 Controller, Service, Repository를 모두 묶어둡니다. 이제 ..
-
33장 - 사례 연구: 비디오 판매클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 27. 00:01
뛰어난 아키텍트가 일을 처리하는 과정과 결과 예시 비디오를 판매하는 소프트웨어에서 아키텍트가 일을 처리하는 과정과 결정을 내리는 과정을 보여주고자 합니다. 1단계: 액터와 유스 케이스를 식별하기 제작자, 구매자, 관리자, 시청자로 엑터를 구분합니다. 엑터는 시스템이 변경되어야 할 네 가지 주요 근원이 됩니다. 이때 유사한 유스케이스는 식별해서 초기에 통합하는 방법을 찾습니다. (유스 케이스 추상화) 2단계 : 컴포넌트 아키텍츠 그리기 뷰, 프레젠터, 인터랙터, 컨트롤러로 분리된 전형적인 분할된 컴포넌트 아키텍처를 그릴 수 있습니다. 각 컴포넌트는 단일 .jar 파일 또는 단일 .dll 파일에 해당합니다. 하지만 꼭 모두 배포할 필요는 없고 선택적으로 배포방식을 조정할 수 있습니다. 예를 들어 다섯 개의 ..
-
26장 - 메인 컴포넌트클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 20. 00:01
메인 컴포넌트 모든 시스템에는 최소한 하나의 컴포넌트가 존재하고, 이 컴포넌트가 나머지 컴포넌트를 생성, 조정, 관리합니다. 이를 메인 컴포넌트라고 합니다. 가장 낮은 수준의 정책으로 시스템의 초기 진입점입니다. 보통 시스템에서 더 높은 수준을 담당하는 부분으로 제어권을 넘기는 역할을 맡습니다. 호출은 메인에서 하지만 실제 처리하는 일은 다른 고수준 컴포넌트로 위임합니다. 결론 메인을 애플리케이션 플러그인이라고 생각하면 좋습니다. 외부 자원을 모두 수집한 뒤, 제어권을 애플리케이션의 고수준 정책으로 넘기는 플러그인입니다.
-
25장 - 계층과 경계클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 19. 00:01
세 가지 컴포넌트의 클린 아키텍처? 시스템이 UI, 업무 규칙, 데이터베이스로 세 가지 컴포넌트로만 구성된다고 생각하기 쉽습니다. 이런 맥락이라면 클린 아키텍처 접근법을 적용하여 유스 케이스, 경계, 엔티티, 그리고 관련된 데이터 구조를 만드는 일도 쉬운 일입니다. 하지만 텍스트를 주고받은 메커니즘을 다양하게 만들고 싶을 수 있습니다. sheel 창 또는 텍스트 메시지 또는 채팅 애플리케이션을 사용하기를 원할 수 있습니다. 따라서 언어를 통신 매커니즘으로부터 격리하는 API를 생성해야 할 수도 있습니다. 다이어그램은 복잡해질 수 있지만 점선으로 된 테두리는 API를 정의하는 추상 컴포넌트를 가리키며 위나 아래의 컴포넌트가 구현됩니다. 순전히 API 컴포넌트에만 집중한다면 다이어그램을 단순화할 수 있습니다..
-
24장 - 부분적 경계클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 18. 00:01
경계 비용과 부분적 경계 경계를 완벽하게 만드는 데 비용이 많이 듭니다. 뛰어난 아키텍트라면 이런 경계를 만드는 비용이 너무 크다고 생각할 수 있지만, 나중에 필요할 수 있기 때문에 경계에 필요한 공간을 확보하기 원할 수 있습니다. 애자일 커뮤니티의 많은 사람들이 이런 점이 YAGNI(You Aren't Going to Need it) 원칙을 위배하기 때문에 탐탁지 않게 여깁니다. YAGNI란? 프로그래머가 필요하다고 간주할 때까지 기능을 추가하지 않는 것이 좋다는 원칙입니다. 이때 부분적 경계를 구현해볼 수 있습니다. 부분적 경계 독립적으로 컴파일하고 배포할 수 있는 작업을 모두 수행한 뒤, 단일 컴포넌트에 그대로 모아두는 것입니다. 완벽한 경계를 만드는 것 만큼 코드와 사전 설계가 필요하지만 다수의 ..
-
23장 - 프레젠터와 험블 객체클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 15. 00:01
험블 객체 패턴 프레젠터는 험블 객체 패턴을 따른 형태로 아키텍처 경계를 식별하고 보호하는 데 도움이 됩니다. 험블 객체 패턴은 디자인 패턴으로, 테스트하기 어려운 행위와 테스트하기 쉬운 행위를 단위 테스트 작성자가 분리하기 쉽게 하는 방법으로 고안되었습니다. 테스트하기 어려운 행위를 모두 험블 객체로 옮기는 간단한 패턴입니다. 프레젠터와 뷰 뷰는 험블 객체이며 테스트하기 어렵습니다. 프레젠터는 테스트하기 쉬운 객체로 애플리케이션으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만들어냅니다. 테스트 코드를 어느 정도 작성해 보았다면 위의 개념에 대해서는 쉽게 이해할 수 있습니다. 데이터베이스 게이트웨이 유스케이스 인터랙터와 데이터베이스 사이에는 데이터베이스 게이트웨이가 위치합니다. 유스케이스 계층은..
-
22장 - 클린 아키텍처클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 14. 00:01
여러 시스템 아키텍처들 육각형 아키텍처, DCI, BCE 등의 유명한 시스템 아키텍처들이 존재합니다. 세부적인 내용은 다를 수 있지만 전체 내용은 상당히 비슷합니다. 이들의 목표는 관심사의 분리입니다. 시스템이 다음과 같은 특징을 지니도록 만듭니다. - 프레임워크 독립성 - 테스트 용이성 - UI 독립성 - 데이터베이스 독립성 - 모든 외부 에이전시에 대한 독립성 클린 아키텍처 각각의 동심원은 소프트웨어에서 서로 다른 영역을 표현합니다. 보통 안으로 들어갈수록 고수준의 소프트웨어가 됩니다. 소스 코드의 의존성은 반드시 안쪽으로, 고수준의 정책으로 향해야 합니다. 엔티티 : 엔터프라이즈의 핵심 규칙 유스케이스 : 특정 소프트웨어에 특화된 업무 규칙 인터페이스 어뎁터 : 데이터를 유스케이스와 엔티티에게 가장..
-
21장 - 소리치는 아키텍처클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 13. 00:01
소리치는 아키텍처 건물의 청사진을 보고 그 계획서가 한 가족이 거주할 주택을 그리고 있다면 아키텍처는 집이라고 소리칠 것입니다. 만약 도서관의 아키텍처를 보고 있고 여러 가지 도서관에 필요한 구성을 보다면 아키텍처는 도서관이라고 소리칠 것입니다. 우리의 애플리케이션을 보고는 아키텍처는 뭐라고 소리칠까요? 상위 수준의 디렉터리 구조, 최상위 패키지에 담긴 소스 파일을 볼 때 "헬스 케어 시스템이야", "재고 관리 시스템이야"라고 소리칠까요? 아니면 "스프링/하이버네티트야", "레일스야"라고 소리치는가요? 주택이나 도서관의 계획서가 해당 건축물의 유스케이스에 대해 소리치는 것처럼, 소프트웨어 애플리케이션의 아키텍처도 애플리케이션의 유스케이스에 대해 소리쳐야 합니다. 아키텍처의 목적 책에서 여러번 언급하는 내..