[PostgreSQL] PostgreSQL JSON 쿼리 성능 개선과 Java에서의 활용
·
Coding/PostgreSQL
대용량 JSON 데이터를 PostgreSQL에서 조회하면서 분석 지표를 만들던 중, 생각보다 쿼리 속도가 느리고 결과가 기대와 다르게 나오는 문제가 있었습니다. 특히 JSON 필드 안의 특정 값들을 기준으로 통계 데이터를 구하고, 그 결과를 Java + MyBatis 환경에서 리스트 형태로 받아야 했기 때문에, 정렬이나 형식까지 모두 신경 써야 했습니다.문제 상황초기에 작성한 쿼리는 다음과 같은 형태였습니다:WITH filtered_data AS ( SELECT t."timestamp", (t."json_field" ->> 'target_metric')::double precision AS value FROM "data_table" t WHERE ..
[Java/MyBatis] MyBatis <foreach>에서 #{}와 ${} 차이, 그리고 item 두 번 쓰기
·
Coding/Java
MyBatis에서 는 IN 조건이나 다중 INSERT와 같이 반복적인 SQL을 작성할 때 아주 유용하게 쓰입니다. 하지만 이 안에서 item을 여러 번 참조하거나, #{}와 ${} 중 어떤 걸 써야 하는지 헷갈릴 수 있습니다. 이 글에서는 그 차이점과 실전에서 어떻게 써야 안전하고 효율적인지 정리해보겠습니다.#{} vs ${} 차이점구분#{}${}방식PreparedStatement 방식문자열 치환 방식용도값 바인딩 (WHERE, VALUES 등)컬럼명, 테이블명 등 SQL 조각 삽입장점SQL 인젝션 방지, 자동 타입 변환, 성능 최적화동적인 SQL 문 구조 만들기 가능단점컬럼명/테이블명 등 SQL 구조에는 사용 불가SQL 인젝션 위험 있음, 성능 저하 가능보안안전검증 없으면 매우 위험예시 비교 #{id..
[PostgreSQL] MyBatis에서 PostgreSQL JSON 데이터 처리하기
·
Coding/PostgreSQL
1. PostgreSQL에서 JSONB 데이터 평균 구하기JSONB 컬럼이 포함된 테이블에서 특정 키(예: "efficiency") 값을 필터링하고 평균을 구하는 기본적인 SQL 쿼리는 다음과 같습니다.SELECT key AS tag_name, AVG(value::NUMERIC) AS avg_valueFROM sensor_data, LATERAL jsonb_each_text(outputs)WHERE timestamp_col BETWEEN '2024-01-01 00:00:00' AND '2024-01-31 23:59:59' AND key ILIKE '%efficiency%' AND (value::NUMERIC) BETWEEN 0 AND 100GROUP BY key;이 쿼리는..
[PostgreSQL] JSON 컬럼에서 Key-Value 추출 및 MyBatis 연동
·
Coding/PostgreSQL
PostgreSQL에서는 json 또는 jsonb 타입을 사용하여 JSON 데이터를 저장할 수 있습니다. 하지만 이를 테이블 형태로 변환하여 조회할 때는 추가적인 함수가 필요합니다. 특히 MyBatis를 활용하여 Java에서 HashMap 형태로 데이터를 가져오려면 적절한 쿼리 작성이 중요합니다. 이번 글에서는 PostgreSQL에서 JSON 데이터를 key-value 형태로 변환하는 방법과 MyBatis를 이용해 이를 Java에서 활용하는 방법을 알아보겠습니다.1. PostgreSQL에서 JSON 데이터를 Key-Value 형태로 변환하기1.1 테이블 및 샘플 데이터 생성먼저 JSON 데이터를 저장하는 status 컬럼을 포함한 테이블을 생성하고, 샘플 데이터를 삽입합니다.CREATE TABLE tes..