반응형
목차
개요
카카오테크캠퍼스 백엔드 과정 주차 관련 공부내용
강의에서 설명한 내용과 MySql 웹사이트 래퍼런스를 같이 참조하였다.
MySQL :: MySQL 8.0 Reference Manual :: 16.11 Overview of MySQL Storage Engine Architecture
1.1. 고전적인 3티어 아키텍처
- 클라이언트, 서버, 데이터베이스로 구성된 3티어 아키텍처
- 클라이언트가 서버에 JSON으로 요청하는 것처럼 백엔드 서버는 데이터베이스에 SQL을 통해 요청
프레젠테이션 계층 (Presentation Layer)
- 사용자 인터페이스를 담당하는 계층으로, 사용자와 시스템 간의 상호작용을 관리
- 웹 애플리케이션에서는 일반적으로 HTML, CSS, JavaScript 등을 사용하여 이 계층을 구현한다.
비즈니스 로직 계층 (Business Logic Layer)
- 애플리케이션의 핵심 기능을 구현하는 계층으로, 비즈니스 규칙과 요구 사항을 처리
- 사용자의 요청을 적절하게 처리하고, 데이터를 처리하고, 비즈니스 로직에 따라 동작을 수행한다.
데이터 계층 (Data Layer)
- 데이터베이스와 직접 상호작용하는 계층으로, 데이터의 생성, 조회, 업데이트, 삭제(CRUD) 작업을 처리
- SQL 또는 NoSQL 데이터베이스를 통해 데이터를 저장하고 검색한다.
2. MySQL 엔진과 서버 및 구성요소
- 서버에서 요청 SQL은 MySQL 엔진, 스토리지 엔진을 거쳐 운영체제를 통해 디스크에 접근하여 데이터를 서버에게 전달
- MySQL 엔진은 판단과 명령을 내리는 두뇌
- 스토리지 엔진은 동작을 수행하는 팔과 다리
2.2.0 대략적 설명
- 접속을 처리하는 커넥션 핸들러, 쿼리 파서, 전처리기, 옵티마이저, 쿼리실행기 등의 구성요소 존재
2.2.1 인터페이스
- MySQL 엔진의 인터페이스는 클라이언트와 서버 사이에서 통신을 담당
- 클라이언트가 서버에 연결을 요청하면, 커넥션 핸들러는 연결을 받아들이고, 클라이언트의 요청을 적절한 프로세스에 전달
- 이 프로세스는 주로 SQL 쿼리의 실행을 관리한다.
2.2.2 쿼리실행기와 핸들러 API
- 쿼리실행기는 옵티마이저가 결정한 계획대로 스토리지 엔진에 요청, 이때 HandlerApi 사용
- "핸들러 요청"은 스토리지 엔진에 요청하는 것을 의미한다.
2.2.3 쿼리 파서와 전처리기
- 쿼리 파서: SQL을 파싱하여 Syntax Tree를 생성, 문법 오류 검사 진행
- 전처리기: 쿼리 파서에서 만든 Tree를 바탕으로 전처리 시작, 테이블이나 컬럼 존재 여부, 접근권한 등 Semantic 오류 검사
2.2.4 옵티마이저
- 쿼리 파서에서 받은 정보를 바탕으로 쿼리를 어떻게 실행할지 결정하 실행 전략 중에서 가장 효율적인 것을 선택
- 쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블의 통계정보를 이용해 비용을 산정
- 테이블 순서, 불필요한 조건 제거, 통계정보를 바탕으로 전략을 결정 (실행 계획 수립)
2.2.5 캐시, 버퍼 (스레딩 구조)
- MySQL의 쿼리캐시와 Oracle의 소프트 파싱은 캐시라는 기술을 도입한 성능 최적화 사례
- 쿼리캐시는 조회성능은 더 높지만 캐시 데이터 관리에 더 높은 비용이 들어가는 특성이 있음
2.3 스토리지 엔진 구성
- 디스크에서 데이터를 가져오거나 저장하는 역할
- MySQL 스토리지 엔진은 플러그인 형태로 Handler API만 맞춘다면 직접 구현해서 사용 가능
- InnoDB, MyIsam 등 여러개의 스토리지 엔진 존재
2.3.1 InnoDB 엔진
- MySQL 8.0부터 디폴트 엔진으로 사용
- 클라이언트, 서버, 데이터베이스로 구성된 3티어 아키텍처
- 클라이언트가 서버에 JSON으로 요청하는 것처럼 백엔드 서버는 데이터베이스에 SQL을 통해 요청Clustered Index, Redo - Undo, Buffer pool 등의 기능 제공
마무리
다음 포스팅에서는 MySQL 디폴트 엔진인 InnoDB의 캐시와 버퍼풀이 어떻게 작동하는지 메모리를 Prefetching 할때는 어떤 알고리즘을 이용하는지에 대해서 알아보
'미사용 > KakaoTechCampus' 카테고리의 다른 글
MySQL기초[3]- 데이터 베이스 인덱싱 (0) | 2023.06.14 |
---|---|
MySQL기초[2]- 캐싱,버퍼풀 전략 (0) | 2023.06.14 |
Java기초[10] 인터페이스 기본개념으로 알아보는 다형성 (0) | 2023.04.28 |
Java기초[9] 전략&템플릿 메서드 패턴 (0) | 2023.04.28 |
Java기초[8] 명시적&묵시적 형변환 (0) | 2023.04.28 |