본 가이드는 sql mysql nosql 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
Dynamic Column
MariaDB의 동적 열을 사용하면 테이블의 단일 열 내에 NoSQL 데이터베이스와 유사한 유연한 형식으로 데이터를 저장할 수 있습니다. 동적 열을 사용하여 문자열, 정수 또는 중첩 구조와 같은 다양한 유형의 데이터를 저장할 수 있습니다.
- 동적 열 활성화: 먼저 MariaDB 설치에서 동적 열이 활성화되어 있는지 확인하십시오. 동적 열은 기본적으로 MariaDB에서 사용할 수 있지만 구성 파일에서
dynamic_columns플러그인이 설치되고 활성화되었는지 확인해야 할 수도 있습니다.my.cnf(MariaDB 구성) 파일에서dynamic_columns플러그인이 활성화되어 있는지 확인하세요.
[mysqld]
dynamic_columns = ON
- 테이블 만들기: 동적 열이 포함된 테이블을 만듭니다. 예는 다음과 같습니다.
CREATE TABLE my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
dynamic_data DYNAMIC;
);
- 데이터 삽입:
INSERT INTO문을 사용하여 동적 열에 데이터를 삽입하고 동적 열을 JSON과 같은 문자열로 지정할 수 있습니다.
INSERT INTO my_table (dynamic_data)
VALUES ('{"name": "John", "age": 30}');
- 데이터 쿼리: MariaDB에서 제공하는 다양한 기능을 사용하여 동적 열에서 데이터를 쿼리할 수 있습니다. 예를 들어 동적 열에서 “이름” 필드를 검색하려면 다음을 수행하세요.
SELECT DYNAMIC_JSON_VALUE(dynamic_data, '$.name') AS name FROM my_table;
특징
- 유연성: 동적 열은 문자열, 정수 또는 중첩 구조를 포함한 다양한 유형의 데이터를 모두 단일 열 내에 저장할 수 있으므로 더 많은 유연성을 제공합니다.
- 스키마 없는 열: 동적 열에는 스키마가 없습니다. 즉, 테이블 스키마를 변경하지 않고도 데이터 구조를 변경할 수 있습니다.
- 복잡한 데이터: 행마다 구조가 다를 수 있는 복잡하고 이질적인 데이터를 저장해야 할 때 유용합니다.
- 쿼리: 동적 열을 쿼리하려면
DYNAMIC_JSON_VALUE와 같은 특수 함수를 사용하는 경우가 많습니다. 특정 데이터 요소를 추출하고 쿼리하는 것은 더 복잡할 수 있습니다.
JSON Column
MariaDB의 JSON 열을 사용하면 JSON 형식의 데이터를 구조화된 방식으로 저장할 수 있으므로 SQL 내에서 JSON 데이터 작업을 더 쉽게 할 수 있습니다.
- JSON 열이 포함된 테이블 생성: JSON 열이 포함된 테이블을 생성합니다.
CREATE TABLE my_json_table (
id INT AUTO_INCREMENT PRIMARY KEY,
json_data JSON;
);
- 데이터 삽입:
INSERT INTO문을 사용하여 JSON 데이터를 JSON 열에 직접 삽입할 수 있습니다.
INSERT INTO my_json_table (json_data)
VALUES ('{"name": "Alice", "age": 25}');
- 데이터 쿼리: MariaDB에서 사용할 수 있는 다양한 JSON 함수를 사용하여 JSON 열에서 데이터를 쿼리할 수 있습니다. 예를 들어 JSON 열에서 “이름” 필드를 검색하려면 다음을 수행합니다.
SELECT json_data->>'$.name' AS name FROM my_json_table;
특징
- 구조화된 저장소: JSON 열은 JSON 형식 데이터에 대한 구조화된 저장소를 제공합니다. JSON 데이터가 특정 구조를 준수하는지 확인하여 작업을 더 쉽게 만듭니다.
- 데이터 유효성 검사: JSON 열은 삽입 시 JSON 데이터의 유효성을 검사하여 지정된 JSON 스키마를 준수하는지 확인합니다.
- 쿼리: JSON 열은
>>또는>와 같은 JSON 데이터의 쿼리 및 조작을 단순화하는 내장 JSON 함수를 제공합니다. 이러한 기능을 사용하면 JSON 데이터에서 특정 요소를 쉽게 추출할 수 있습니다. - 사용 사례: JSON 열은 일관된 구조의 JSON 데이터가 있고 쿼리 및 조작을 위해 JSON 관련 기능을 활용하려는 경우에 적합합니다.
Function
#return jsonOBJ::인자값으로 인스턴스 key-value OBJ 생성
JSON_OBJECT('name', 'John', 'age', 30)
#return jsonArray::인자값으로 인스턴스array 생성
JSON_ARRAY('apple', 'banana', 'cherry')
#return JSONOBJ::지정한 JSONPATH이하의 문서만 조회
JSON_EXTRACT('{"name": "Alice", "age": 25}', '$.name')
#JSON_EXTRACT(REFERRER_NOS, '$[1]')
#return STRING::remove "
JSON_UNQUOTE('"Alice"')
#return jsonOBJ::지정한 JSONPATH를 지정값으로 변경하여 조회 (없을시 추가됨)
JSON_SET('{"name": "Alice", "age": 25}', '$.age', 26)
#return jsonOBJ::지정한 JSONPATH를 지정값으로 변경하여 조회 (없을시 추가하지 않음)
JSON_REPLACE('{"name": "Alice", "age": 25}', '$.age', 26)
#return jsonOBJ::지정한 JSONPATH에 지정값을 추가하여 조회
JSON_INSERT('{"name": "Alice", "age": 25}', '$.city', 'New York')
#return jsonOBJ::지정한 JSONPATH를 제외하여 조회
JSON_REMOVE('{"name": "Alice", "age": 25}', '$.age')
#return 'all': JsonArray, 'one': JosnPath::값으로 json경로 검색::첫번째 결과 or 모든 결과
JSON_SEARCH('{"name": "Alice", "age": 25}', $one_or_all, 'Alice')
#return boolean::contains
JSON_CONTAINS('["apple", "banana", "cherry"]', '"banana"')
#return boolean::패스 존재여부 확인. 2번째 인자 'one', 'all'은 차이가 없음. 잘못된 함수 설계
JSON_CONTAINS_PATH('{"name": "Alice", "age": 25}', $one_or_all, '$.name')
비교
동적 열은 더 많은 유연성을 제공하지만 추가 처리가 필요할 수 있는 반면, JSON 열은 쿼리 및 조작을 위한 구조화된 저장소와 내장 JSON 함수를 제공합니다. 데이터 모델링 요구 사항에 가장 적합한 것을 선택하세요.
동적 열은 더 유연하지만 쿼리에 추가적인 노력이 필요하고 엄격한 데이터 구조를 적용하지 않을 수 있습니다. 반면에 JSON 열은 구조화된 저장소, 내장된 유효성 검사 및 쿼리를 위한 편리한 JSON 관련 기능을 제공합니다. 둘 중 하나를 선택하는 것은 특정 데이터와 사용 사례에 따라 다릅니다. 알려진 구조의 일관된 데이터가 있는 경우 일반적으로 JSON 열이 더 나은 선택입니다. 더 많은 유연성이 필요하거나 복잡하고 다양한 데이터 구조가 있는 경우 동적 열이 더 적합할 수 있습니다.
Leave a Reply