대용량 처리를 위한 기술

김정민·2024년 12월 4일
0

전체적인 tip

목록 보기
5/5

돈을 쓰는 법

서버 증설

온프레미스 방식일 경우, 서버를 scale - up scale - out 한다면 확실하게 해결된다. 단 scale - up의 경우 하드웨어의 한계가 명확하다.
보통 scale - out을 하고, ups 등과 같은 백업 전원 시설까지 한다면 더욱 안정성이 높아지겠다.

클라우드 자원 증설

더 좋은 인스턴스를 차용하는 것이 도움이 될것 같다(사실 아직 잘 모르겠다 이 부분은)

기술적 해결

캐시 사용

  • 자주 쓰는 데이터를 캐시에서 꺼내 쓰도록 한다.

로드 밸런싱

로드 밸런싱이란, 적절한 인스턴스에 트래픽을 적절하게 분산시켜 어느한쪽에 부하가 일어나지 않도록 하는 것이다.
많은 양의 트래픽이 일어 났을 떄 앞서 말한 scale - out을 한 다면 여러 개의 서버가 처리할 수 있을 것이다. 이때 그냥 공평하게 나눠서 주는게 아니라, 적절한 알고리즘으로 트래픽을 서버에 나눈다면 더 좋은 효율을 낼 수 있다. 이를 로드 밸런싱이라고 한다. 여러가지 로드 밸런싱 알고리즘이 있다.

DB 튜닝

    1. 쿼리 최적화
      (1) 인덱스 활용
      인덱스 추가: 자주 조회되는 컬럼(WHERE 조건, JOIN, ORDER BY)에 인덱스를 생성합니다.
      복합 인덱스: 여러 컬럼을 함께 조회할 때 복합 인덱스를 사용하여 성능을 개선합니다.
      예: CREATE INDEX idx_user_order ON users (user_id, order_date);
      인덱스 과다 사용 주의: 과도한 인덱스는 쓰기 성능을 저하시킬 수 있습니다.
      (2) 쿼리 리팩토링
      불필요한 SELECT 제거: 필요한 컬럼만 SELECT.
      JOIN 최소화: 필요 없는 JOIN 제거, 하위 쿼리로 대체.
      GROUP BY 최적화: 그룹핑이 필요한 경우 인덱스를 활용.
      (3) 실행 계획 분석
      EXPLAIN 또는 EXPLAIN ANALYZE 명령어를 사용해 쿼리 실행 계획을 확인하고, 병목 지점을 식별합니다.
      예: EXPLAIN SELECT * FROM orders WHERE user_id = 100;
    1. 데이터베이스 구조 최적화
      (1) 정규화와 비정규화
      정규화: 중복 데이터를 제거하여 저장 공간 절약 및 데이터 무결성 유지.
      비정규화: 조회 성능을 높이기 위해 중복 데이터를 허용하거나 테이블을 결합.
      예: 조회 성능이 중요한 경우 JOIN을 줄이기 위해 데이터 복제.
      (2) 파티셔닝 (Partitioning)
      데이터를 논리적으로 분할하여 대용량 데이터에 대한 쿼리를 효율적으로 처리.
      수평 파티셔닝: 특정 조건에 따라 행을 분리 (예: 날짜별).
      수직 파티셔닝: 컬럼을 분리 (예: 자주 사용하는 컬럼과 그렇지 않은 컬럼 분리).
    1. 캐싱
      (1) 애플리케이션 레벨 캐싱
      Redis, Memcached와 같은 캐시 시스템을 사용하여 DB 부하를 줄임.
      예: 자주 조회되는 데이터를 캐시에 저장.
      (2) 쿼리 결과 캐싱
      데이터베이스 내에서 자주 실행되는 쿼리의 결과를 캐싱.
      일부 DBMS(MySQL, PostgreSQL 등)에서는 쿼리 결과를 캐시로 활용 가능.
    1. 데이터 처리 기법
      (1) 배치 처리
      실시간 처리가 필요하지 않은 작업은 배치로 처리하여 DB 부하를 분산.
      예: 야간에 데이터 집계.
      (2) Sharding
      데이터를 물리적으로 여러 데이터베이스에 분산 저장.
      예: 사용자 ID를 기준으로 DB를 분리 (DB1: ID 11000, DB2: ID 10012000).
    1. 시스템 자원 활용
      (1) 커넥션 풀
      데이터베이스 연결 수를 제한하여 과도한 연결로 인한 성능 저하 방지.
      (2) I/O 최적화
      데이터 파일과 로그 파일을 별도의 디스크에 저장하여 디스크 I/O 병목 제거.
      SSD 사용으로 디스크 성능 향상.
      (3) 메모리 튜닝
      적절한 Buffer Pool 및 Cache 크기 설정으로 읽기/쓰기 성능 최적화.
    1. DBMS 특화 기능 활용
      (1) MySQL
      Query Cache: MySQL의 쿼리 캐시 활용.
      InnoDB Tuning: innodb_buffer_pool_size 조정을 통해 메모리 사용 최적화.
      (2) PostgreSQL
      Parallel Query: 대용량 쿼리를 병렬 처리.
      Vacuum/Analyze: 정기적으로 테이블을 최적화.
      (3) Oracle
      Partitioning, Index-Organized Tables: 대용량 테이블 처리 성능 향상.
      Optimizer Hints: 실행 계획을 수동으로 조정.
    1. 모니터링 및 지속적인 개선
      모니터링 도구 활용:
      pg_stat_activity (PostgreSQL), Performance Schema (MySQL).
      APM(Application Performance Monitoring) 도구 (예: New Relic, Datadog).
      성능 모니터링 후 병목 구간을 주기적으로 수정.
profile
computer science engineering

0개의 댓글

관련 채용 정보