분류 전체보기 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

[책] 데이터 지향 프로그래밍 - 2장 코드와 데이터 분리

DOP 원리 1코드를 함수 안에 두는 방식으로 데이터에서 코드를 분리한다. 함수의 동작은 어떤 식으로든 함수 컨텍스트에 캡슐화된 데이터에 따라 달라져서는 안 된다.  시스템을 바라보는 방식 - 코드, 데이터  데이터 지향 프로그래밍(DOP)에서 시스템은 코드와 데이터 2가지로 나뉜다. OOP에서는 캡슐화를 통해 클래스 내부에 데이터는 필드로, 코드는 함수로 함께 존재하지만 DOP에서는 캡슐화에 반대한다. 그 이유는 데이터와 코드가 혼합되어 있다는 점이 시스템의 복잡성과 경직성을 유발하기 때문이라 말한다.  1. 데이터 개체 데이터 개체는 시스템의 정보를 보관하는 부분이다. 도서관 시스템에서 필요한 데이터를 마인드맵으로 정리하면 이 정도로 나타낼 수 있다.  2. 코드 모듈  코드 모듈은 시스템의 기능이다..

도서/기술 2024.11.24

[책] 데이터 지향 프로그래밍 - 1장 객체지향 프로그래밍의 복잡성

책의 구성   처음 책을 구매했을 때 제목만 보고 딱딱한 내용을 생각했지만 재밌는 구성을 가지고 있었다. 사업가인 클라핌과 개발자인 테오가 등장하고 크라핌이 테오에게 통합 도서관 관리 시스템 개발을 요청한다. 테오는 요구사항을 만족하는 시스템을 구축하고 그 과정에서 OOP의 단점을 마주하며 해결해나가는 구성을 가진다. 대화 형식으로 진행되다 보니 딱딱하지 않고 내용에 더 집중이 잘 되는 것 같아 구성이 참 마음에 들었다.  OOP 설계와 UML  테오는 개발에 들어가기에 앞서 시스템의 UML 도식을 구성한다. UML 도식에는 포함, 연관, 상속, 사용 4가지 관계가 존재한다. 예시를 몇가지 적어보자면 Library는 Member를 포함한다. 만약 Library가 사라지면 Member도 모두 사라지게 될..

도서/기술 2024.11.23

[책] 세상 끝의 카페

목차 1. 책 선물을 받다2. 개요3. 파도 위의 녹색 바다거북 이야기4. 원하지도 않는 일을 하는 이유5. 죽음이 두렵습니까?6. 당신은 충만한 삶을 살고 있습니까?7. 내가 없어도 존재할 아름다운 것들8. 내 생각   ChatGPT 요약 이 글은 책 "세상 끝의 카페"의 독후감입니다. 주인공 존이 여행 중 우연히 방문한 카페에서 3가지 질문을 통해 삶의 의미를 찾아가는 이야기를 담고 있습니다. 책은 주인공이 카페 직원과 손님들의 이야기를 통해 '당신은 왜 여기 있습니까?', '죽음이 두렵습니까?', '충만한 삶을 살고 있습니까?'라는 질문에 대한 답을 찾아가며 자신의 삶을 돌아보는 과정을 그립니다. 독자는 이 질문을 통해 자신의 삶을 성찰하고 현재 원하는 것을 명확히 하며 충만한 삶을 살아가는 방법을..

도서/문학 2024.10.01