티스토리 뷰

1장. 신뢰할 수 있고, 확장 가능하며 유지 관리가 쉬운 애플리케이션 설계

1. 애플리케이션의 역할 변화
예전에는 애플리케이션이 단순히 데이터를 입력받아 저장하고 조회하는 역할이었지만,
지금은 수많은 사용자, 데이터, 외부 서비스와 통신하는 복잡한 시스템이 됨.
이런 변화 속에서, 애플리케이션의 핵심 품질 속성 세 가지를 기준으로 설계해야 함.

2. 신뢰성 (Reliability)
장애가 발생해도 시스템이 올바르게 동작하는 것.
장애의 예:
하드웨어 오류 (디스크 불량, 서버 다운 등)
소프트웨어 오류 (버그, 예외 처리 실패)
사람의 실수 (잘못된 설정, 운영 실수 등)
이를 대비하는 방법:
복제(replication): 데이터를 여러 곳에 복사해 장애 시에도 접근 가능
리트라이와 타임아웃: 일시적 오류에 대비
모니터링과 알림: 문제가 생겼을 때 빠르게 대응 가능

3. 확장성 (Scalability)
시스템이 데이터양, 사용자 수, 요청 수 증가에 효율적으로 대응할 수 있어야 함.
확장성의 질문은 “더 큰 부하가 들어올 때 시스템은 어떻게 반응하는가?”
수직 확장: 더 강력한 하드웨어로 교체
수평 확장: 서버를 여러 대 추가해 분산 처리
지표에 따라 다르게 접근해야 함:
초당 요청 수 증가
데이터 쓰기/읽기량 증가
저장해야 하는 데이터 용량 증가 등

4. 유지보수성 (Maintainability)
시스템이 시간이 지나고 팀원이 바뀌더라도 쉽게 이해하고 변경할 수 있어야 함.

주요 요소:
모듈화: 시스템을 작게 나눠서 독립적으로 개발/배포 가능
관찰 가능성 (observability): 로그, 메트릭, 트레이싱 등으로 현재 상태 파악 가능
자동화된 테스트: 변경이 기존 기능을 망가뜨리지 않는지 검증

2장. 데이터 모델과 질의 언어

1. 데이터 모델이 중요한 이유
데이터 모델은 단순히 데이터를 저장하는 형식이 아니라, 애플리케이션이 데이터를 어떻게 다루는지를 결정함.
적절한 데이터 모델을 선택하면 개발과 운영이 쉬워지고, 그렇지 않으면 구조 변경이 고통스러움.

2. 관계형 데이터베이스 (RDBMS)
테이블, 행(Row), 열(Column) 기반 모델.
SQL이라는 강력한 선언형 질의 언어를 사용.

장점:
정형화된 구조, 명확한 스키마
JOIN을 통한 관계 표현
ACID 트랜잭션으로 데이터 정합성 보장

단점:
스키마가 엄격해 구조 변경이 어렵고 유연성이 떨어짐
중첩된 구조(예: 주소 안에 좌표 정보가 있음 등)를 표현하기 어려움

3. 문서 지향 데이터베이스 (Document DB)
JSON 같은 문서 형태로 데이터를 저장 (MongoDB, CouchDB 등)
계층적 구조를 자연스럽게 표현할 수 있음

장점:
유연한 스키마: 서로 다른 필드를 가진 문서 저장 가능
객체지향 프로그래밍과 잘 어울림
중첩된 데이터를 단일 쿼리로 가져오기 쉬움

단점:
중복 데이터 발생 가능성 (주소, 사용자 정보 등)
JOIN이 어려워 관계형 데이터엔 부적합할 수 있음

4. 그래프 데이터베이스
노드(객체)와 엣지(관계)로 데이터를 표현 (Neo4j, Amazon Neptune 등)
친구의 친구, 추천 알고리즘, 트리 탐색 등 관계 중심 쿼리에 강함
쿼리 언어: Cypher 같은 그래프 쿼리 언어 사용

5. 질의 언어
선언형 언어(SQL): "무엇을 원하는가"를 표현, 내부 실행 방식은 DB가 결정
명령형 API: 프로그래머가 쿼리 절차를 명시적으로 작성 (NoSQL에서 많이 사용)

6. 데이터 모델 선택 기준
트레이드오프 존재:
관계형: 정합성과 일관성 중시, 유연성 부족
문서형: 유연성 좋고 읽기 빠름, 중복과 정합성 관리 필요
그래프형: 관계 중심 문제에 특화
데이터 모델이 애플리케이션 구조와 직접 연결되므로, 요구사항과 데이터 액세스 패턴에 따라 신중히 선택해야 함

'스터디' 카테고리의 다른 글

데이터 중심 애플리케이션 설계 8장  (0) 2025.05.27
데이터 중심 애플리케이션 설계 5장  (0) 2025.05.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함