소프트웨어 개발자/좋은 API, DB 설계하기

[좋은 DB 설계하기] RDB에서 JsonField 사용 vs 관계형 테이블 맺기

yubi5050 2023. 5. 23. 22:40

JSON Field의 장단점 (vs 외래키 테이블 구성)

Json Field 장점

- 추가 적인 테이블 관리가 필요 없음 (테이블 간 추가 Join 필요 X)

- 생성/수정시 값에 대해 Dictionary를 교체하는 식으로 쉽게 가능

- Validation이 큰 상관이 없는 경우 / 정적인 값 경우 사용하기 좋음

- JSON Field만 가지고 추가 쿼리 가능

 

Json Field 단점

- 난독화 발생 우려

- JSON 내 관계형 값이 변할시 값을 업데이트 하기 힘듬

- JSON 값에 대한 Validation을 하기가 힘듬  (값 검증시 내부 값들의 type 까지 검증 필요)

- DB 테이블 트랜잭션 분산 가능

- RDB가 JOIN이 잘되어 있으면 성능적으로 큰 이점은 없음

 

JSON Field의 장단점

사례 1. Article - Comment 관계

- Article Table 내 comment 라는 Json Field 운용

- 특정 댓글의 수정/삭제시 등 컨트롤 하기 힘들고, Article 변경 or Comment 변경 모두 한 Table을 업데이트해야 함

- Create/Update가 비교적 빈번할 수 있으므로, ForeignKey가 적절

 

사례 2. Article에 임시 저장 기능 구현

- Article에 임시 저장 기능 구현시 temp 라는 JSON Field 운용

- 임시 저장 필드에 대해서 값 validation이 필요 없음 (서비스에 따라 다를 수 있음)

- 임시 저장 내용이 빈번하게 생성/수정 되더라도 둘다 Field에 초기화 하면 되므로 구현에 용이

- 수정에 대한 부담이 없어 JsonField 적절

 

사례 3.  Article - Comment (수정 없음) 관계 

- Article Table 내 Comment 라는 Json Field 운용

- 특정 데이터의 수정/삭제시 컨트롤 필요 X

- 수정에 대한 부담이 없어 JsonField 적절

 

결론 - JSON Field 선택 기준 

1. Validation 항목이 적을 때

2. 외부 테이블 수정시 해당 Field 수정이 필요 없을 때 (다른 테이블과의 관계가 없을 때)

3. Join이 부담스러울 때