2023 우아한 스터디 — 데이터 중심 애플리케이션 설계 첫번째 스터디

Ryan Kim
4 min readNov 19, 2023

CH 01 ~ 02 내용 정리하기.

CH 01. 데이터 시스템의 기초

- 오늘날의 많은 애플리케이션은 계산 중심적 (Compute-Intensive)이 아닌 데이터 중심적 (Data-Intensive)이며, CPU 성능이 애플리케이션을 제한하는 것이 아닌 데이터 양, 데이터 복잡도, 데이터 변화 속도가 더 큰 이슈로 대두됨.

- 데이터 중심 애플리케이션에서 공통으로 필요로 하는 기능을 제공하는 표준 구성 요소 (Standard Building Block)의 예시.

- 구동 애플리케이션이나 다른 애플리케이션에서 나중에 다시 데이터를 찾을 수 있게 데이터를 저장 (데이터 베이스, Database)

- 읽기 속도 향상을 위해 값비싼 수행 결과를 기억 (캐시, Cache)

- 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공 (검색 색인, Search Index)

- 비동기 처리를 위해 다른 프로세스로 메세지 보내기 (데이터 스트림, Stream Processing)

- 주기적으로 대량의 누적된 데이터를 분석 (일괄 처리, Batch Processing)

- 이러한 애플리케이션을 설계할 때는 데이터 시스템이라는 포괄적인 용어로 다양한 도구를 묶어서 생각함. (데이터 베이스, 큐, 캐시 등)

- 데이터 시스템을 설계할 때는 신뢰성, 확장성, 유지보수성이라는 세 가지 요소를 고려해야함.

- “신뢰성”은 시스템이 잘못되더라도 올바르게 동작하는 능력을 의미하며, 하드웨어 결함, 소프트웨어 오류, 인적 실수 등을 대처할 수 있는 내결함성을 갖추는 것이 중요.

- “확장성”은 부하가 증가할 때 시스템이 어떻게 대응하는지를 설명하는 능력을 의미하며, 부하 매개변수와 성능 목표를 명확히 정의하고, 자원을 적절히 조정하는 것이 중요.

- “유지보수성”은 시스템을 쉽게 변경하고 수정하고 개선할 수 있는 능력을 의미하며, 잘 정의된 API, 명확한 문서, 철저한 테스트, 모니터링 등을 통해 오류 가능성을 줄이고 복잡성을 관리하는 것이 중요.

CH 02. 데이터 모델과 질의 언어

1. 관계형 모델과 문서 모델 (Relational Database)

- 관계형 모델은 테이블과 조인을 사용하여 데이터를 구조화하고, 문서 모델은 JSON이나 XML과 같은 중첩된 데이터 구조를 사용.

- 문서 모델은 스키마 유연성과 지역성을 제공하지만, 다대일이나 다대다 관계를 표현하기 어려움.

- 문서 모델에서는 JSON과 XML 과 같은 형식으로 더 나은 지역성을 갖게 됨.

- 관계형 모델은 조인을 통해 복잡한 질의를 수행할 수 있지만, 임피던스 불일치 문제를 해결해야함.

- 임피던스 불일치 (Impedence Conflict) : 기존 관계형 데이터베이스의 SQL과 프로그래밍 언어 사이에 데이터 구조, 기능 등의 차이로 발생하는 충돌

- 네트워크 모델은 데이터베이스 모델 중 하나로, 데이터를 네트워크 구조로 표현하는 방식을 의미함.

- 네트워크 모델은 계층 구조가 아닌 그래프 형태로 데이터를 구성하는 특징이 있고, 레코드 간의 복잡한 상호 연결성을 나타낼 수 있으며, 다양한 유형의 관계를 표현하기에 유용함.

2. 그래프 모델 (Graph Database)

- 그래프형 데이터 모델은 노드와 간선으로 구성된 데이터 구조로, 데이터 간의 관계를 명확하게 표현 가능.

- 그래프형 데이터 모델은 그래프 질의 언어를 사용하여 간선을 순회하며 데이터를 조회

- 그래프형 데이터 모델은 발전성이 좋고, 복잡한 관계를 쉽게 표현할 수 있지만, 스키마가 없거나, 데이터가 분산되어 있을 경우에는 성능이 저하될 수 있음.

3. 질의 언어 (Query Language)

- 선언형 질의 언어는 SQL과 같이 원하는 결과의 패턴을 지정하고, 어떻게 그 결과를 얻을지는 데이터베이스에 맡기는 방식.

- 명령형 질의 언어는 코다실과 같이 데이터를 처리하는 과정을 명시적으로 작성하는 방식.

- 선언형 질의 언어는 질의를 쉽게 작성하고, 최적화하기 쉽지만, 특정한 연산이나 데이터 구조를 지원하지 않을 수 있음.

- 명령형 질의 언어는 더 많은 제어력을 가지지만, 코드가 복잡하고, 성능이 떨어질 수 있음.

- 예시 : CSS Class와 html tag로 적용할 수 있는 값을 자바스크립트 코드로 작성하면 코드가 길어지고, 어려운 내용은 아니지만 직관적이지 못할 수 있음.

- 맵리듀스는 대용량 데이터를 병렬로 처리하기 위해 구글에서 개발된 방식으로, 맵 함수와 리듀스 함수를 사용하여 데이터를 변환하고, 집계함.

- 맵리듀스는 스케일 아웃이 가능하고, 내결함성을 제공하지만, 복잡한 질의를 표현하기 어렵고, 중간 결과를 디스크에 저장해야 하는 단점이 존재.

--

--