반응형
MySQL 5.7부터 정식 지원된 JSON 타입은, 이제 수많은 실무 프로젝트에서 유연한 데이터 저장 방식으로 활용되고 있다.
관계형 모델의 정형 데이터와 비정형 데이터를 함께 다루기 위한 강력한 기능이다.

✅ JSON 타입이란?
- MySQL에서 제공하는 특수한 컬럼 타입
- 문자열처럼 보이지만 내부적으로는 바이너리 포맷으로 저장
- 단순 문자열 저장이 아니라, 내부 구조를 파싱하고 연산 가능
예를 들어 다음과 같은 형태를 하나의 JSON 컬럼에 저장 가능하다.
{
"name": "홍길동",
"age": 30,
"skills": ["SQL", "Python"],
"certified": true
}
반응형
📦 왜 JSON 타입을 쓰는가?
- 스키마 유연성: 컬럼 구조를 자주 바꾸지 않아도 됨
- 다양한 구조를 가진 데이터를 1개의 컬럼에 저장 가능
- 비교, 조회, 수정이 전용 함수로 지원됨
- 로그 데이터, 설정값, 옵션, 통계 등 정형화되지 않은 데이터 저장에 적합
🧱 JSON 데이터 타입 구조 예시
CREATE TABLE users (
id INT PRIMARY KEY,
profile JSON
);
데이터 삽입 예시:
INSERT INTO users (id, profile)
VALUES (1, '{
"name": "철수",
"age": 25,
"email": "chulsoo@example.com",
"address": {
"city": "Seoul",
"zip": "12345"
}
}');
MySQL은 이 값을 문자열처럼 보이지만 내부적으로는 Binary JSON Format으로 저장함.
그 덕분에 빠른 탐색과 비교가 가능하다.
🔍 JSON 데이터 읽어보기 예시
기본적으로 -> 또는 ->> 연산자를 사용하거나, JSON_EXTRACT() 함수를 사용함
-- 이름 가져오기
SELECT profile->>'$.name' FROM users;
-- 도시 가져오기
SELECT JSON_EXTRACT(profile, '$.address.city') FROM users;
- -> : JSON 객체 반환
- ->> : 문자열 값 반환
- $.필드 : JSON 내부 경로 (Path)
반응형
🧪 JSON 필드 존재 여부 체크
SELECT *
FROM users
WHERE JSON_CONTAINS_PATH(profile, 'one', '$.email');
- 'one': 하나라도 존재하면 true
- 'all': 모두 존재해야 true
💡 실무에서 자주 쓰이는 패턴
- 사용자 맞춤 설정
- 필터 옵션 저장 (예: 쇼핑몰 검색 조건)
- 로그, 이벤트, 통계 등 스키마가 고정되지 않은 데이터
- 복잡한 구조를 단일 테이블에 담아야 할 때
⚠️ 주의할 점
- JSON 타입 컬럼은 일반적인 인덱스가 불가능
→ 성능 문제 발생 가능 - 데이터 유효성 검증 없음 (JSON 형식만 맞으면 저장됨)
- 자주 조회되는 필드는 일반 컬럼으로 분리하는 것이 좋음
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/json.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (JSON5️⃣) JSON 쿼리 성능 튜닝 전략: 인덱싱과 최적화 팁 (0) | 2025.07.17 |
|---|---|
| [MySQL] (JSON4️⃣) WHERE 절에서 JSON 조건 처리하는 방법 (0) | 2025.07.17 |
| [MySQL] (JSON3️⃣) JSON_EXTRACT, JSON_UNQUOTE, JSON_CONTAINS 파헤치기 (0) | 2025.07.17 |
| [MySQL] (JSON2️⃣) JSON_INSERT, JSON_SET, JSON_REPLACE 실전 활용법 (0) | 2025.07.17 |
| [MySQL] (고가용성4️⃣) Group Replication vs MHA 실무 비교와 선택 가이드 (0) | 2025.07.17 |
| [MySQL] (고가용성3️⃣) MHA 구성 방법과 장애 복구 흐름 정리 (2) | 2025.07.17 |
| [MySQL] (고가용성2️⃣) Group Replication 구성과 특징 완전 분석 (0) | 2025.07.17 |
| [MySQL] (고가용성1️⃣) MySQL 고가용성 개념과 클러스터링 구조 이해하기 (3) | 2025.07.17 |