[TIL] DB 파티셔닝이란?

dani·2025년 9월 14일

📌데이터베이스 파티셔닝(partitioning)이란?

◾파티셔닝이란

데이터베이스 파티셔닝(partitioning)은 하나의 큰 테이블이나 인덱스를 물리적으로 여러 조각(파티션)으로 나누어 저장, 관리하는 방법을 말한다.

즉, 논리적으로는 한 테이블이지만, 실제 저장소에서는 여러 개의 작은 단위로 쪼개 두는 것이다.

데이터베이스에서 대용량 데이터를 효율적으로 저장, 관리하기 위해 사용하는 기법 중 하나이다.

  • DB기법 중 저장 구조/데이터 관리 기법에 속한다.
  • 트랜잭션, 쿼리 최적화 같은 논리적 처리 기법이 아닌, 물리적 데이터 배치 전략에 가깝다.



◾파티셔닝을 왜 사용하는가?

1. 성능 향상

날짜와 같은 특정 범위만 조회할 때는 전체 테이블이 아닌 해당 파티션만 스캔하므로 쿼리 속도가 향상된다.

아무래도 한 테이블에서 찾는 것보다 어떤 단위로 쪼개 두면 그만큼 한 테이블의 데이터 개수가 적어지므로 속도가 향상될 것이다.

2. 관리 편의성

오래된 데이터 파티션만 쉽게 삭제, 백업, 이동이 가능하다.

3. 확장성

테이블이 수십억 건 이상 커지더라도 각 파티션을 분산 저장, 관리가 가능하다.


📌파티셔닝 동작과 주의할 점

◾파티셔닝 동작 방식

내부 동작

  1. 개발자는 평소처럼 ELECT * FROM orders WHERE order_date BETWEEN … 와 같이 쿼리를 작성한다.
  2. DB 엔진이 자동으로 해당 파티션만 스캔한다. (파티션 프루닝)
  3. 결과 값을 얻는다.

즉 파티션을 설정해두면, 개발자는 평소와 같이 DB를 조회하면 된다.



◾파티셔닝 설계 시 주의할 점

  • 파티셔닝 키(기준 컬럼) 설계가 중요하다.
  • 파티션 개수가 너무 많으면 오히려 오버헤드가 발생할 수 있다.
  • 인덱스, FK 제약조건 제약이 있을 수 있다. (DBMS마다 다름)


◾파티셔닝과 비슷한 개념

인덱싱은 많이 들어보았던 것 같은데 이것과는 무슨 차이점이 있을까? 파티셔닝과 비슷한 개념과 비교를 해보면 아래와 같다.

  • 파티셔닝
    : 하나의 DB인스턴스 안에서 테이블을 물리적으로 쪼갬
    : 차이점) 논리적 테이블은 1개
  • 샤딩
    : 여러 DB서버에 데이터를 분산
    : 차이점) DB 인스턴스도 여러 개
  • 인덱싱
    : 데이터 검색 속도 향상을 위해 별도 구조 유지
    : 차이점) 테이블 분할 아님

실제 파티셔닝을 적용해보았는데, 그리 어렵지도 않고 한 번 설정해두면 DB안에서 자동으로 파티셔닝 자식 테이블에서 해당하는 데이터를 주므로 사용도 동일하게 하면 된다.

다만 자식 테이블 생성하는 로직은 필요하다. 파티셔닝에서 부모, 자식 개념이 있는데 자식 테이블에 저장이 되는 구조인 듯 하다. 이 부분은 cron으로 만들어주었고, 안전하게 default테이블도 생성해두었다.

다음 파티셔닝 글에서는 실제 사용해본 것을 자세히 정리해보아야겠다.

profile
개발세포 이야기

0개의 댓글