전체 글
-
도메인 주도 설계의 본질 - 2부[끝][옛날 글들] 도메인 주도 설계 2024. 5. 29. 16:05
이전 글 : 도메인 주도 설계의 본질 - 1부순수의 시대제조, 건축 메타포로부터 파생된 분석/설계/구현의 명확한 분리가 소프트웨어 개발에 적용하기에는 부적합하다는 깨달음과, 애자일 방법론의 대두로 인한 프로세스와 문서화로부터 개인과 팀, 소프트웨어로의 무게 중심 이동, 리팩토링과 피드백을 통한 점진적인 설계 기법의 적용을 통한 분석/설계/구현 사이클 통합, 그리고 엔터프라이즈 애플리케이션 환경에서 표현적 차이를 줄일 수 있는 POJO 중심의 경량 프레임워크의 대두로 소프트웨어 업계는 기민함과 가벼움의 시대로 접어 들었다. 애자일 동맹은 소프트웨어 개발이 기계적인 작업이 아닌 사람의 창조성과 협업에 의한 작업이라는 사실을 일깨워 주었다. POJO와 경량 프레임워크는 소프트웨어가 기술이 아닌 도메인에 의해 ..
-
도메인 주도 설계의 본질 - 1부[옛날 글들] 도메인 주도 설계 2024. 5. 29. 10:20
은 총알은 없다1986년 소프트웨어 공학의 선구자인 Frederick Brooks는 그의 기념비적인 논문 “은 총알은 없다(No Silver Bullet)”에서 소프트웨어가 태생적으로 안고 있는 본질적인 문제(essence)로 인해 앞으로 10년 내에 생산성, 신뢰성, 단순성을 단 열 배라도 향상시켜줄 기술이나 기법은 출현하지 않을 것이라고 예견했다. Frederick Brooks는 소프트웨어와 관련된 본질적인 어려움을 복잡성, 순응성, 변경 가능성, 비가시성으로 보고, 이러한 본질적인 문제가 해결되지 않는 한 소프트웨어를 프로그래밍 언어로 표현하기 위한 고수준 언어, 통합 환경과 같은 부차적인 작업(accidents)에 많은 노력을 쏟는 것 만으로는 소프트웨어 개발에 있어 비약적인 생산성 향상을 기대할..
-
DAO와 REPOSITORY 논쟁[옛날 글들] 설계 이야기 2024. 5. 28. 17:09
얼마 전 지인으로부터 DAO(Data Access Object)와 REPOSITORY의 차이점에 관해 설명해 달라는 요청을 받았다. 대부분의 소프트웨어 개발 이슈가 그렇듯이 이런 류의 질문에 대한 대답은 미묘하지만 격렬한 논쟁을 불러 일으키기 쉽다. 논쟁의 중심에는 항상 극단적인 순수주의와 허무주의 간의 충돌이 존재하며, 파국의 소용돌이 속에서 개념적 편향을 막기 위한 최선의 방법은 논쟁의 대상이 출현하게된 배경과 현재의 개념이 정립되기까지의 과정을 살펴 보는 것이다. 1990년대 말에 등장한 EJB(Enterprise Java Beans)는 Java의 ‘Write Once, Run Anywhere’ 모토를 엔터프라이즈 어플리케이션 환경으로 확장하기 위한 Sun의 야심작이다. EJB 의 중심 전략은 분산..
-
단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화 2부[끝][옛날 글들] 설계 이야기 2024. 5. 27. 09:00
단일 접근 원칙(Uniform Access Principle)은행 계좌 예제가 변경에 취약한 이유는 Account의 balance 속성을 외부에서 직접 변경할 수 있었기 때문이다. 따라서 balance와 관련된 설계 결정을 변경할 경우 public 속성에 의존하고 있는 많은 코드들이 연쇄적으로 영향을 받게 된다. 이를 방지하는 일반적인 방법은 public 메소드를 통해 private 속성을 캡슐화함으로써 파급 효과의 범위를 제한하고, 외부에서 속성의 값에 접근할 필요가 있을 경우 값을 반환하는 함수를 추가하는 것이다. 그러나 이러한 방식은 코드에 불필요한 잡음을 추가한다.public class Account { private long balance; public Account() { } pub..
-
단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화 1부[옛날 글들] 설계 이야기 2024. 5. 24. 11:49
이전 글 : 단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화 1부 은행 도메인에서 계좌(account)의 주된 용도는 고객의 잔액(balance)을 관리하는 것이다. 객체 지향 분석/설계의 핵심은 실세계의 개념과 유사한(그러나 완전히 동일하지는 않은) 추상 모델을 구축하는 것이므로 유비쿼터스 언어(UBIQUITOUS LANGUAGE)에 포함된 어휘인 account와 balance를 사용해서 도메인 모델을 작성할 수 있다.구현 언어로 Java를 사용할 경우 계좌의 개념을 구현할 수 있는 가장 간단한 방법은 balance를 public 속성으로 가지는 Account 클래스를 추가하는 것이다. 실제 운영 코드였다면 금액을 표현하기 위해 통화와 금액을 하나의 단위로 유지하는 QUAN..
-
도메인 주도 설계의 적용-4.ORM과 투명한 영속성 5부[끝][옛날 글들] 도메인 주도 설계 2024. 5. 8. 08:55
이전글 : 도메인 주도 설계의 적용-4.ORM과 투명한 영속성 4부이 글은 제가 2008년 6월부터 10월까지 5개월간 마이크로소프트웨어에 연재했던 "도메인 주도 설계의 적용"이라는 원고의 원글입니다. 잡지에 맞추어 편집을 하는 과정에서 지면 상의 제약으로 인해 수정되거나 삭제된 부분이 있어 제 블로그에 원글을 올립니다. 도메인 주도 설계(Domain-Driven Design)에 관심 있는 분들에게 도움이 되었으면 합니다. Hibernate에서 사용할 맵핑 파일의 작성이 끝났으므로 Hibernate와 Spring 통합을 위해 Spring 빈 컨텍스트에 Hibernate 관련 빈을 추가하자. 우선 데이터소스를 추가하자. 이제 데이터 소스를 사용하여 Hibernat..
-
도메인 주도 설계의 적용-4.ORM과 투명한 영속성 4부[옛날 글들] 도메인 주도 설계 2024. 5. 2. 20:01
이전글 : 도메인 주도 설계의 적용-4.ORM과 투명한 영속성 3부 이 글은 제가 2008년 6월부터 10월까지 5개월간 마이크로소프트웨어에 연재했던 "도메인 주도 설계의 적용"이라는 원고의 원글입니다. 잡지에 맞추어 편집을 하는 과정에서 지면 상의 제약으로 인해 수정되거나 삭제된 부분이 있어 제 블로그에 원글을 올립니다. 도메인 주도 설계(Domain-Driven Design)에 관심 있는 분들에게 도움이 되었으면 합니다. 영속성 관리 리포지토리Hibernate는 투명한 영속성을 지원하는 오픈 소스 ORM으로 Java 커뮤니티에서 사용되는 ORM의 표준이다. Hibernate는 EJB 3.0의 엔티티 빈 스펙인 JPA에 큰 영향을 끼쳤으며 JBoss의 엔티티빈 구현체로 포함되어 있다. Spring 프..
-
도메인 주도 설계의 적용-4.ORM과 투명한 영속성 3부[옛날 글들] 도메인 주도 설계 2024. 5. 1. 07:36
이전글 : 도메인 주도 설계의 적용-4.ORM과 투명한 영속성 2부 이 글은 제가 2008년 6월부터 10월까지 5개월간 마이크로소프트웨어에 연재했던 "도메인 주도 설계의 적용"이라는 원고의 원글입니다. 잡지에 맞추어 편집을 하는 과정에서 지면 상의 제약으로 인해 수정되거나 삭제된 부분이 있어 제 블로그에 원글을 올립니다. 도메인 주도 설계(Domain-Driven Design)에 관심 있는 분들에게 도움이 되었으면 합니다. 객체 관계 맵핑과 도메인 모델3부에서 살펴본 바와 같이 상태와 행위를 함께 가지는 풍부한 객체 모델로 도메인 레이어를 구성하는 것을 도메인 모델(DOMAIN MODEL) 패턴이라고 한다. 도메인 모델 패턴은 상속, 캡슐화, 다형성과 같은 객체 지향의 장점을 십분 활용함으로써 수정이..