imhamburger 님의 블로그
PostgreSQL에서 JSON 또는 JSONB 컬럼의 값 존재 여부 확인하기 본문
최근, 이력서 작성 폼 중 사용자가 얼마나 많이 내용을 입력했는지를 파악하기 위한 지표가 필요해졌다.
우리 회사에서는 PostgreSQL을 사용하고 있는데, 이력서 관련 테이블에는 JSON 또는 JSONB 타입의 컬럼이 다수 존재한다.
이 컬럼들 안에는 작성자가 입력한 다양한 key-value 형태의 정보들이 저장되어 있다. 예를 들어 careerForm, basicForm, educationForm 등의 컬럼들이 그런 형태이다.
보통이라면 JSON 안의 키를 꺼내서 세부 데이터를 분석하는 방식으로 접근할 수 있지만, 이번 목적은 사용자가 각 항목에 입력을 했는지 여부만 판단하는 것이었기 때문에, 내용이 존재하면 True, 비어있거나 NULL이면 False를 반환하는 방식이 적합하다고 판단했다.
이를 위해 다음과 같은 SQL 문을 작성하여, 각 항목의 작성 여부를 Boolean 값으로 판단하고, 이를 BigQuery에 저장해 활용하고자 했다:
("careerForm" IS NOT NULL AND "careerForm"::text <> '{}') AS "careerForm",
("educationForm" IS NOT NULL AND "educationForm"::text <> '{}') AS "educationForm",
...
이러한 방식은 다음과 같은 장점이 있다:
- JSON 내부의 상세 구조를 몰라도 된다.
- 단순히 입력 여부만 체크하면 되기 때문에 쿼리가 가볍고 명확하다.
- Boolean 값으로 결과를 반환하여, 추후 집계나 시각화에도 유리하다.
결과적으로, JSONB 컬럼을 하나하나 파싱하기보다는 단순히 "내용이 있는지 여부"만 확인하는 이 접근이 지표 설계 목적에 더 부합했다.
그리고 이를 Lambda 파이썬 서버에 올려야했다.
이때 f스트링으로 sql 쿼리를 처리해야 하는데, 중괄호 {} 이부분이 에러가 났다.
문제원인
파이썬에서 f-string을 쓸 때 {}는 변수를 넣는 자리로 인식되기 때문에,
f"SELECT ... <> '{}'" # ❌ 에러 또는 이상한 결과
처럼 쓰면 에러가 나거나 비어 있는 값으로 처리된다.
해결방법
중괄호 이스케이프 (f-string 안에서 {} 문자 그대로 쓰기)
f"SELECT ..., column::text <> '{{}}' ..."
{{ 와 }} 로 작성하면 실제 SQL에는 {}로 들어간다.
'끄적끄적' 카테고리의 다른 글
| pandas와 numpy 사이의 바이너리 호환성 문제 (0) | 2025.08.24 |
|---|---|
| 네이버 크롤링 오류 해결하기 (0) | 2025.08.10 |
| UI/UX 개선을 위한 A/B 테스트 (with GTM) (1) | 2025.06.25 |
| 컬럼형 DB ClickHouse?? (0) | 2025.06.19 |
| A/B 테스트할 때는 어떤걸 쓸까 gtm과 gtag (0) | 2025.05.29 |
