올랑올랑 프로젝트에 reviews 테이블의 구조
올랑올랑은 reviews 테이블에 사진 필드를 json 타입으로 주어서 동적으로 사진이 몇 장을 올리든 reivews 테이블에 모든 데이터가 저장 되게 설정하였습니다.
마리아 디비에서 json 타입을 사용해도 내부에서는 longtext가 사용되는 것을 볼 수 있습니다.
일단 테이블에 데이터를 넣어 보겠습니다.
{
"image":
[
{
"imageName": "test.png"
},
{
"imageNmae": "test2.png"
}
]
}
review_images에 들어갈 json은 위와 같은 데이터를 넣어 보겠습니다.
insert into reviews values(3, 1, 'json 테스트', 'RDB에서 Json을 재밌게 사용해 봐용', 0, 0, 0, json_object('image', json_array(json_object('imageName', 'test.png'), json_object('imageName', 'test2.png'))), now(), now());
정상적으로 들어간걸 확인 했습니다.
다음 조회를 해보겠습니다.
select review_id, json_extract(review_images, '$.image') as 'all_image' from reviews;
select review_id, json_value(review_images, '$.image[0].imageName') as 'first_image' from reviews;
select review_id, json_extract(review_images, '$.image[0].imageName') as 'first_image' from reviews;
다음과 같이 나오는걸 확인 할 수 있습니다.
MariaDB에서 json 명령어는 아래 참조 칸에서 확인 부탁드립니다.
NoSQL과의 비교를 하고 싶었지만 NoSQL 경험이 없어서 못한게 아쉽습니다.
개인적으로 해당 json 필드는 rdb를 사용하고 있거나 사용해야 하는데
비정형 데이터가 있을 때 좋다고 생각 듭니다.
비정형 데이터 하나 때문에 nosql과 rdb를 같이 사용하는 것보단 rdb 하나에 json 타입을 사용하여 비정형 데이터를 json으로 사용하는 게 훨씬 비용이나 저 같이 rdb만 사용해 본 개발자 입장에서 러닝커브도 훨씬 적기 때문입니다.
22.08.12 추가
MySQL JSON vs. TEXT 해당 포스팅은 제 포스팅 처럼 MariaDB가 아닌 MySQL로 설명하고 있지만 참고하시면 좋을꺼 같아 추가 했습니다!
참조: