2024.08.05.월.TIL 내일배움캠프 77일차 <최종프로젝트Day13>

김기남·2024년 8월 5일
post-thumbnail

안녕하세요, 오늘은 기술면접 준비내용과 최종프로젝트 진행상황을 정리해보았습니다.

쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요.

데이터베이스 시스템에서 쿼리를 가장 효율적으로 실행하기 위해 실행 계획을 최적화하는 프로세스입니다.

  • 쿼리 평가 계획 작성
    데이터베이스 시스템은 쿼리를 평가하기 위한 여러 실행 계획을 생성합니다. 각 계획은 쿼리를 실행하는 다른 방법을 나타냅니다.
  • 비용 기반 최적화
    각 실행 계획에 대한 예상 비용을 계산하고, 가장 저렴한 계획을 선택합니다. 비용은 실행 시간, CPU 사용량, 입출력 등과 관련된 여러 요소를 고려합니다.
  • 인덱스 사용
    적절한 인덱스를 활용하여 데이터 접근을 최적화합니다. 인덱스는 특정 열에 대한 빠른 검색을 지원하므로, 쿼리의 WHERE 절 조건에 인덱스를 활용할 수 있는지 고려해야합니다.
  • 조인 최적화
    조인 연산을 최적화하여 불필요한 조인을 피하고, 조인 순서를 조정하여 성능을 향상시킵니다.
  • 부분 결과 최적화
    중간 결과 집합을 최소화하기 위해 집계 함수나 필터링을 조건절 앞으로 이동하거나 조건을 최적화합니다.
  • 쿼리 캐싱
    이전에 실행한 쿼리의 결과를 캐시하여 동일한 쿼리를 다시 실행하지 않고 캐시된 결과를 반환하는 방법을 사용합니다.
  • 통계 정보 사용
    데이터베이스의 통계 정보를 활용하여 쿼리 최적화 결정에 도움을 줍니다. 이를 통해 올바른 인덱스 선택과 조인 순서 등이 결정됩니다.
  • 하드웨어 및 시스템 리소스 고려
    시스템의 하드웨어 및 리소스 제약 사항을 고려하여 최적화를 수행합니다.
  • 동적 최적화
    실행 중인 쿼리의 성능을 실시간으로 모니터링하고, 최적화 결정을 동적으로 조정합니다.

DB 로직 최소화를 하려면 어떻게 해야 할까요?

  • 쿼리 최적화
    쿼리를 최적화하여 데이터베이스에서 필요한 데이터를 효율적으로 가져옵니다.
    인덱스를 적절하게 사용하여 쿼리 성능을 향상시킵니다.
    불필요한 JOIN 연산을 피하고, 필요한 경우 LEFT JOIN과 같은 외부 조인을 사용하여 필요한 데이터만 검색합니다.
  • ORM (Object-Relational Mapping) 사용
    ORM 도구를 사용하여 데이터베이스와 애플리케이션 코드 간의 매핑을 자동화합니다.
    ORM은 CRUD(Create, Read, Update, Delete) 작업을 간단하게 만들어 줄 수 있으며, 개발자가 쿼리 작성 및 관리를 최소화할 수 있습니다.
  • 캐싱 활용
    데이터를 캐시하여 반복적인 쿼리를 줄입니다. 이로써 데이터베이스에 접근하는 빈도를 낮출 수 있습니다.
  • 비즈니스 로직 분리
    데이터베이스와 관련된 로직을 비즈니스 로직으로부터 분리합니다.
    데이터 액세스 코드와 비즈니스 로직을 분리함으로써 유지 보수가 쉬워지며, 확장성이 향상됩니다.
  • 배치 작업 사용
    주기적으로 실행되는 작업이나 데이터 가공 작업을 데이터베이스에서 분리하여 별도의 배치 작업으로 처리합니다.
    데이터 일관성과 성능을 향상시킬 수 있습니다.
  • 인덱싱 및 파티셔닝 활용
    큰 테이블에서 성능 문제를 해결하기 위해 인덱스 및 파티셔닝을 활용합니다.
    효과적으로 데이터를 분할하고 색인화하면 데이터 검색 및 조작이 빨라집니다.
  • 최소한의 데이터 검색
    애플리케이션이 실제로 필요로 하는 데이터만 검색하도록 쿼리를 작성합니다. 불필요한 데이터를 가져오지 않도록 합니다.
  • 트랜잭션 관리
    트랜잭션을 최소한으로 사용하고, 긴 트랜잭션을 피합니다. 트랜잭션 범위를 줄여 데이터베이스 락을 방지합니다.
  • 모니터링과 프로파일링
    애플리케이션에서 데이터베이스 작업을 모니터링하고, 성능 병목 현상을 식별합니다. 프로파일링 도구를 사용하여 쿼리 실행 계획을 분석합니다.
  • 필요한 경우 수직 및 수평 스케일링
    데이터베이스 부하가 증가할 때 수직 스케일링(더 강력한 하드웨어로 업그레이드) 또는 수평 스케일링(데이터베이스를 여러 서버로 분할)을 고려합니다.

최종프로젝트

시연영상
엔진엑스(프론트 배포)
중간발표

profile
새로운 시작~!

0개의 댓글