분류 전체보기

☁️ MySQL 엔진의 잠금 MySQL에서 사용되는 잠금은 스토리지 엔진 레벨의 잠금과 MySQL 엔진 레벨의 잠금으로 나눌 수 있다. MySQL 엔진은 스토리지 엔진을 제외한 MySQL 서버의 모든 영역으로 보면되는데, MySQL 엔진 레벨의 잠금은 스토리지 엔진에도 영향을 미치지만, 반대로 스토리지 엔진 레벨의 잠금은 MySQL 엔진에 영향을 미치지 않는다. MySQL 엔진에서 제공하는 락의 종류를 간단하게만 정리하고 넘어가보려 한다. 글로벌 락 (Global Lock) MySQL에서 제공하는 잠금 가운데 가장 범위가 크다. 하나의 세션이 글로벌 락을 획득하면 다른 세션에서의 Select 작업 외의 모든 작업은 글로벌 락의 해제를 기다려야 한다. 이는 MySQL 서버 전체에 대한 락이므로 작업 테이블..
☁️ 트랜잭션 트랜잭션이란 우리가 하나라고 생각하는 작업이다. 예를 들어 나에게 “샤워를 한 뒤 바디로션을 바른다.”는 하나의 작업이다. 엄밀하게 따지면 “샤워를 한다.” 와 “바디로션을 바른다.”로 행동이 나눠지지만 그냥 하나의 작업으로 묶는 것이다. 트랜잭션도 동일하다. “A테이블을 읽고 a레코드가 존재한다면, A테이블의 a레코드를 수정한다.” 라는 두 작업을 하나의 작업으로 인식하게 하는 것이다. 하나의 작업은 반드시 성공(커밋)하거나 하나라도 실패 시 롤백되어야 한다. A테이블을 읽는 작업을 성공하고 a레코드를 수정하는 작업에서 오류가 발생하였다면 롤백되어야 한다. 유의할 점 그런데 여기서 유의해야할 사항이 있다. “과연 A테이블을 읽고 a레코드가 존재한다면, A테이블의 a레코드를 수정한다” 라는..
아래 포스팅과 이어집니다. InnoDB 스토리지 엔진 - 버퍼 풀과 리두, 언두 로그 ☁️ InnoDB 스토리지 엔진 아키텍처 스토리지 엔진은 MySQL 엔진에서 핸들러에 의해 전달된 명령을 수행하는 엔진이다. 데이터를 메모리에 쓰고 읽는 작업을 수행한다. 이 중 MySQL에서 가장 많이 hyunsb.tistory.com ☁️ 어댑티브 해시 인덱스 InnoDB는 내부적으로 자주 사용되는 데이터에 페이지 대해 자동으로 생성되는 인덱스를 가지고 있다. 보통 테이블 인덱스라고 하면 B-Tree 구조로 생성하는데, 어댑티브 해시 인덱스는 이름처럼 해시 값을 가진다. B-Tree 인덱스는 O(logN)의 빠른 탐색 속도를 가지지만, 수천 개의 스레드가 동시에 이를 처리한다면 속도는 느려질 수 밖에 없다. 이러한 ..
☁️ InnoDB 스토리지 엔진 아키텍처 스토리지 엔진은 MySQL 엔진에서 핸들러에 의해 전달된 명령을 수행하는 엔진이다. 데이터를 메모리에 쓰고 읽는 작업을 수행한다. 이 중 MySQL에서 가장 많이 사용되는 엔진은 InnoDB 스토리지 엔진이다. InnoDB 스토리지 엔진은 내부적으로 Buffer pool을 가지고 있어 데이터 캐싱을 지원한다. 또한 쓰기 작업에 대해 지연된 쓰기를 지원하고, 백그라운드 스레드가 주기적으로 더티 페이지를 확인하여 디스크에 데이터를 적재하고 동기화하는 작업을 수행한다. InnoDB 스토리지 엔진은 레코드(튜플) 기반 잠금을 제공한다. 튜플 기반 잠금은 테이블 기반 잠금보다 좁은 범위 락을 사용하고, 각 트랜잭션이 튜플을 기준으로 동작할 수 있기에 높은 동시성 처리가 가..
☁️ 쿼리 실행 구조 사용자가 MySQL에 쿼리를 요청하면 MySQL은 아래의 그림과 같은 절차를 수행한다. 쿼리 파서 사용자의 요청으로 들어온 쿼리 문장을 토큰으로 분리하여 트리 형태의 구조(파서 트리)로 만들어 내는 작업을 수행한다. 이 때, 사용자가 요청한 쿼리의 기본 문법 오류가 발견되고 리턴된다. 전처리기 쿼리 파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 문제점이 있는지 확인한다. 테이블 이름이나 컬럼, 내장 함수 같은 구문에 오류가 있는지 확인하고, 실제로 존재하는 테이블인지 권한상 접근 불가능한 테이블인지 판단 후 오류 검출 시 리턴한다. 옵티마이저 옵티마이저는 MySQL 엔진의 뇌와 같은 존재이다. 쿼리 문장을 더 저렴한 비용으로 빠르게 처리할 수 있는지를 판단하여 실행 계획을..
☁️ MySQL 사용이유 Oracle과 비교한 MySQL의 경쟁력은 가격이다. 방대한 양을 저장하고 트래픽을 수용하기에 Oracle RDBMS는 너무 비싸다. MySQL은 Oracle 만큼이나 레퍼런스가 많고 안정적이기에 사용하기에 좋다고 생각한다. ☁️ MySQL 아키텍처 MySQL은 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. MySQL엔진: 쿼리 파싱, 옵티마이저 등 사용자 요청에 대한 전반적인 처리를 담당한다. 스토리지 엔진: 디스크에 쓰기, 읽기 작업을 수행한다. 스토리지 엔진 마다 수행 방식이 상이하다. MySQL엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL파서, 전처리기, 쿼리를 최적화 해주는 옵티마이저가 중심을 이룬다. 스토리지..
💡 해당 글은 『스프링 입문을 위한 자바 객체지향의 원리와 이해』 도서를 학습하며 도서의 내용을 참고하여 본인의 언어로 표현한 글입니다. 해당 장에서는 스프링 삼각형이라 불리는 IoC/DI, AOP, PSA에 대해 간단하게 다룬다. 스프링을 전문적으로 다루는 도서가 아니기에, 상세한 정보는 포함되어있지 않다. 『추후 토비의 스프링』 도서를 통해 내용을 보완할 예정이다. ☁️ IoC/DI IoC(Inversion of Control), DI(Dependency Injection) [Spring] 제어의 역전 (IoC) 제어의 역전(IoC) 사람은 이름을 가진다. 이름은 사람의 상태이다. 살아가면서 스스로 관리하며 사용한다. 하지만 이름은 태어나면서 부모님에 의해 결정된다. 나 스스로의 상태이며, 내가 사용..
💡 해당 글은 『스프링 입문을 위한 자바 객체지향의 원리와 이해』 도서를 학습하며 도서의 내용을 참고하여 본인의 언어로 표현한 글입니다. 해당 도서는 디자인 패턴 전문 서적이 아니기에 디자인 패턴에 대해 상세하게는 다루지 않는다. 따라서 추후 『헤드퍼스트 디자인패턴』 도서를 통해 내용을 보완할 예정이다. ☁️ 디자인 패턴 객체 지향 4대 특성(캡상추다)은 객체 지향에서 지원하는 도구이다. 객체 지향 5원칙(SOLID)은 도구를 올바르게 사용하는 방법이다. 디자인 패턴은 도구를 올바르게 사용하여 프로그래밍 하도록 도와주는 비법이다. 디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프렉티스를 정리한 것이다. 디자인 패..
· JAVA
☁️ Strategy 스프링에서는 빈의 인스턴스 생성 전략에 대해 전략 패턴을 사용하여 구현했다. 전략 패턴은 디자인 패턴의 꽃이라고도 한다. 전략 패턴에느 3가지 요소가 사용되며 아래와 같다. 전략을 가지는 전략 객체 전략을 객체를 사용하는 컨텍스트 전략 객체를 생성하고, 컨텍스트에 주입하는 클라이언트 클라이언트가 전략 객체를 생성하고 컨텍스트에 주입함으로써, 컨텍스트는 외부에서 주입받은 전략에 따라 상이한 행동을 하는 것이 전략 패턴이다. 학교에서 선생님이 각 학생에게 필요한 과목을 학습하라고 명령하는 상황을 예시로 들어보자 과목: 전략을 가지는 전략 객체 (수학, 과학, 국어) 학생: 전략 객체를 사용하는 컨텍스트 (수학 학습, 과학 학습, 국어 학습) 선생님: 전략(과목) 객체를 생성하고 컨텍스트..
hyunsb
'분류 전체보기' 카테고리의 글 목록 (5 Page)