본문 바로가기

전체 글333

DDD - Factory - 출처: 도메인 주도 설계 - 에릭 에반스 - Factory 어떤 객체나 Aggregate를 생성하는 일이 복잡해지거나 혹은 내부 구조가 너무 많이 드러나는 경우 Factory를 통해 캡슐화를 제공할 수 있다. 우리는 자동차를 운전할 때 어떻게 조립 되었느냐는 신경쓰지 않는다. 두 가지 행위는 같은 시간에 일어나지 않으며, 이런 기능이 동일한 매커니즘에 결합되어 있는것은 의미가 없기 때문이다. 이를 객체 생성관점에 빗대어 생각해보면 복잡한 객체를 생성하는 일과 생성된 객체가 하는 일은 관련성이 적다고 생각할 수 있다. 프로그래밍 언어의 기본적인 내용을 학습할 때 main과 같은 함수에서 곧바로 객체를 생성한다. 이런식으로 client가 객체를 생성해서 사용하면 되는데 왜 굳이 Factory를 통해 캡슐.. 2022. 9. 12.
DDD - 도메인 객체의 lifecycle과 Aggregate - 출처: 도메인 주도 설계 - 에릭 에반스 - 도메인 객체의 생명주기 일반적으로 객체를 사용하는 과정을 생각해보자. 생성자로 객체를 생성한 뒤 연산에서 사용하며 직접 해제하거나 참조관계를 끊으면 GC와 같은 수집기로 보내져서 소멸하는 과정을 거치게 된다. 도메인 객체는 이런 기본적인 생명주기 말고도 특별히 더 고려해야하는 점들이 있다. 우선 생명주기 동안 무결성을 유지해야 하며 생명주기를 관리해주어서 모델이 난해해지는것을 방지한다. 이 말을 지금 당장은 자세하게 이해하지 못해도 상관없다. 뒤이어 설명할 aggregate 항목을 보면 완전히 이해할 수 있을것이다. DDD에서는 이를 해결하기 위해 Aggregate(집합체), Factory, Repository 3 가지 패턴을 제시한다. Aggregate:.. 2022. 9. 10.
DDD - Module (package) - 출처: 도메인 주도 설계 - 에릭 에반스 - Module (package) 인간이 한번에 받아들일 수 있는 인지력은 한계가 있기 마련이다. 만약 legacy 시스템을 운영해야 하는 업무를 수행한다고 가정해보자. legacy가 방대하다면 해당 시스템을 한번에 이해하기란 쉽지 않을것이다. 그럼 어떻게 해당 시스템을 분석할것인가? 가장 기본적인 접근법은 특정 단위로 나누어서 분석하고 그들간의 관계를 파악하는것이다. module은 왜 필요한가? 위에서 언급한대로 인간의 인지적인 과부하를 줄이기 위한 단위가 필요한데 이것이 바로 module 또는 package 라고할 수 있다. module을 분석하는 관점에는 2가지가 있다. 하나는 module과 module간의 관계를 파악하는 관점이고, 다른 하나는 해당 m.. 2022. 8. 7.
DDD - Service - 출처: 도메인 주도 설계 - 에릭 에반스 - 들어가기전에 DDD의 Service를 언급하기전에 한 가지 확실히 해두고 싶은 점이 있다. 이 글에서 언급하고자 하는 DDD의 service는 project에서 많이들 구성하는 controller, service, repository 계층 에서 말하는 응용 계층의 service와 다르다. - Service service는 개념적으로 어떤 객체에도 종속되지 않는다. 어떤 객체에 종속시키기 애매한 무엇인가가 있다면 억지로 해당 객체로 밀어넣으려고 하기 보다는 service로 추출하여 모델링에 포함시키는 방법도 존재한다. 보통 service는 entity나 VO에 포함되지 않는 도메인의 연산이 활동이나 행동으로 나타나는 경우가 많다. 이런 도메인 연산은 여러 도.. 2022. 8. 7.
음원 인식의 개요 - 출처: 2002. "A Review of Algorithms for Audio Fingerprinting" 저자: P.cano, E.Batle, T. kaler, J.Haitsma 를 기반으로 작성하였습니다. - 출처: "An Industrial-Strength Audio Search Algorithm" 저자: Avery Li-Chun Wang - 출처: "A Highly Robust Audio Fingerprinting System" 저자: philips research - 들어가기 전에 필자는 신호처리나 음원 인식에 대한 경력이 전무하다. 음원 신호를 디지털 신호로 변환하는 과정만 하더라도 1초에 몇번 신호를 측정할것이냐라는 sampling rate에 대한 개념, sampling rate 수치를 .. 2022. 8. 6.
DDD - Value Object - 출처: 도메인 주도 설계 - 에릭 에반스 - Value-Object (VO) VO는 개념적인 식별성이 없고 사물의 어떤 특징을 묘사하는 객체이다. 예를 들어 어떤 아이가 펜으로 그림을 그리려고 하고 있다고 가정해보자. 만약 똑같은 색과 굵기와 모양의 펜이 2개가 있다면 아이는 어떤 펜을 사용해도 도 크게 개의치 않을것이다. VO는 설계요소가 어느것인지가 아닌 무엇인지에 관심이 있다고 할 수 있다. - "주소"는 VO인가? VO와 Entity에 관련된 글이나 자료를 보다 보면 자주 떠오르는 유형의 의문점이 있다. VO와 Entity의 차이 혹은 "주소"는 VO일까? 와 같은 유형의 질문이다. 이 질문에 해답역시 앞의 Entity 장에서 살펴본것과 같이 도메인에서 해결하고자 하는 문제에 따라 다르다. 전.. 2022. 7. 19.