
1. 데이터베이스 대소문자 구분을 위한 콜레이션(Collcation)utf8mb4_unicode_ci와 utf8mb4_general_ci 그리고 utf8mb4_bin[ 데이터베이스 Character Set과 Collcation에 대하여 ]MySQL 서버는 유니코드 문자 집합을 포함하여 다양한 문자 집합(Character Set)을 지원한다. 대표적으로 다음과 같은 유니코드 문자 집합이 존재한다.utf8mb4: 문자당 1~4바이트를 사용하는 유니코드 문자 집합의 UTF-8 인코딩utf8mb3: 문자당 1~3바이트를 사용하는 유니코드 문자 집합의 UTF-8 인코딩으로, deprecated 되어 utf8mb4 사용이 권장됨utf8: utf8mb3의 alias로 마찬가지로 utf8mb4의 사용을 권장하며, 추후..

아래 포스팅 내용의 대부분은 당근 마켓 테크 블로그 포스팅을 참고하여 작성되었습니다. 1. 실무 사례로 살펴보는 VARCHAR와 TEXT의 차이[ 문제의 상황 공유 ]개발자가 다음과 같은 DDL 요청을 DBA에게 부탁한 상황이다.alter table allowancemodify tx_id varchar(1000) not null comment '거래 내역 ID'; 해당 요청을 보고 개발자와 DBA가 나눈 대화는 다음과 같다.DBA: tx_id가 1000자나 되나요? 1000자면 한글 기준으로 3000byte에 해당하고, 2KB가 넘는 사이즈라서요.개발자: 요러요러한 비즈니스 구현 사항으로 인해 tx_id는 1000자가 될 수 있습니다.DBA: 그렇군요, 이해했습니다. 혹시 숫자와 문자 데이터를 분리..

이번에는 트랜잭션 격리 수준(Isolation Level)과 그로 인해 발생하는 부정합 문제를 직접 실습해보도록 하겠습니다. 혹시 트랜잭션 격리 수준(Isolation Level)에 대한 이해가 부족하다면 관련 포스팅을 참고해주세요. 1. 트랜잭션의 격리 수준(Transaction Isolation Level) 트랜잭션 격리 수준을 실습하기 위해서는 먼저 테이블을 만들고 데이터를 넣어두어야 한다. 아래의 쿼리를 통해 먼저 테이블을 생성해두도록 하자. 해당 테이블은 자동 증가열을 pk로 하며, name에는 넥스트 키 락을 위해 인덱스를 설정해두었다. create table member ( id bigint auto_increment primary key, name varchar(255) not null, ..

이번에는 트랜잭션 격리 수준(Isolation Level)에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 해당 내용을 완벽하기 이해하기 위해서는 MySQL이 제공하는 스토리지 엔진 수준의 락에 대해 알고 있어야 합니다. 혹시 모르면 관련 포스팅을 참고해주세요. 1. 트랜잭션의 격리 수준(Transaction Isolation Level)트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것이다. 트랜잭션의 격리 수준은 격리(고립) 수준이 높은 순서..

이번에는 스토리지 엔진 수준의 락의 종류에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 1. 스토리지 엔진 수준의 락의 종류MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. 스토리지 엔진 레벨의 잠금은 테이블의 데이터를 다루기 위한 락이며, MySQL 엔진 레벨의 잠금은 테이블이나 데이터베이스 등과 같은 부분을 위한 락에 해당한다. 그리고 이번에 살펴볼 잠금은 스토리지 엔진 레벨의 잠금이다.레코드 락(Record Lock)갭 락(Gap Lock)넥스트 키 락(Next Key Lock)자동 증가 락(Auto Increment Lock) [..