본문 바로가기

분류 전체보기

(128)
Chapter 11, 12 11 시스템 복잡성은 죽음이다. 개발자에게서 ㅅ애기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다. - Ray Ozzie, 마이크로소프트 CTO 도시를 세운다면? 한사람의 힘으로 직적 도시를 관리할 수 없다. 도시는 각 분야를 관리하는 팀이 있고, 적절한 추상화 와 모듈화로 개인과 개인이 관리하는 구성요소는 효율적으로 돌아감. 소프트웨어 팀도 도시처럼 구성함. 시스템 제작과 시스템 사용을 분리하라 제작 construction은 사용 use 와 아주 다르다. 소프트웨어 시스템은 준비과정과 런타임 로직을 분리해야 한다. '관심사 분리'는 오래되고 중요한 설계기법중 하나. 초기화 지연 기법을 한번정도 사용하면 심각하게 문제는 아니지만 여기저기 산재하면 대개 중복이 문제가 됨. 설정논리는 일반 ..
Chapter 09, 10 9장 단위 테스트 애자일과 TDD 로 단위테스트를 자동화 하는 프로그래가 늘어나는 추세. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성. 이 규칙을 따르면 테스트 코드와 실제 코드가 함께 나옴. 하지만 실제 코드를 전부 테스트 하는 방대한 테스트 코드는 관리문제를 유발하기도 함. 깨끗한 테스트 코드 유지하기 일회용 테스트 코드와 자동화된 단위 테스트 슈트는 간극이 매우 큼. 테스트 코드가 지저분할수록 변경하기 어려워지며, 테스트 코드가 복잡하면 유지보수하는 비용도 늘어나게 된다. 테스트 코드는 실제 코드 만큼 중요하다. 테스트 케이스..
06세부사항 -4 34장 빠져있는 장 소프트웨어는 올바르게 정의된 경계, 명확한 책임, 통제된 의존성을 가진 클래스와 컴포넌트로 구성되나 디테일(구현 세부사항)을 고려해야 함. 온라인 서점 예제. 설계나 코드 조직화와 관련된 접근법 계층 기반 패키지 전통적 수평 계층형 아키텍처 - 기술적 관점에서 해당 코드가 하는일에 기반해 코드 분할. 웹, 업무 규칙, 영속성 코드를 위해 수평적 계층이 각각 존재. 자바의 경우 계층은 패키지로 구현. OrdersController: 웹 기반 요청 처리. OrdersService: 주문 업무규칙을 정의하는 인터페이스 OrdersServiceImpl: OrdersService 구현체 OrdersRepository: 주문정보에 접근하는 방법 정의하는 인터페이스 JdbcOrdersReposit..
06 세부사항 - 2 31장 웹은 세부사항이다 끝없이 반복하는 추 연산 능력을 중앙에 집중하는 방식과 분산하는 방식 사이에 끊임없이 움직임. 웸
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..
Querydsl MathExpressions 이용해 Float 컬럼값 select Querydsl 에서 DB 데이터 값을 변환하여 select 하는 방법 DB의 값중 Float 값을 제대로 선택하려면 decimal 로 변환해서 찾는 방법이 있고, SELECT * FROM your_table WHERE cast(my_float as decimal(5,1)) = 1.3; leehblue.com/match-a-float-in-mysql/ How To Match A Float Column In MySQL - Lee Blue The Float datatype in MySQL is inherently inaccurate. If you are planning to use a float datatype for a column in your database you should reconsider, e..