Etc

[데이터베이스] JSON 데이터 개념 정리 - RDS 차이점, 예제

weweGH 2025. 7. 30. 09:00
반응형

JSON 데이터 개념 정리
JSON 데이터 개념 정리


JSON 데이터 개념 정리 - RDS 차이점, 예제


들어가며


JSON은 웹 개발에서 많이 사용되는 데이터 형식 중 하나입니다. MongoDB와 같은 NoSQL 데이터베이스에서는 JSON 형태로 데이터를 저장하고 관리합니다. 

 

이 글에서는 JSON 형식의 개념과 RDS와의 차이점, 그리고 실제 예제 데이터를 소개합니다.



JSON이란?


JSONJavaScript Object Notation의 약자로 사람이 읽기 쉽고 기계가 파싱하기 쉬운 형태로 설계된 형식입니다. 주요 특징은 다음과 같습니다. 

  • 텍스트 기반: 순수 텍스트 형식으로 구성되어 플랫폼에 독립적입니다.
  • 경량: XML에 비해 더 적은 용량을 차지합니다.
  • 구조화: 중첩된 객체와 배열을 통해 복잡한 데이터 구조를 표현할 수 있습니다.
  • 타입 지원: 문자열, 숫자, 불린, 배열, 객체, null 타입을 지원합니다.

JSON과 RDS의 차이점


 

1. 복잡한(중첩) 구조 표현이 자연스럽다.

 

JSON은 객체 안에 객체를 넣거나 배열 안에 다양한 데이터 타입을 포함할 수 있어, 실제 데이터의 복잡한 관계를 직관적으로 표현할 수 있습니다.

 

2. 유연한 스키마

 

미리 정해진 테이블 구조 없이도 데이터를 저장할 수 있습니다. 새로운 필드 추가도, 각 도큐먼트마다 다른 구조도 모두 가능합니다. 계속 변하는 요구사항에 유연하게 대응할 수 있습니다.

 

3. 읽기 성능이 높다

 

관련된 모든 데이터가 하나의 도큐먼트에 포함되어 있으므로 복잡한 JOIN 연산 없이도 필요한 정보를 한 번에 조회할 수 있습니다. 읽기 중심의 애플리케이션에 매우 적합합니다.

 

4. 개발 생산성이 높다.

 

애플리케이션의 객체 구조와 데이터베이스의 저장 구조가 비슷하므로 복잡한 매핑 없이 데이터를 처리할 수 있습니다. 빠른 개발 속도와 직관적인 코드 작성이 가능합니다.

 

5. 데이터를 문서처럼 저장 및 전달할 수 있다.

 

JSON은 웹 표준 형식 기반으로 API 통신이나 데이터 교환 시 별도의 변환 과정이 필요 없습니다. 프론트엔드, 백엔드 간의 데이터 전달이 자연스럽고 효율적입니다.


구분 RDS JSON
구조 표현 테이블 & JOIN 필요 중첩된 JSON 구조로 직관적
스키마 유연성 고정된 스키마(DDL 필요) 자유로운 필드 추가/변형 가능
읽기 성능 JOIN이 많아지면 속도 저하 관련 정보 일괄 조회 가능
개발 편의성 DTO 변환 코드 필요 JSON 형식 그대로 API에 사용 가능
확장성 구조 변경 시 마이그레이션 필요 도큐먼트 단위로 유연하게 처리
반응형

JSON 예제 데이터


구체적인 예시로, 다음과 같은 음식점 데이터가 있다고 가정하겠습니다.

 

그림에서 알 수 있듯이, 음식점 안에 메뉴가 있고, 메뉴 안에는 재료, 맵기, 비건 여부 등의 정보가 들어있습니다. 만약 관계형DB(RDS)로 처리할 경우 음식점 테이블, 메뉴 테이블, 재료 테이블과 각각의 foriegn key 그리고 각각의 테이블에 대한 조인이 필요합니다.

 

이런 중첩 구조는 RDS보다 JSON이 훨씬 자연스럽게 표현할 수 있습니다.

예제 데이터
예제 데이터


위 데이터를 JSON 형식으로 표현하면 다음과 같습니다.

 

객체 안에 객체를 넣고, 배열 안에 다양한 데이터 타입을 포함하여 실제 데이터의 복잡한 관계를 직관적으로 표현할 수 있습니다. 한 음식점 안에 연락처(contact), 평점(ratings), 메뉴(menu)가 중첩되어 있고, 각 메뉴는 다시 재료(ingredients)를 포함합니다.

 

또한, 필요에 따라 새로운 필드를 추가할 수 있습니다. 1개의 음식점에만 '배달 여부'를 추가하거나 1개의 메뉴에만 '알러지' 정보 추가도 가능합니다.

{
 "restaurants": [
   {
     "restaurant_id": "rs_001",
     "restaurant_name": "한국식당",
     "cuisine_type": "한식",
     "contact": {
       "address": "서울특별시 강남구 123",
       "phone": "02.123.4567"
     },
     "ratings": {
       "average_rating": 4.5,
       "total_reviews": 238
     },
     "menu": [
       {
         "menu_id": "m_001",
         "name": "김치찌개",
         "spicy_level": 3,
         "is_vegan": false,
         "ingredients": ["김치", "돼지고기", "두부", "파", "마늘"]
       },
       {
         "menu_id": "m_002",
         "name": "비빔밥",
         "spicy_level": 2,
         "is_vegan": false,
         "ingredients": ["쌀밥", "나물", "고추장", "계란", "참기름"]
       },
       {
         "menu_id": "m_003",
         "name": "잡채",
         "spicy_level": 1,
         "is_vegan": false,
         "ingredients": ["당면", "소고기", "시금치", "당근", "양파"]
       }
     ]
   },
   {
     "restaurant_id": "rs_002",
     "restaurant_name": "이탈리안 쿠치나",
     "cuisine_type": "양식",
     "contact": {
       "address": "서울특별시 용산구 123",
       "phone": "02.345.6789"
     },
     "ratings": {
       "average_rating": 4.2,
       "total_reviews": 187
     },
     "menu": [
       {
         "menu_id": "m_004",
         "name": "마르게리타 피자",
         "spicy_level": 0,
         "is_vegan": false,
         "ingredients": ["토마토", "모짜렐라", "바질", "올리브오일", "밀가루"]
       },
       {
         "menu_id": "m_005",
         "name": "알리오 올리오",
         "spicy_level": 1,
         "is_vegan": false,
         "ingredients": ["스파게티", "마늘", "올리브오일", "페퍼론치노", "밀가루"]
       },
       {
         "menu_id": "m_006",
         "name": "볼로네제 파스타",
         "spicy_level": 1,
         "is_vegan": false,
         "ingredients": ["밀가루", "다진 소고기", "토마토소스", "양파", "당근"]
       }
     ]
   }
 ]
}

반응형