이음(EUM) — 경남 공공데이터 개방 플랫폼
18개 기관 · 240여 개 데이터셋 · 1,200여 개 온톨로지 노드를 잇는 경남 데이터 허브
NaDa· 게스트2026년 7월 12일조회 12
story · how it was built
설명
무엇을 (문제·대상)
공공데이터는 이미 많이 열려 있습니다. 문제는 기관마다 형식이 다르고, 같은 대상을 가리키는 데이터가 서로 연결돼 있지 않다는 점입니다. 이음은 경상남도 내 공공기관의 데이터를 수집·정제·분석·개방하는 통합 허브입니다. 현재 18개 이상 기관이 연동돼 있고 240여 개 데이터셋이 공개돼 있으며, 온톨로지 노드는 1,200개 이상, 일 평균 조회는 3,400여 건입니다.
주요 기능
- 기관 연동 — 기관 단위로 공간을 나누고, 각 기관이 자기 데이터를 올리고 공개 범위를 정합니다.
- 온톨로지 방식의 통합 — 데이터를 표로만 쌓지 않고 개체와 관계로 연결합니다. 어떤 데이터가 어떤 데이터와 이어져 있는지를 그래프로 봅니다.
- 지도·차트 — 위치가 있는 데이터는 지도에, 시계열은 차트로 바로 봅니다.
- 권한 분리 — 인증 클레임으로 기관·역할을 구분하고, 행 수준 보안으로 데이터 접근을 나눕니다.
어떻게 만들었는가 (과정·도구 활용)
Next.js(App Router) · TypeScript · Supabase(PostgreSQL + Row Level Security) 로 만들었습니다. 인증은 Supabase Auth 에 JWT 클레임을 얹어 기관·역할을 구분하고, 지도는 Leaflet 과 마커 클러스터, 차트는 Recharts, 온톨로지 그래프는 D3 로 그립니다. 테스트는 Jest 로 돕니다.
여러 기관이 함께 쓰는 시스템에서 가장 조심한 부분은 권한입니다. 화면에서 안 보이게 하는 것과 데이터에 접근할 수 없는 것은 완전히 다릅니다. 그래서 접근 통제는 화면이 아니라 행 수준 보안 정책으로 두고, 화면은 그 결과를 보여 주기만 합니다.
한계·다음
- 로그인이 필요한 플랫폼입니다. 계정 없이는 첫 화면에서 더 들어갈 수 없습니다.
- 온톨로지 스키마가 넓어질수록 적재 비용이 올라갑니다. 어디까지를 관계로 표현할지 기준이 더 필요합니다.
- 이음지도와는 이름만 같은 별개 프로젝트입니다. 자주 혼동됩니다.
journey · lessons
과정 · 배운 점
본문 = 무엇·기능·사용법. 여기 = 시간순 여정 + 다음에 남긴 교훈.
멀티테넌트에서 「화면에서 안 보이게 했다」는 접근 통제가 아닙니다. 통제는 데이터 계층에서 걸어야 하고, 화면은 그 결과만 그려야 합니다.
데이터를 연결하는 일은 스키마 설계가 아니라 「무엇을 같은 것으로 볼지」를 정하는 일이었습니다. 그 기준이 흔들리면 그래프는 늘어나는데 아무것도 못 찾게 됩니다.
피드백 원함 · 개선 제안 · 스택·도구 조언 · 질문