HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
🪵
대규모 서비스를 지탱하는 기술
/
4️⃣
챕터 04 분산을 고려한 MySQL 운용
4️⃣

챕터 04 분산을 고려한 MySQL 운용

세 가지 포인트!
 

1. OS 캐시 활용 - Table 설계 잘 하자!

  • 데이터가 많아질 수록 대충정의한 한 column 이 가지는 용량은 어마어마 해진다.
    • varchar(20)이면 충분한 column 에 varchar(256)을 적용하지 말자!
  • 테이블의 정규화!
    • 쿼리시 join 에 따른 성능 하락과 데이터 측면에서의 정규화를 잘 저울질 하자
 

2. 인덱스의 중요성

  • 인덱스 = 색인
  • 탐색 성능을 높이기 위해 적용하는 자료구조
  • MySQL 의 인덱스는 기본적으로 B+ 트리를 활용한다
자료구조 B-Tree, B+Tree
자료구조 B-Tree, B+Tree
ex) 데이터 4,000만 건 테이블 에서의 탐색
  • 인덱스 없음 -> 선형탐색 Full Table Scan = O(n). 최대 4,000만번 탐색
  • 인덱스 있음 -> B트리로 이분탐색 = O(n) 최대 25.25번 탐색
 
  • 쿼리에 대해 인덱스가 동작하는지 explain 명령어로 확인 할 수 있다.
  • 복수 칼럼을 동시에 index 를 태우고자 할 경우에는 복합 인덱스를 사용해야 한다.
 

3. 확장을 전제로한 시스템 설계

이전 챕터의 마지막 강의에서 살펴본 국소성을 살리는 분산은 결국 DB 계층에서는 DB 파티셔닝을 의미한다.
설계시 DB 계층 뿐만 아니라 애플리케이션 계층에서도 DB의 확장성을 고려할 필요가 있다.
 

마스터/슬레이브 (DB Clustering) 방식의 특징

  • 슬레이브는 확장 - 참조계열 쿼리
  • 마스터는 확장하지 않는다
    • 갱신계열 쿼리
 

Join 배제

  • Table 이 서로를 직접 참조하는 Join 쿼리는 확장에 유연하지 못하다.
  • Where In 절로 나누어 처리하는 것이 확장에는 유연하다