IT 개발,관리,연동,자동화

데이터베이스의 select 문에서 나오는 데이터를 json으로 변환하는 가장 일반적이고 효율적이며 대중적인 방법은...

_Blue_Sky_ 2024. 11. 29. 23:41
728x90

데이터베이스에서 SELECT 문으로 반환된 데이터를 JSON으로 변환하는 방법은 사용하는 프로그래밍 언어나 환경에 따라 달라질 수 있습니다. 그러나 일반적으로 다음과 같은 방법이 가장 많이 사용되고 효율적입니다.


1. Python 사용

Python에서 데이터베이스의 데이터를 JSON으로 변환하려면 pymysql, sqlite3 등의 데이터베이스 라이브러리와 JSON 처리 라이브러리인 **json**을 함께 사용할 수 있습니다.

import pymysql
import json

# 데이터베이스 연결
connection = pymysql.connect(
    host='localhost',
    user='username',
    password='password',
    database='dbname'
)

try:
    with connection.cursor() as cursor:
        # SELECT 쿼리 실행
        cursor.execute("SELECT id, name, age FROM users")
        rows = cursor.fetchall()  # 데이터를 가져옴
        
        # 컬럼 이름 가져오기
        columns = [col[0] for col in cursor.description]

        # 데이터를 JSON으로 변환
        result = [dict(zip(columns, row)) for row in rows]
        json_data = json.dumps(result, indent=4, ensure_ascii=False)  # JSON 변환

        print(json_data)

finally:
    connection.close()

장점:

  • Python의 json.dumps로 JSON 변환이 간편.
  • 데이터베이스 커서의 description 속성으로 자동 컬럼 매핑.

728x90

2. Node.js 사용

Node.js에서는 mysql 또는 pg 모듈과 JSON 변환이 기본적으로 용이합니다.

const mysql = require('mysql2/promise');

(async () => {
    const connection = await mysql.createConnection({
        host: 'localhost',
        user: 'username',
        password: 'password',
        database: 'dbname'
    });

    try {
        const [rows] = await connection.execute("SELECT id, name, age FROM users");

        // JSON 변환
        const jsonData = JSON.stringify(rows, null, 4); // 자동으로 객체가 JSON으로 변환됨
        console.log(jsonData);

    } finally {
        await connection.end();
    }
})();

장점:

  • Node.js의 결과가 기본적으로 객체 배열 형태로 반환되므로 별도의 컬럼 매핑 불필요.
  • JSON.stringify로 손쉽게 JSON 변환 가능.

3. SQL 자체에서 JSON 변환 (MySQL, PostgreSQL)

일부 데이터베이스는 SQL에서 JSON 변환을 직접 지원합니다.

MySQL

MySQL 5.7 이상에서는 JSON 함수가 내장되어 있습니다.

SELECT JSON_OBJECT('id', id, 'name', name, 'age', age) AS json_data
FROM users;

PostgreSQL

PostgreSQL에서는 json_agg와 row_to_json 함수를 사용할 수 있습니다.

SELECT json_agg(row_to_json(users))
FROM (SELECT id, name, age FROM users) AS users;

장점:

  • 데이터베이스 레벨에서 JSON 생성 가능.
  • 데이터 전송 시 JSON 형식으로 바로 출력 가능.

728x90

4. PHP 사용

PHP의 PDO와 **json_encode**를 사용하여 데이터를 JSON으로 변환할 수 있습니다.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');

$stmt = $pdo->query("SELECT id, name, age FROM users");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$json_data = json_encode($rows, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

echo $json_data;
?>

장점:

  • PDO::FETCH_ASSOC로 키-값 형태의 데이터를 바로 가져올 수 있음.
  • PHP의 json_encode가 직관적이고 간단함.

5. ORM 사용 (예: Django, SQLAlchemy)

ORM은 객체-관계 매핑을 통해 데이터를 객체로 변환하므로 JSON 변환이 더욱 간단합니다.

Django

from django.core.serializers import serialize
from myapp.models import User

users = User.objects.all()
json_data = serialize('json', users)

print(json_data)

SQLAlchemy

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
import json

engine = create_engine('mysql+pymysql://username:password@localhost/dbname')
Session = sessionmaker(bind=engine)
session = Session()

users = session.execute("SELECT id, name, age FROM users").fetchall()
columns = users.keys()
result = [dict(zip(columns, row)) for row in users]

json_data = json.dumps(result, indent=4, ensure_ascii=False)
print(json_data)

결론

  • Python + JSON 라이브러리: 범용적이고 유연함.
  • Node.js: 비동기 환경에 적합하며 내장 JSON 변환이 강력.
  • SQL 자체 JSON 함수: 데이터베이스 레벨에서 JSON을 생성할 수 있는 가장 효율적인 방법.
  • ORM: 데이터 모델링과 JSON 변환을 간편하게 통합.

환경에 따라 위 방법 중 하나를 선택하면 됩니다. 😊

728x90