클린 코드(Clean Code)
-
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
소리치는 아키텍처 건물의 청사진을 보고 그 계획서가 한 가족이 거주할 주택을 그리고 있다면 아키텍처는 집이라고 소리칠 것입니다. 만약 도서관의 아키텍처를 보고 있고 여러 가지 도서관에 필요한 구성을 보다면 아키텍처는 도서관이라고 소리칠 것입니다. 우리의 애플리케이션을 보고는 아키텍처는 뭐라고 소리칠까요? 상위 수준의 디렉터리 구조, 최상위 패키지에 담긴 소스 파일을 볼 때 "헬스 케어 시스템이야", "재고 관리 시스템이야"라고 소리칠까요? 아니면 "스프링/하이버네티트야", "레일스야"라고 소리치는가요? 주택이나 도서관의 계획서가 해당 건축물의 유스케이스에 대해 소리치는 것처럼, 소프트웨어 애플리케이션의 아키텍처도 애플리케이션의 유스케이스에 대해 소리쳐야 합니다. 아키텍처의 목적 책에서 여러번 언급하는 내..
-
20장 - 업무 규칙클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 12. 00:01
업무 규칙이란? 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차입니다. 컴퓨터상으로 구현되었는지, 사람이 수동으로 직접 하는 것과는 연관이 없습니다. 보통 업무규칙은 데이터를 요구하며 이러한 데이터를 핵심 업무 데이터라 부릅니다. 핵심 규칙과 핵심 데이터는 본질적으로 결합되어 있기 때문에 객체로 만들 좋은 후보가 되며 이러한 유형을 엔티티라고 합니다. 엔티티 JPA등의 프레임워크를 다루며 엔티티는 친숙한 용어입니다. 예를 들어 대출을 뜻하는 Loan 엔티티는 다음과 같습니다 Loan 엔티티는 핵심 업무 데이터를 포함합니다. - 이율 - 기간 - 원칙 Loan 엔티티는 세 가지 핵심 업무 규칙을 인터페이스로 제공합니다. - makePayment - applyInterest - chargeLa..
-
19장 - 정책과 수준클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 2. 00:01
정책 소프트웨어 시스템이란 정책을 기술한 것입니다. 대다수의 주요 시스템에서 하나의 정책을 서술하는 여러 개의 조그만 정책들로 쪼갤 수 있습니다. 수준 수준이란 입력과 출력까지의 거리입니다. 시스템의 입력과 출력 모두로부터 멀리 위치할수록 정책의 수준은 높아집니다. 번역 컴포넌트는 이 시스템에서 최고 수준의 컴포넌트이며 입력과 출력에서 가장 멀리 떨어져 있습니다. 주목할 점은 데이터의 흐름과 소스코드의 의존성이 항상 같은 방향을 가리키지 않는다는 사실입니다. 소스 코드 의존성은 그 수준에 따라 결합되어야 하며, 데이터 흐름을 기준으로 결합되어서는 안 됩니다. 고수준인 Encrypt 함수가 저수준인 reader와 wrtier에 의존하면 안 됩니다. 회색 테두리 안에 묶인 영역이 이 시스템의 최고 수준의 구..
-
18장 - 경계 해부학클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 1. 00:01
개요 시스템 아키텍처는 일련의 소프트웨어 컴포넌트와 그 컴포넌트들을 분리하는 경계에 의해 정의됩니다. 이번 장에서는 이런 경계의 다양한 형태를 알아보려고 합니다. 경계 횡단하기 '경계를 횡단한다'함은 단순히 경계 한쪽에 있는 기능에서 반대쪽 기능을 호출하여 데이터를 전달하는 일에 불과합니다. 경계는 이러한 변경이 전파되는 것을 막는 방화벽을 구축하고 관리하는 수단으로써 존재합니다. 두려운 단일체 모놀리틱은 배포 관점에서 경계가 드러나지 않습니다. (하나의 거대한 파일이므로) 이에 모놀리틱은 다형성에 의존하여 내부 의존성을 관리합니다. 저수준 클라이언트와 고수준 서비스 고수준 클라이언트와 저수준 서비스 의존성 역전을 활용하여 컴파일 의존성과는 반대가 됩니다. 정적 링크된 모노리틱 구조의 실행 파일이라도 이..
-
17장 - 경계: 선 긋기클린 코드(Clean Code)/클린 아키텍처요약 2022. 12. 30. 00:01
경계란? 경계는 소프트웨어 요소를 서로 분리하고, 경계 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막습니다. 프로젝트 초기의 그어지는 선은 가능한 결정을 연기시키기 위한 목적으로 사용됩니다. W사, P사의 아키텍트가 너무 이르게 결정을 내려 개발 비용이 가중된 사례 이야기 Finesse 초기에 MySQL을 염두에 두고 있었으나 인터페이스와 스텁을 만들어두고 최대한 결정을 연기하였습니다. 이후에 영속성을 구현해야하는 시점에 MySQL을 다시 한번 고민하였으며, 단기적으로는 필요 없다는 결정을 내리게 되었으며 추후에는 완전히 폐기하였습니다. 하지만 추후에 고객이 MySql에 저장하고 싶다는 요구사항을 보였고, 하루 만에 도입할 수 있게 되었습니다. 이렇게 업무 규칙과 데이터베이스 사이에 경계선을..