본문 바로가기

IT Book Summary

(80)
06 세부사항 -1 30장 데이터베이스는 세부사항이다. 데이터베이스는 세부사항이라 아키텍처의 구성요소 수준으로 끌어올릴수 없음. 애플리케이션 내부 데이터 구조는 아키텍처에서 중요하지만 데이터베이스 모델은 아님. 데이터베이스는데이터에 접근할 방법을 제공하는 유틸리티일 뿐. 관계형 데이터베이스 관계형 테이블은 특정한 형식의 데이터에 접근할때 편하지만, 데이터를 테이블에 행 단위로 배치하는 자체는 중요하지 않음. 데이터 접근 프레임워트가 테이블과 행이 객체형태로 시스템에 산재하는건 잘못된 설계이다. 이렇게하면 유스케이스, 업무규칙, UI 조차 관계형 데이터 구조에 결합된다. 데이터베이스 시스템은 왜 이렇게 널리 사용되는가? 이유는 자기 디스크 데이터 저장소와 다른 형태의 데이터 저장소 형식. 디스크에서 특정바이트를 읽으려면 시간..
05 아키텍처 - 6 28장 테스트 경계 시스템 컴포넌트인 테스트 테스트의 의존성은 항상 테스트 대상이 되는 시스템의 컴포넌트를 향함. 역할은 운영이 아니라 개발은 지원하는 것. 모든 시스템 컴포넌트가 지켜야하는 모델을 표현해 줌. 테스트를 고려한 설계 시스템에 결합된 테스트는 시스템이 변경될 때 같이 변경되야함. 공통 컴포너트가 변경되면 Fragile Tests Problem 이 생김. 문제를 해결하려면 테스트를 고려해서 설계해야 함. 변동성이 있는것에 의존하지 말라 - 업무규직을 테스트할 수 있게. 테스트 API 테스트가 모든 업무규칙을 검증하는데 사용할 수 있도록 특화 API를 만듬. 시스템을 테스트 가능한 특정 상태로 강제하는 힘. API는 인터랙터 Interactor 와 인터페이스 어댑터 Interface Adapt..
05 아키텍처 - 5 25장 계층과 경게 시스템을 구축하는 컴포넌트는 UI, 업무규칙, 데이터베이스 컴포넌트 외 그보다 더 많음 움퍼스 사냥 게임 텍스트 기반 사냥 게임. 텍스트 기반 UI는 유지. 게임규칙과 UI를 분리해 다양한 언어로 발매. API를 생성해 게임규칙이 데이터 저장소 컴포넌트와 통신할때 사용. 클린아키텍처? UI에서 언어뿐 아니라 텍스트를 주고받는 매커니즘을 다양하게 할 경우. 언어를 통신 메커니즘으로부터 격리하는 API 생성 점선으로 된 테두리는 API를 정의하는 추상 컴포넌트. 추상 컴포넌트는 아래의 컴포넌트가 구현. API는 구현하는 쪽이 아닌 사용하는 쪽에 정의되고 소속. GameRules 내부 코드에서 사용하고 Language 내부 코드에서 구현하는 다형적 Boundary 인터페이스가 있음. Lan..
05 아키텍처 - 4 22장 클린 아키텍처 관심사 분리- 소프트웨어를 계층으로 분리. - 최소한 업무규칙을 위한 계층, 사용자와 시스템 인터페이스를 위한 다른계층 하나 포함. 프레임워크 독립성 테스트 용이성. UI 독립성 데이터베이스 독립성. 모든 외부 에이전시 에 대한 독립성 의존성 규칙 보통 안으로 들어갈수록 고수준의 소프트웨어. 바깥쪽 - 메커니즘, 안쪽 -정책 소스코드 의존성은 반드시 안쪽으로, 고수준의 정책을 향해야 한다. 외부원에 위치한 것은 내부 원에 영향을 주지 않게 해야한다. 엔티티 엔티티는 핵심업무 고수준인 규칙을 캡슐화 함. 해당 애플리케이션의 업무 객체. 유스케이스 유스케이스 계층은 애플리케이션 특화 업무규칙을 포함. 엔티티로 들어오고 나가는 데이터 흐름을 조정. 이 계층에서 발생한 변경이 엔티티에 영향..
05 아키텍처 - 3 19장 정책과 수준 소프트 웨어 시스템 - 정책을 기술한 것. 아키텍처 개발은 재편성된 컴포넌트들을 비순환 방향 그래프로 구성하는 기술을 포함. 의존성은 소스코드, 컴파일타임의 의존성. 자바의 경우 import, C#에서는 using 구문, 루비에서는 require 구문. 각 컴포넌트를 연결할 때 의존성의 방향이 컴포넌트의 수준을 기반으로 연결되도록 만들어야 함. 저수준 컴포넌트가 고주순 컴포넌트에 의존하도록 설계 수준 level : 입력과 출력까지의 거리 입력과 출력을 다루는 정책이라면 시스템 최하위 수준에 위치하게 함. 소스코드 의존성은 그 수준에 따라 결합되어야 하며, 데이터 흐름을 기준으로 결합되서서는 안됨. function encrypt() { while(true) writeChar(transl..
05 아키텍처 - 2 16장 독립성 좋은 아키텍처가 시스템에서 지원해야 할 것. 유스케이스 운여 개발 배포 유스케이스 시스템의 아키텍처는 시스템의 의도를 지원해야 한다. 행위를 명확히 하고 외부로 드러내서 이를통해 시스템이 지닌 의도를 아키텍처 수준에서 알아볼 수 있게 만드는 것. 운영 운영지원 관점에서 아키텍처는 요구사항에 맞게 운영작업을 허용할 수 있는 형태로 구조화되야 한다. 아키텍처에서 각 컴포넌트를 적절히 격리하여 유지하고 컴포넌트 간 통신 방식을 특정 형태로 제한하지 않으면, 나중에 운영에 필요한 요구사항이 바뀌더라도 기술 스펙트럼 사이를 전화하는 일이 훨씬 쉽다. 개발 개발환경을 지원하는데 있어 아키텍처는 핵심적인 역할을 한다. Conway 법칙 시스템을 설계하는 조직이라면 어디든지 그 조직의 의사소통 구조와 동..
05 아키텍처 - 1 15장 아키텍처란? 소프트웨어 아키텍트는 코드와 동떨어져서는 안되며, 팀원들이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끌어야 한다. 시스템을 구축했던 사람들이 만들어낸 시스템의 형태. 그 형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수 되도록 만든다. 주된 목적은 시스템의 생명주기를 지원하는 것이다. 궁극적 목표는 시스템의 수명과 관련되 비용은 최소화하고, 프로그래머의 생산성은 최대화 하는데 있다. 개발 개발팀이 시스템을 쉽게 개발하도록 뒷받침. 작은 규모의 개발팀이라면 이러한 아키텍처 제약사항들이 방해가 된다고 느낄수도 있으나, 여러팀이 개발하고있다면 신뢰할 수 있는 안정된 인터페이스를 갖춘, 설계된 컴포넌트 단위로 분리하지 않으면 개발이 진척되지 않는다. ..
04 컴포넌트 원칙 -2 컴포넌틑 응집도와 관련된 세가지 원칙 REP: The Reuse/Release Equivalence Principle CCP: The Common Closure Principle CRP: The Common Reuse Principle 13장 컴포넌트 응집도 Component Cohesion REP: 재사용/릴리스 등가 원칙 재사용 단위는 릴리스 단위와 같다. 릴리즈 번호가 없으면 재사용 컴포넌트들이 서로 호환되는지 보증할 수 없음. 하나의 컴포넌트로 묶인 클래스와 모듈은 반드시 함께 릴리스 가능해야 함. CCP: 공통 폐쇄 원칙 동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트에 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트에 분리 단일 컴포넌트는 변경의 이유가 여러..