| 관계형(R-DBMS) | 비관계형(NoSQL) |
|---|---|
| MySQL, 오라클, postgreSQL | CouchDb, Cassandra, Amazon Dynamo DB |
| 자료를 테이블, 열, 칼럼으로 표현 | 조인 연산 지원 X |
serialize)/역직렬화(deserialize) 할 수 있기만 하면 됨| 스케일업(수직적 규모 확장) | 스케일 아웃(수평적 규모 확장) |
|---|---|
| 서버에 고사양 자원을 추가 | 더 많은 서버를 추가하여 성능 개선 |
| 서버로 유입되는 트래픽의 양이 적은 경우 | 대규모 앱에 적합 |
failover) 방안이나 다중화(redundancy) 방안 제시 Xload balancing set)에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할
master)-부(slave) 관계를 설정하고 데이터 원본은 주 서버, 사본은 부 서버에 저장하는 방식(Master-Slave 패턴)| 이점 | 설명 |
|---|---|
| 더 나은 성능 | 병렬로 처리될 수 있는 query 수 증가 > 성능이 좋아짐 |
안정성(reliability) | 서버 중 일부에 문제가 생겨도 데이터 보존됨 |
가용성(availability) | 서버 중 이룹에 문제가 생겨도, 다른 서버에 있는 데이터를 가져와서 계속 서비스 할 수 있음 |
| 전략 | 동작 방식 | 장점 | 단점 | 사용 예시 |
|---|---|---|---|---|
| Cache-Aside (Lazy Loading) | 앱이 먼저 캐시 확인 → 없으면 DB 조회 후 캐시에 저장 | 구현 간단, 캐시 효율적 사용 | 첫 요청은 항상 DB 조회(캐시 미스) 쓰기 직후 캐시 불일치 발생 | 일반적인 웹 서비스 (뉴스, 게시판, 상품 조회) |
| Read-Through | 캐시가 DB와 직접 연동해 미스 시 자동 적재 | 앱이 단순해짐, 일관성 ↑ | 캐시 구현 복잡 캐시가 DB 클라이언트 역할까지 담당해야 함 캐시에 부하 집중 | CDN, 전용 캐시 계층 |
| Write-Through | 쓰기 시 캐시에 먼저 기록 → 캐시가 DB에 반영 | 항상 최신 데이터 읽기 일관성 보장 | 쓰기 지연, 불필요한 캐시 적재 가능 | 사용자 세션, 장바구니 |
| Write-Back (Write-Behind) | 쓰기 시 캐시에만 기록 → 일정 주기/조건에 따라 DB에 비동기 반영 | 쓰기 성능 극대화, DB 부하 감소 | 캐시 장애 시 데이터 유실 위험 → 내구성 확보(예: AOF, RDB 스냅샷) 필요 구현 복잡 | 로그 수집, 이벤트 처리 |
| Write-Around | 쓰기 시 DB에만 기록, 읽을 때 캐시 적재 | 캐시에 자주 쓰이지 않는 데이터 최소화 | 방금 쓴 데이터는 캐시에 없음(읽기 미스) | 잘 안 읽히는 데이터 많은 경우 |
| TTL 기반 캐싱 | 캐시 항목마다 만료 시간 지정 | 데이터 신선도 보장, 자동 갱신 | TTL 지나기 전까지는 구버전 가능, 적절한 TTL 설정 난이도 | 날씨, 주식 시세, API 응답 캐싱 |
캐시하기 적합한 데이터
캐싱이 부적합한 데이터
일관성 모델
불일치 가능성
Underprovision (메모리 부족)
Overprovision (메모리 과다 할당)
용량 산정
(평균 객체 크기 × 예상 동시 보존 수) + 여유분CDN)
(1) 사용자 요청
cdn.example.com/image.png 요청(2) 에지 서버 확인
(3) 이후 요청