๐Ÿ“Œ ์˜ค๋ผํด JSON ๋ณ€ํ™˜ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋‹ค ๋ณด๋ฉด JSON ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์˜ค๋ผํด(Oracle Database)์—์„œ๋Š” SQL๊ณผ PL/SQL์—์„œ JSON์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ์˜ค๋Š˜์€ SQL ๊ฒฐ๊ณผ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ JSON ๋ฐ์ดํ„ฐ๋ฅผ SQL์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


โœ… 1. SQL ๊ฒฐ๊ณผ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

1-1. ๋‹จ์ผ ํ–‰ โ†’ JSON ๊ฐ์ฒด (JSON_OBJECT)

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์› ํ…Œ์ด๋ธ”(emp)์—์„œ ํŠน์ • ์‚ฌ์›์˜ ์ •๋ณด๋ฅผ JSON์œผ๋กœ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด:


SELECT JSON_OBJECT(
           'empno' VALUE empno,
           'ename' VALUE ename,
           'job'   VALUE job
       ) AS emp_json
FROM emp
WHERE empno = 7369;

๊ฒฐ๊ณผ


{"empno":7369,"ename":"SMITH","job":"CLERK"}

1-2. ๋‹ค์ค‘ ํ–‰ โ†’ JSON ๋ฐฐ์—ด (JSON_ARRAYAGG + JSON_OBJECT)

์—ฌ๋Ÿฌ ํ–‰์„ ํ•œ ๋ฒˆ์— JSON ๋ฐฐ์—ด๋กœ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


SELECT JSON_ARRAYAGG(
           JSON_OBJECT(
               'empno' VALUE empno,
               'ename' VALUE ename,
               'job'   VALUE job
           )
       ) AS emp_list
FROM emp;

๊ฒฐ๊ณผ


[
  {"empno":7369,"ename":"SMITH","job":"CLERK"},
  {"empno":7499,"ename":"ALLEN","job":"SALESMAN"}
]

1-3. Key-Value ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ (JSON_OBJECTAGG)


SELECT JSON_OBJECTAGG(
           ename VALUE job
       ) AS emp_map
FROM emp;

๊ฒฐ๊ณผ


{"SMITH":"CLERK","ALLEN":"SALESMAN"}

โœ… 2. JSON ๋ฐ์ดํ„ฐ๋ฅผ SQL์—์„œ ํ™œ์šฉํ•˜๊ธฐ

2-1. ํŠน์ • ํ•„๋“œ ์ถ”์ถœ (JSON_VALUE)


SELECT JSON_VALUE('{"empno":7369,"ename":"SMITH"}', '$.ename') AS name
FROM dual;

๊ฒฐ๊ณผ


SMITH

2-2. JSON ๋ฐฐ์—ด โ†’ ํ…Œ์ด๋ธ” ๋ณ€ํ™˜ (JSON_TABLE)


SELECT jt.empno, jt.ename
FROM JSON_TABLE(
       '[{"empno":7369,"ename":"SMITH"},
         {"empno":7499,"ename":"ALLEN"}]',
       '$[*]' COLUMNS (
           empno NUMBER PATH '$.empno',
           ename VARCHAR2(20) PATH '$.ename'
       )
     ) jt;

๊ฒฐ๊ณผ

EMPNO ENAME
7369 SMITH
7499 ALLEN

โœ… 3. PL/SQL์—์„œ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ


DECLARE
    v_json CLOB;
BEGIN
    SELECT JSON_ARRAYAGG(
               JSON_OBJECT(
                   'empno' VALUE empno,
                   'ename' VALUE ename
               )
           )
    INTO v_json
    FROM emp;
    
    DBMS_OUTPUT.PUT_LINE(v_json);
END;

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

์ •๋ฆฌํ•˜๋ฉด,

  • SQL ๊ฒฐ๊ณผ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ
    โ†’ JSON_OBJECT, JSON_ARRAYAGG, JSON_OBJECTAGG
  • JSON ๋ฐ์ดํ„ฐ๋ฅผ SQL์—์„œ ํ™œ์šฉํ•  ๋•Œ
    โ†’ JSON_VALUE, JSON_TABLE

์˜ค๋ผํด์˜ JSON ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด REST API ์—ฐ๋™์ด๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์ง„๋‹ค๋Š” ์ , ๊ผญ ๊ธฐ์–ตํ•ด ๋‘์„ธ์š”! ๐Ÿ’ก