일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향의사실과오해
- Spring
- 테스트
- 아키텍처
- 코틀린
- 이펙티브코틀린
- Boot Legacy 차이점
- 스터디
- 조영호
- DDD
- web
- TDD
- 추상화 설계
- template
- GrokkingFunctionalProgramming
- 만들면서배우는클린아키텍처
- 헥사고날아키텍처
- 계층형아키텍처
- 클린아키텍처
- 유지보수
- 개발서적
- Kotlin
- 책스터디
- FP
- Java
- 함수형프로그래밍
- 테스트주도개발
- 개발방법론
- 도메인 주도 개발 시작하기
- Thymeleaf
- Today
- Total
목록스터디 (47)
김동형수 개발기
30장 데이터베이스는 세부사항이다. 아키텍처 관점에서 볼 때 데이터베이스는 엔티티가 아니다. 데이터베이스는 세부사항이라서 아키텍처의 구성요소 수준으로 끌어올릴 수 없다. 뛰어난 아키텍트라면 저수준의 메커니즘이 시스템 아키텍처를 오염시키는 일을 용납하지 않는다. 관계형 데이터베이스 데이터가 테이블 구조를 가진다는 사실은 오직 아키텍처의 외부 원에 위치한 최하위 수준의 유틸리티 함수만 알아야 한다. 데이터베이스 시스템은 왜 이렇게 널리 사용되는가? 우위를 차지할 수 있단 이유는 무엇일까? 한마디로 답하자면, 바로 '디스크'때문이다. 디스크 때문에 피해갈 수 없는 시간 지연이라는 점을 완화하기 위해, 색인, 캐시, 쿼리 계획 최적화가 필요해졌다. 하나는 파일 시스템이었고, 다른 하나는 관계형 데이터베이스 관리..
20장 업무 규칙 애플리케이션을 업무 규칙과 플러그인으로 구분하려면 업무 규칙이 실제로 무엇인지 잘 이해해야만 한다. 업무 규칙은 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차다. 핵심 업무 규칙 - 사업 자체에 핵심적, 보통 데이터를 요구 이에 필요한 데이터를 핵심 업무 데이터라 한다. 핵심 규칙과 핵심 데이터는 본질적으로 결합되어 있기 때문에 객체로 만들 좋은 후보가 된다. 이러한 유형을 객체 엔티티 엔티티 엔티티는 컴퓨터 시스템 내부의 객체로서, 핵심 업무 데이터를 기반으로 동작하는 일련의 조그만 핵심 업무 규칙을 구체화한다. 엔티티는 데이터베이스, 사용자 인터페이스, 서드파티 프레임워크에 대한 고려사항들로 인해 오염되어서는 절대 안 된다. 유스케이스 유스케이스는 자동화된 시스템이 ..
15장 아키텍처란? 소프트웨어 시스템의 아키텍처란 시스테을 구축했던 사람이만들어낸 시스템의 형태다. 그 모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 의사소통하는 방식에 따라 정해진다. 시스템 아키텍처는 시스템의 동작 여부와는 거의 관련이 없다. 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화 개발 팀이 작다면 모노리틱 시스템을 개발 개발 초기에는 아키텍처 고나련 제약들이 오히려 방해가 된다고 여길 가능성이 높다. 배포 소프트웨어 시스템이 사용될 수 있으려면 반드시 배포할 수 있어야 한다. 아키텍처는 시스템을 단 한 번에 쉽게 배포할 수 있도록 만드는 데 그 목표를 두어야 한다. 운영 운영에서 겪는 대다수의 어려움..
12장 컴포넌트 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다. 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 프로그램과 라이브러리가 사용하는 메모리가 늘어날수록 단편화는 계속 될 수밖에 없었다. 재배치성 해결책은 재배치가 가능한 바이너리였다. 컴파일러는 재배치가 가능한 바이너리 안의 함수 이름을 메타데이터 형태로 생성하도록 수정되었다. 외부 정의를 로드할 위치가 정해지기만 하면 로더가 외부 참조를 외부 정의에 링크시킬 수 있게 된다. 링킹 로더 탄생 링커 링킹 로더의 등장으로 프로그래머는 프로그램을 개별적으로 컴파일하고 로드할 수 있는 단위로 분할할 수 있게 되었다. 링킹 로더가 너무 느려서 참을 수..
좋은 소프트웨어 시스템은 깔끔한 코드로부터 시작한다. Solid 원칙의 목적은 중간 수준의 소프트웨어 구조가 아래 같도록 만드는데 있다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트 기반이 된다. 7장 SRP : 단일 책임 원칙 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 변경의 이유란 바로 이들 사용자와 이혜관계자를 가리킨다. 하나의 모듈은 하나의 오직 하나의 사용자 또는 이해관계자에 대해서만 책임져야 한다. 하나의 모듈은 하나의 오직 하나의 액터에 대해서만 책임져야 한다. 모듈은 단순히 함수와 데이터 구조로 구성된 응집된 집합이다. SRP는 서로 다른 액터가 의존하는 코드를 서로 분리하라고 말한다. 병합에는 항상 위험이 뒤따르게 된다. 이 문제를 ..
3장 패러다임 개요 구조적 프로그래밍 무분별한 점프 -> if/then/else do/while/until 익숙한 궂로 대체 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지도리 수 있음을 발견 이러한 함수가 클래스의 생산자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었다. 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. 함수형 프로그래밍 불변성 : 심볼의 값이 변경되지 않는다는 개념 함수형 언어가 변수 값을 변경할 수 있는 방법을 제공하기는 하지만, 까다롭다. 함수형 프로그래밍은 할당문에 대해 규칙을..
1장 설계와 아키텍처란? '아키텍처'는 저수준의 세부사항과는 불리된 고수준의 무언가를 가리킬때 흔히 사용 '설계'는 저수준의 구조 또는 결정사항 등을 의미할 때 사용 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는데 투입할 인력을 최소화하는데 있다. 시스템의 수명이 다할 때까지 낮게 유지할 수 있다면 좋은 설계,새로운 기능을 출시할 때마다 비용이 증가한다면 나쁜 설계 시간이 갈 수록 유지보수 비용이 증가하는 프로젝트에 대한 사례 소개 엉망으로 만들면 깔끔하게 유지할 때보다 항상 더 느리다. 빨리가는 유일한 방법은 제대로 가는 것이다. 개발 조직이 할 수 있는 최고의 선택지는 조직에 스며든 과신을 인지하여 방지하고, 소프트웨어 아키텍처의 품질을 심각하게 고민하기 시작하는 것이다. 소프트웨어..
31장 리팩토링 TDD에서는 리팩토링을 특이한 방법으로 사용한다. 일반적으로 리팩토링은 어떤 상황에서도 프로그램의 의미론을 변경해서는 안 된다. 하지만 TDD에서 우리가 신경 쓰는 부분은 현재 이미 통과한 테스트들뿐이다. 예를 들어 TDD에서는 상수를 변수로 바꾸고 양심에 거리낌 없이 이를 리팩토링이라고 부른다. 왜냐하면 이 행위가 통과하는 테스트의 집합에 아무 변화도 주지 않기 때문이다. ‘관측상의 동치성’이 성립되려면 충분한 테스트를 가지고 있어야 한다. 충분한 테스트란, 현재 가지고 있는 테스트들에 기반한 리팩토링이 추측 가능한 모든 테스트에 기반한 리팩토링과 동일한 것으로 여겨질 수 있는 상태를 말한다. 차이점 일치시키기 추론 과정이 길어지면 지금 고치려고 하는 부분이 결과에 영향을 주지 않을 거..