Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240926 데이터 복제(Replication)&샤딩(Sharding) 본문

개발Article

[TIL]20240926 데이터 복제(Replication)&샤딩(Sharding)

최밤빵 2024. 9. 26. 21:22

분산시스템에 대해서 관심이 많아지고, 데이터베이스의 확장성이나 성능에 대해 공부하면서 데이터 복제(Replication)와 샤딩(Sharding)이라는 용어를 알게 되었는데, 두 개념이 무엇인지, 왜 중요한지 알아보기 위해 학습을 시작했다. 데이터베이스에서의 성능 최적화와 안정성은 서비스 규모가 커질수록 중요한 요소가 되고, 이를 위한 방법인 데이터 복제와 샤딩에 대해 이해가 필요하다고 생각했다.

 

▶ 데이터 복제(Replication)란?

데이터 복제는 하나의 데이터베이스를 여러 개의 복제본(Replica)으로 복사하여 유지하는 기술이다. 여러 개의 복제본을 통해 데이터를 분산시켜 여러 서버에서 읽기 요청을 처리할 수 있고, 이를 통해 시스템의 가용성읽기 성능을 향상시킬 수 있다.

 

▷동작 방식:

→ 마스터-슬레이브 복제(Master-Slave Replication):

데이터베이스는 하나의 마스터 노드에서만 쓰기 작업이 가능하고, 다른 슬레이브 노드들은 마스터에서 데이터를 복제하여 읽기 전용 작업을 수행한다. 읽기 부하가 큰 서비스에서 효과적이다.

→ 마스터-마스터 복제(Master-Master Replication):

여러 마스터 노드가 존재하고, 각 마스터 노드는 서로 데이터를 동기화하여 읽기와 쓰기 작업을 모두 처리할 수 있다. 이 방식은 데이터 동기화가 복잡해질 수 있지만, 수평 확장에 유리하다.

 

▷데이터 복제를 사용해야 하는 이유:

→ 높은 가용성(High Availability):

한 서버가 다운되더라도 다른 복제본이 있기 때문에 서비스 중단을 방지할 수 있다.

→ 읽기 성능 향상:

읽기 요청이 많은 경우, 여러 복제본에서 분산 처리하여 성능을 크게 향상시킬 수 있다.

→ 백업 용이성:

데이터를 여러 곳에 복제해두기 때문에 백업의 개념으로 사용할 수 있다.

 

▷예시 상황:

대규모 쇼핑몰 서비스를 운영한다고 가정하고, 수많은 사용자가 상품 검색과 조회를 진행한다고 했을 때 데이터베이스에 많은 읽기 요청이 몰리게 된다. 이 경우 마스터-슬레이브 복제를 통해 마스터 노드는 쓰기 작업에 집중하고, 여러 슬레이브 노드에서 읽기 요청을 처리하게 하면 성능이 크게 향상될 수 있다.

 

▶샤딩(Sharding)이란?

샤딩은 데이터베이스를 여러 개의 샤드(Shard)로 분할하여 저장하는 방법이다. 하나의 대규모 데이터베이스를 여러 개의 작은 데이터베이스로 나누어 저장하는 방식으로, 이를 통해 데이터가 너무 커져서 하나의 데이터베이스에서 처리할 수 없는 상황을 방지하고, 데이터베이스의 성능과 확장성을 높일 수 있다.

 

▷동작 방식:

→ 수평 샤딩(Horizontal Sharding):

동일한 스키마의 데이터를 여러 샤드에 나누어 저장하는 방식으로, 사용자 테이블의 데이터를 사용자 ID 범위에 따라 여러 샤드로 분배할 수 있다.

→ 수직 샤딩(Vertical Sharding):

테이블 자체를 분리하여 다른 샤드에 저장하는 방식으로, 사용자 정보는 하나의 샤드에, 주문 정보는 또 다른 샤드에 저장하는 방식이다.

 

▷샤딩을 사용해야 하는 이유:

→ 데이터 확장성(Scalability):

데이터를 여러 샤드에 나누어 저장하면, 각 샤드가 독립적으로 동작할 수 있기 때문에 데이터베이스의 용량 제한 없이 확장할 수 있다.

→ 성능 향상:

데이터가 분산 저장되기 때문에 각각의 샤드가 처리해야 하는 데이터 양이 줄어들어 성능이 향상된다.

→ 장애 격리(Fault Isolation):

하나의 샤드에 문제가 발생해도 다른 샤드에 영향을 미치지 않기 때문에, 장애 격리 측면에서 유리하다.

 

▷예시 상황:

만약 사용자 수가 수백만 명에 달하는 SNS 플랫폼을 운영한다고 가정했을 때, 모든 사용자의 데이터를 하나의 데이터베이스에 저장하면 성능 저하가 발생할 수 있다. 이 경우 사용자 ID 범위에 따라 데이터를 여러 샤드로 분리해 저장하면 각 샤드가 나누어 데이터를 처리하므로 성능이 개선될 수 있다.

 

데이터 복제(Replication)와 샤딩(Sharding)은 데이터베이스 확장성과 성능을 향상시키는 데 중요한 역할을 하지만, 각각 몇 가지 단점이 있다.

 

▶ 데이터 복제(Replication)의 단점

→ 쓰기 성능 저하:

데이터 복제에서는 쓰기 작업이 모든 복제본에 적용되어야 하기 때문에, 쓰기 작업이 많을 경우 성능이 저하될 수 있다. 특히 마스터-슬레이브 복제에서 쓰기는 오직 마스터 노드에서만 가능하기때문에, 쓰기 부하가 집중되면 병목 현상이 발생할 수 있다.

→ 데이터 일관성 문제:

여러 복제본 간에 데이터가 동기화되지 않을 경우, 일관성 문제(Consistence Issues)가 발생할 수 있다. 하나의 슬레이브 노드에서 읽은 데이터와 다른 슬레이브에서 읽은 데이터가 다를 수 있다. 이러한 데이터 불일치 문제는 특히 쓰기 작업이 빈번하게 일어나는 시스템에서 문제가 될 수 있다.

→ 관리 복잡성 증가:

복제본이 많아질수록 데이터 동기화와 시스템 관리가 더 복잡해진다. 복제본 사이의 데이터 일관성을 유지하는 것은 큰 도전이 될 수 있고, 장애가 발생했을 때 복제본 간의 복구 작업도 까다롭다.

→ 복제 지연(Lag):

마스터와 슬레이브 사이에서 데이터 동기화에 지연이 발생할 수 있다. 실시간으로 데이터를 동기화하지 않는다면, 슬레이브에서 읽은 데이터가 최신이 아닐 가능성이 있어 사용자 경험에 영향을 미칠 수 있다.


▶샤딩(Sharding)의 단점

→ 복잡한 설계 및 관리:

샤딩은 데이터를 여러 샤드로 나누는 작업이기 때문에, 샤딩 기준(예: 사용자 ID, 지역 등)을 어떻게 설정할지 설계가 복잡하다. 또한, 새로운 샤드를 추가하거나 데이터를 재분배해야 할 때 관리가 어렵고 시간이 많이 소요될 수 있다.

→ 데이터 일관성 유지 어려움:

여러 샤드에 데이터가 분산되면, 각 샤드 간의 데이터 일관성을 유지하기 어려울 수 있다. 특히 트랜잭션을 여러 샤드에 걸쳐 수행해야 하는 경우, 트랜잭션 일관성을 보장하기 위한 복잡한 처리가 필요하다.

→ 분산 트랜잭션의 어려움:

분산된 샤드 간의 트랜잭션을 관리하는 것은 어려운 과제이다. 여러 샤드에서 동시에 데이터를 업데이트하거나 읽어야 하는 경우, 분산 트랜잭션을 처리하기 위한 기술적 복잡성이 추가된다.

→ 운영 비용 증가:

샤딩을 도입하면 물리적 서버나 인프라 자원이 늘어나면서, 비용이 증가할 수 있다. 각 샤드에 대한 모니터링, 백업, 장애 복구 등을 관리해야 하므로 인프라 운영 비용과 복잡성이 더해진다.

→ 동적 샤딩 어려움:

처음에 잘못된 샤딩 키나 기준을 설정하면, 데이터를 재분배하는 작업이 매우 어렵고 시스템에 부담을 줄 수 있다. 샤드의 크기 불균형 문제도 발생할 수 있고, 이를 해결하기 위한 동적 샤딩 작업은 성능에 큰 영향을 미칠 수 있다.

 

▶데이터 복제와 샤딩의 차이점

데이터 복제와 샤딩은 모두 대규모 데이터베이스의 성능을 향상시키는 방법이지만, 그 목적과 방식이 다르다.

비교 항목 데이터 복제(Replication) 샤딩(Sharding)
목적 가용성 및 읽기 성능 향상 데이터 용량 분산 및 쓰기 성능 향상
데이터 분산 방식 동일한 데이터를 여러 복제본에 저장 서로 다른 데이터를 여러 샤드에 나누어 저장
장점 고가용성, 백업 용이, 읽기 성능 향상 데이터 확장성, 성능 향상, 장애 격리
단점 쓰기 부하가 높아질 수 있음, 데이터 일관성 문제 발생 가능 데이터 일관성 유지가 어려움, 복잡한 데이터 분배 알고리즘 필요
사용 사례 읽기 요청이 많은 서비스 (e.g., 상품 조회, 뉴스 사이트) 대규모 데이터 저장 및 처리 (e.g., SNS, 대형 전자 상거래)

 

▶ 데이터 복제와 샤딩의 통합 사용

대규모 서비스에서는 데이터 복제와 샤딩을 함께 사용하는 경우도 많다. 예를 들어, 데이터를 여러 샤드로 나누어 분산 저장하고, 각 샤드 내에서 복제를 적용해 읽기 성능을 높이는 통합 방식은 데이터베이스의 확장성과 성능을 극대화하는 데 도움이 된다.

 

결론

데이터 복제는 동일한 데이터를 여러 복제본에 저장하여 읽기 성능과 가용성을 향상시키는 방법이지만 쓰기 성능 저하와 데이터 일관성 문제가 발생할 수 있고, 샤딩은 데이터를 여러 샤드로 분리해 저장하여 성능을 높이고 확장성을 확보하는 방법이지만 설계와 관리가 복잡해서 분산 트랜잭션 관리가 어렵다. 두 기술은 각각의 장단점이 있으며, 서비스의 특성에 따라 적절히 선택하거나 통합하여 사용할 수 있다.