MySQL

MySQL의 트랜잭션 격리 수준 실습해보기

트랜잭션은 ACID라는 아래 네 가지 조건을 만족해야 합니다. 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든, 모두 실패해야 한다. 일관성(Consistency) : 모든 트랜잭션은 일관성있는 DB 상태를 유지해야 한다. 가령, 트랜잭션의 결과는 DB에서 정한 무결성 제약 조건을 항상 만족해야 한다. 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 한다. 지속성(Durability) : 트랜잭션이 성공적으로 끝나면 그 결과가 항상 기록되어야 한다. 그리고 이 네 가지 조건 중에서 격리성을 완벽히 보장하기 위해서는 사실 상 개별 트랜잭션이 동시에 처리되지 않고 순서대로 처리되어야 하는데요. 문제는 이..

2023.09.14 게시됨

MySQL

MySQL, InnoDB 엔진에서의 B-Tree 인덱스 구조와 클러스터링, 커버링 인덱스에 대해

DB에서 인덱스는 데이터의 저장(INSERT, UPDATE, DELETE) 성능을 희생하고 그 대신 데이터의 읽고 속도를 높이는 기능입니다. 일반적인 애플리케이션에서 가장 많은 비율을 차지하는 API는 DB 조회와 연관되어 있기 때문에 인덱스를 적절하게 '잘' 사용하는 것은 애플리케이션 성능과 직결된 문제가 됩니다. 이번 글에서는 인덱스를 사용할 때 가장 기본적이고, 범용적으로 알아야 할 B-Tree 인덱스 구조에 대해 정리합니다. 그리고 B-Tree 인덱스와 연결지어 Mysql, InnoDB 아래서 클러스터링 인덱스, 커버링 인덱스란 무엇이며 어떻게 활용하는지 살펴보겠습니다. 1. InnoDB 엔진에서 B-Tree 구조와 데이터 탐색 B-Tree(Balanced Tree)는 이진 트리를 확장해서 더 많..

2023.09.09 게시됨

MySQL

MySQL 다중 컬럼 인덱스(Multi-column Index) 사용 시 주의할 점

0. 테스트 환경 구축 많은 실서비스에서 사용하는 DB에서는 2개 이상의 컬럼을 포함하는 인덱스가 흔히 사용됩니다. 이러한 인덱스를 다중 컬럼 인덱스(Multi-column Index)라고 하는데요. 이번 글에서는 MySQL에서 다중 컬럼 인덱스를 사용할 때 주의해야 할 몇 가지 포인트에 대해 정리해보려고 합니다. 먼저 테스트 환경 구축을 위해 테이블을 생성하고, 더미 데이터를 INSERT 하는 것부터 시작해보겠습니다. 테스트 환경은 아래와 같으며, MySQL Workbench를 사용합니다. mysql> show VARIABLES LIKE '%VERSION%'; +--------------------------+-----------------+ | Variable_name | Value | +------..

2023.08.03 게시됨

MySQL

M1 Mac 환경에서 MySQL 사용 환경 구축하기

이번 글에서는 M1 Mac 환경에서 MySQL을 설치하고 서버를 실행하는 방법을 정리해보려고 합니다. 1. Homebrew로 MySQL 설치 Homebrew는 macOS 전용 패키지 관리자로, 커맨드라인 도구나 시스템 패키지들을 설치하는 데 편의를 제공합니다. M1 환경에서 개발하시는 분이라면 Homebrew가 설치되어 있겠지만, 혹시 깔려있지 않으신 분은 아래 명령어로 설치하실 수 있습니다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 설치가 완료되면 아래와 같이 /opt/homebrew 경로에 관련 파일들이 생성된 것을 볼 수 있습니다. Homebrew는 전용 디렉토리에 패..

2023.06.03 게시됨