전체 글 18

[책] 데이터 지향 프로그래밍 - 6장 단위 테스트

조회 함수의 단위 테스트 DOP에서 조회를 수행하는 메서드는 어떻게 테스트를 해야할까? Library.searchBooksByTitleJSON 메서드를 예시로 알아보자. 우선 테스트하려는 메서드에 의해 호출되는 함수들로 트리를 만든다. 꼭 트리를 만들지 않아도 머리 속으로 그려지면 된다. 트리의 가장 하단에 존재하는 메서드의 테스트가 가장 간단하다. 그 이유는 테스트할 부분이 메서드 메서드 자신밖에 없기 때문이다.  Catalog.authorNames = function (catalogData, authorIds) { return _.map(authorIds, function (authorId) { return _.get(catalogData, ["authorsById", authorI..

도서/기술 2024.12.14

[책] 데이터 지향 프로그래밍 - 5장 기본 동시성 제어

낙관적 동시성 제어 DOP에서는 낙관적 동시성 제어 전략을 사용한다. 책에서 낙관적 동시성 제어은 허락을 받기보다 변경 후에 용서를 구하는 방식이라 표현하는데 구체적인 로직을 보면 이해가 쉽다. DOP의 변경 로직에 맞게 생각해보자. DOP의 변경 로직에는 연산 단계와 반영 단계가 존재한다. 낙관적 동시성 제어 전략은 차기 버전을 만드는 연산 단계에서는 이 변경이 유일한 작업인 것처럼 변경을 수행하고, 이후 반영 단계에서 변경이 상충되지 않으면 조정을, 상충된다면 중지를 시킨다. 정리하자면 아래와 같다. 연산: 동시성에 대한 고민 없이 차기 버전 생성반영: 동시에 일어난 변경과 상충하지 않으면 조정 / 상충하면 중지   이 전략은 기본적으로 동시에 변경이 일어나고 2개 이상의 변경 작업이 상충하는 경우가..

도서/기술 2024.12.08

[책] 데이터 지향 프로그래밍 - 4장 상태 관리

DOP 원리 3데이터는 불변이다다중 버전 시스템 데이터와 구조적 공유 DOP에서 데이터는 불변이다. 때문에 데이터의 변경이 생기면 새로운 버전이 생성된다. 이런 방식으로 데이터를 관리하면 모든 데이터 변경 작업은 아래의 과정을 거치게 된다. 연산 단계에서는 조회와 같은 방식으로 범용 함수를 활용해 변경이 반영된 형태의 차기 버전을 만든다. 이후 반영 단계에서는 산출된 차기 버전을 참조하도록 시스템에 반영한다.연산 단계: 시스템 데이터의 차기 버전을 산출한다.반영 단계: 연산된 시스템 데이터의 차기 버전을 참조하도록 이동시킨다.   DOP에서 선택한 방식이 가지는 몇 가지 장점을 나열하자면 아래와 같다. 이 방식은 Git이 commit 이력을 관리하여 버전 이력을 추적하는 방식과 굉장히 유사하다.연산 / ..

도서/기술 2024.12.01

[책] 데이터 지향 프로그래밍 - 3장 기본 데이터 조작

DOP 원리 2데이터 개체를 범용 자료구조로 표현하라범용 자료 구조로 데이터 표현하기 DOP에서 데이터를 표현하는 방식에 대한 주장이 있다. 우선 데이터 개채들은 레코드로 표현되며 레코드 간의 관계는 순차 컬렉션과 색인으로 표현된다. 이때 중요한 건 레코드는 범용 자료구조로 표현되어야 한다는 점이다. 색인과 컬렉션이 어떤 방식으로 구현되어야 주장은 없다. (책에서는 컬렉션은 배열, 색인은 동종 맵을 활용해 구현한다.) 단, 레코드의 경우 동종 맵으로 표현되어야 한다고 말한다.  대개 레코드를 표현하는 방식은 클래스의 인스턴스이고 각 필드는 클래스의 멤버 변수가 된다. 하지만 DOP에서 모든 레코드는 맵으로 표현되고 각 필드는 key - value 형태로 표현된다. 이 방식의 장점은 클래스를 만들 필요가 ..

도서/기술 2024.11.30