본문 바로가기

App 설계6

DDIA - 그래프형 데이터 모델 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 다대다 관계가 데이터 모델을 구별하는 중요한 기능임을 살펴봤다. 앞서 애플리케이션이 1:N 관계이거나 관계가 없다면 문서 모델이 적합하다고 하였다. 반면 관계형 모델은 M:N 을 다루기 수월하지만 데이터간 연결이 복잡해지면 그래프형 데이터 모델을 사용하는편이 자연스럽다. 그래프의 구성요소에는 정점(노드, 엔티티)과 간선(엣지, 관계, 호)이 있다. 예를 들어 소셜그래프에서 정점은 사람이며 간선은 사람간의 관계라고 할 수 있다. 웹 그래프에서는 정점은 웹이며 간선은 다른 페이지의 HTML 링크라고 할 수 있다. 위의 예제에서는 정점이 모두 같은 유형(type)을 예로 들었지만 그래프는 같은 유형의 데이터만 정점으.. 2021. 11. 21.
DDIA - 데이터를 위한 질의(query) 언어 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 데이터를 위한 질의 언어 관계형 모델이 등장했을 때 데이터를 질의하는 새로운 방법이 등장하였다. SQL 은 선언형 질의언어인 반면 IMS와 코다실은 명령형 코드를 사용해 DB 에 질의한다. 동물의 종 목록중에서 상어만 반환하는 코드를 작성한다고 가정해보자. 이를 명령형 코드로 작성하면 아래와 같이 작성할 수 있다. public List getSharks(List animals) { List sharks = new ArrayList(); for(Animal animal : animals) { if("Sharks".equals(animal.getFamily())) { sharks.add(animal); } } retur.. 2021. 10. 31.
DDIA - 관계형 모델과 문서 모델 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 데이터 모델은 S/W 가 어떻게 작성되었는지와 문제를 어떻게 생각해야하는지에 대해서도 영향을 미친다. 대부분의 애플리케이션에서는 각 계층마다 데이터 모델에 대한 관점이 다르다. App. 개발자는 현실을 보고 객체, 데이터 구조, API를 모델링 한다. 데이터 구조를 저장할 때는 JSON, XML, RDB 테이블, 그래프와 같은 모델로 표현한다. DB S/W 엔지니어는 데이터를 메모리나 디스크에 표현하는 방법을 결정한다. 그리고 이 표현은 질의, 탐색, 조작, 처리할 수 있게 한다. 각 계층에서 명확한 데이터 모델을 제공하면 하위 계층에 대한 복잡성을 숨길 수 있다. - 관계형 모델 관계형 모델이라는 단어가 어색.. 2021. 10. 30.
DDIA - 신뢰성,확장성,유지보수성 - 유지보수성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 S/W 는 대부분 개발보다 유지보수를 할 때 많은 비용이 들어간다. 이런 유지보수에는 일반적으로 다음과 같은 항목들이 있다. 버그 수정 시스템 운영 유지보수 신규플랫폼 적용 기술채무 상환 신규 기능 추가 유지보수의 고충을 최소화하기 위해서는 지켜야하는 설계 원칙이 있다. 운용성: 운영팀이 시스템을 운영하기 쉽게 해야 한다. 단순성: 복잡도를 최대한 제거하여 새로운 엔지니어가 최대한 이해하기 쉬워야 한다. 발전성: 이후에 시스템을 쉽게 변경할 수 있어야 한다. 신뢰성과 확장성을 달성하는것은 그리 간단하지 않다. 그래서 위의 3 가지 항목을 염두해두면서 기본적으로 유지보수성을 달성하기위해 노력해야 한다. - 운영성.. 2021. 10. 25.
DDIA - 신뢰성,확장성,유지보수성 - 확장성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 어떤 시스템이 현재 안정적이라고 해서 미래에도 안정적이라는 보장은 없다. 이런 경우 보통 성능이 달라져서 문제가 되는데 성능이 달라지는 주요 Issue 는 부하가 증가되는것이다. 확장성이라는 것은 증가되는 부하에 대처하는 시스템의 능력이라고 할 수 있다. 프로젝트를 진행하다보면 설계자나 PM 들은 흔히 'A 시스템(모듈)은 확장 가능하다.', 'B 시스템(모듈)은 확장성이 없다.' 와 같은 말을 많이 한다. 하지만 이런 말들은 확장성을 논하는데에 아무런 도움이 되지 않는다. 확장성을 논할때에는 '시스템이 특정 방향으로 커지면 이에 대처하기 위한 선택은 무엇인가?' 와 같은 사고방식으로 접근해야 한다. - 부하기.. 2021. 10. 19.
DDIA - 신뢰성,확장성,유지보수성 - 신뢰성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 과거에는 CPU, RAM 같은 하드웨어 성능이 애플리케이션을 제한했지만, 애플리케이션들이 계산 중심이 아닌 데이터 중심으로 변화하면서 데이터의 양, 복잡도, 변화속도로 관점이 변경되고 있다. 일반적으로 데이터 중심 애플리케이션이 공통으로 필요로 하는 표준 구성요소는 아래와 같다. DB: 구동 App. 및 다른 App. 에서 데이터를 다시 찾을 수 있게 데이터를 저장 Cache: Read 성능 향상을 위한 값 비싼 수행 결과를 기억 Index: 키워드로 데이터를 검색하거나 필터링 제공 Stream 처리: 비동기 처리를 위한 다른 프로세스로 메시지 전송 Batch: 일정 주기로 대량의 누적된 데이터 분석 위의 요소.. 2021. 10. 17.