MySQL 2

개발 공부/DB MySQL에서 JSON 컬럼 써도 되나요?

프로젝트를 하다 보면 Map이나 Set 같은 값을 그대로 DB에 넣고 싶을 때가 있다. 정규화하기는 애매한 값이라든가, 특정 row에 딸린 id 목록이라든가, 통째로 읽고 쓰는 설정 덩어리 같은 것들이다. 관계로 풀어서 별도 테이블을 만들기는 번거롭고, 마침 MySQL에는 JSON 타입이 있다. 그래서 엔티티 필드를 Map로 두고 JSON 컬럼에 직렬화해서 저장한다. 편하다.그런데 문득 궁금해졌다. 이게 DB 안에서는 실제로 어떻게 처리될까? 성능상 괜찮을까? "JSON 쓰지 마라" 같은 말은 들어봤지만, 정작 왜 그런지는 깊이 따져본 적이 없었다.결론부터 말하면, JSON 컬럼은 데이터를 어떻게 접근하고 얼마나 큰지에 따라 충분히 쓸 만하기도, 독이 되기도 한다.그래서 직접 MySQL 8.0을 띄워놓고..

2026.06.21

개발 공부/DB 왜 서로 다른 값을 INSERT 했는데 데드락이 걸릴까?

최근 서로 다른 트랜잭션에서 겹치지 않는 FK 값을 가진 엔티티들을 동시에 삽입할 때 데드락이 발생한 케이스가 있었다. 분명 범위가 겹치지 않는데 왜 데드락이 걸리는 걸까?1. 결론: 유니크/외래 키 제약조건이 데드락을 유발한다핵심 원인외래 키(Foreign Key)이거나 유니크 제약 조건(Unique Constraint)이 걸려 있다면, 데드락 발생 확률이 비약적으로 높아진다.데드락 발생 메커니즘상황: FK 에는 유니크 제약 조건이 걸려있고 기존 데이터는 10, 20 이 존재한다고 가정. 격리 수준은 REPEATABLE READ.트랜잭션 A (INSERT 12): 유니크 체크를 위해 10~20 사이에 공유 잠금(S-Lock, 갭 락)을 획득트랜잭션 B (INSERT 14): 마찬가지로 10~20 사이에..

2026.02.02