RDB에서 JSON 타입 사용기

Dokkabei97·2022년 7월 30일
1

DB

목록 보기
1/1

환경

  • Kotlin + Spring Boot
  • MariaDB 10.6.7
  • Next.js

테이블 구조

올랑올랑 프로젝트에 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로 설명하고 있지만 참고하시면 좋을꺼 같아 추가 했습니다!


참조:

profile
ESTJ 개발자 백엔드와 인프라에 집중하고 있습니다.

0개의 댓글