일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring
- template
- 테스트
- FP
- GrokkingFunctionalProgramming
- 함수형프로그래밍
- Boot Legacy 차이점
- 스터디
- 개발서적
- 개발방법론
- 객체지향의사실과오해
- Thymeleaf
- TDD
- web
- 헥사고날아키텍처
- 아키텍처
- 만들면서배우는클린아키텍처
- 도메인 주도 개발 시작하기
- 추상화 설계
- 이펙티브코틀린
- 코틀린
- 클린아키텍처
- DDD
- 조영호
- 테스트주도개발
- Java
- 계층형아키텍처
- 책스터디
- Kotlin
- 유지보수
- Today
- Total
목록책 스터디 (77)
김동형수 개발기
12장 컴포넌트 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다. 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 프로그램과 라이브러리가 사용하는 메모리가 늘어날수록 단편화는 계속 될 수밖에 없었다. 재배치성 해결책은 재배치가 가능한 바이너리였다. 컴파일러는 재배치가 가능한 바이너리 안의 함수 이름을 메타데이터 형태로 생성하도록 수정되었다. 외부 정의를 로드할 위치가 정해지기만 하면 로더가 외부 참조를 외부 정의에 링크시킬 수 있게 된다. 링킹 로더 탄생 링커 링킹 로더의 등장으로 프로그래머는 프로그램을 개별적으로 컴파일하고 로드할 수 있는 단위로 분할할 수 있게 되었다. 링킹 로더가 너무 느려서 참을 수..
좋은 소프트웨어 시스템은 깔끔한 코드로부터 시작한다. Solid 원칙의 목적은 중간 수준의 소프트웨어 구조가 아래 같도록 만드는데 있다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트 기반이 된다. 7장 SRP : 단일 책임 원칙 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 변경의 이유란 바로 이들 사용자와 이혜관계자를 가리킨다. 하나의 모듈은 하나의 오직 하나의 사용자 또는 이해관계자에 대해서만 책임져야 한다. 하나의 모듈은 하나의 오직 하나의 액터에 대해서만 책임져야 한다. 모듈은 단순히 함수와 데이터 구조로 구성된 응집된 집합이다. SRP는 서로 다른 액터가 의존하는 코드를 서로 분리하라고 말한다. 병합에는 항상 위험이 뒤따르게 된다. 이 문제를 ..
3장 패러다임 개요 구조적 프로그래밍 무분별한 점프 -> if/then/else do/while/until 익숙한 궂로 대체 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지도리 수 있음을 발견 이러한 함수가 클래스의 생산자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었다. 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. 함수형 프로그래밍 불변성 : 심볼의 값이 변경되지 않는다는 개념 함수형 언어가 변수 값을 변경할 수 있는 방법을 제공하기는 하지만, 까다롭다. 함수형 프로그래밍은 할당문에 대해 규칙을..
1장 설계와 아키텍처란? '아키텍처'는 저수준의 세부사항과는 불리된 고수준의 무언가를 가리킬때 흔히 사용 '설계'는 저수준의 구조 또는 결정사항 등을 의미할 때 사용 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는데 투입할 인력을 최소화하는데 있다. 시스템의 수명이 다할 때까지 낮게 유지할 수 있다면 좋은 설계,새로운 기능을 출시할 때마다 비용이 증가한다면 나쁜 설계 시간이 갈 수록 유지보수 비용이 증가하는 프로젝트에 대한 사례 소개 엉망으로 만들면 깔끔하게 유지할 때보다 항상 더 느리다. 빨리가는 유일한 방법은 제대로 가는 것이다. 개발 조직이 할 수 있는 최고의 선택지는 조직에 스며든 과신을 인지하여 방지하고, 소프트웨어 아키텍처의 품질을 심각하게 고민하기 시작하는 것이다. 소프트웨어..
2장 이상한 나라의 객체이상한나라의 엘리스를 예를들어 객체에 대해 설명한다. 객체지향과 인지능력많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 객체지향 패러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 출발한다. 객체, 그리고 이상한 나라이상한 나라의 앨리스.앨리스 객체앨리스의 상태를 결정하는 것은 행동이지만 행동의 결과를 결정하는 것은 상태다. 행동의 결과는 상태에 의존적이다. 상태에 따라 행동의 결과가 달라지는 또 다른 ..
1장 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 실세계의 사물을 기반으로 소프트웨어 객체를 식별하고 구현까지 이어간다는 개념은 객체지향 설계의 핵심 사상인 연결완전성을 설명하는데 적합한 틀을 제공한다. 협력하는 사람들 커피 공화국의 아침 예시로 든 커피 주문과정에서 손님, 캐시어, 바리스타 사이의 암묵적인 협력 관계가 존재한다. 커피 주문이라는 협력에 참여하는 모든 사람들은 커피가 정확하게 주문되고 주문된 커피가 손님에게 정확하게 전달될 수 있도록 맡은바 역할과 책임을 다하고 있는 것이다. 소프트웨어 개발 프로젝트가 진행되는 곳에서도 사람이 사는 곳이라면 어디서나 역할,책임,협력이 존재한다. 객체지향의 가장 중요한 개념 세 가지 - ..
10장 이벤트 10.1 쇼핑몰에서 구매를 취소하면 환불을 처리해야 한다. 도메인 기능에서 도메인 서비스를 실행하게 된다. 응용서비스에서 환불 기능을 실행할 수도 있다. 결제 시스템이 제공하는 환불서비스를 호출한다. 두 가지 문제가 발생할 수 있는데, 첫 번째는 외부 서비스가 정상이 아닐 경우 트랜잭션 처리 두 번째 문제는 성능에 대한 것. 환불을 처리하는 외부 시스템의 응답 시간이 길어지면 그 만큼 대기 시간도 길어진다. 외부 서비스 성능에 직접적인 영향을 받게 된다. 두 가지 문제 외에 도메인 객체에 서비스를 전달하면 추가로 설계상 문제가 나타날 수 있다. 로직이 섞이는 문제 주문 도메인 객체의 코드를 결제 도메인 때문에 변경할지도 모르는 상황은 좋아 보이지 않는다. 지금까지 언급한 문제가 발생하는 이..
9장 도메인 모델과 바운디드 컨텍스트 9.1 처음 도메인 모델을 만들 때 빠지기 쉬운 함정이 도메인을 완벽하게 표현하는 단일 모델을 만드는 시도를 하는 것이다. 하위 도메인을 모두 표현하려고 시도하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 논리적으로 같은 존재처럼 보이지만 하위 도메인에 따라 다른 용어를 사용하는 경우도 있다. 하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 한다. 이렇게 구분되는 경계를 갖는 컨텍스트를 DDD에서 바운디드 컨텍스트라고 부른다. 9.2 바운디드 컨텍스트는 모델의 경계를 결정하며 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다. 이상적으로 하위 도메인과 바운디드 컨텍스트가 일대일..