Skip to content

Releases: hkjang/dataworks

v0.9.53 - Data Works

Choose a tag to compare

@hkjang hkjang released this 12 Sep 07:09

Data Works v0.9.53

주요 변경 사항

  • 관리자가 화면에서 붙이는 방문 추적 스크립트 체계 추가 — nonce CSP·출처 추출·차단 기록·같은 오리진 Momento 프록시 (v0.9.53): 워크벤치에 방문 추적 스니펫을 넣을 방법이 없었고 SPA shell 에는 CSP 자체가 없었음. 새 internal/tracking 패키지가 설정을 읽어 provider 스니펫을 요청별 nonce 로 렌더링하고(모든 <script> 에 부착), 스니펫에서 http(s) 출처를 추출해 정책에 넣으며, 브라우저가 막은 출처를 100개 고리 버퍼에 기록하고 허용 목록에 추가할 수 있게 함. 설정은 기존 admin settings 레지스트리에 tracking.* 13개(카테고리 tracking, 전부 기본 꺼짐, 8KB·provider·URL·placement·allowed_hosts 검증)로 얹어 런타임 스냅샷과 멀티 파드 폴링에 그대로 편승. 워크벤치 shell(index.html) 응답에만 script-src 'self'(+nonce·provider 출처·report-uri, style-src 'unsafe-inline' 은 React 인라인 스타일 때문에 허용) 정책을 달고 비화면 경로는 default-src 'none' 으로 좁혔으며 zero modtime 으로 304 를 막아 캐시된 본문과 새 nonce 가 어긋나지 않게 함. 레거시 콘솔(/admin)은 인라인 핸들러·style 때문에 CSP 없이 tracking.include_admin 일 때만 스니펫을 삽입(가이드에 명시). Momento 를 첫 provider 로 두고 tracking.momento_proxy(기본 켜짐)면 /momento/*httputil.ReverseProxy 로 수집기에 넘기며(쿠키·Authorization 제거, 추적 꺼지면 404) 스니펫에 data-endpoint="/momento" 를 줘 정책에 외부 출처가 등장하지 않음. 엔드포인트 POST /tracking/csp-report(무인증, 추적 꺼져 있으면 폐기)·GET /admin/tracking/status·GET|DELETE /admin/tracking/violations·POST /admin/tracking/violations/allow 를 추가하고 SPA 설정 화면에 "방문 추적" 탭(provider 별 필드, 현재 상태·미완료 사유·정책 출처, 차단된 출처 목록 + 허용/비우기)을 추가. internal/tracking 단위 테스트 11건과 proxy HTTP 회귀 테스트 6건(꺼짐 시 페이지 불변·엄격 정책·프록시 닫힘 / 프록시 nonce 주입·요청별 새 nonce·자격 증명 제거 / custom 스니펫 출처 반영·신고→목록→허용→정책 반영 / 설정 검증 400)을 추가했고 실제 SPA 를 임베드한 서버와 스텁 수집기·headless Chromium 으로 비콘 도착·CSP 콘솔 오류 없음·끄면 원복을 확인. docs/ADMIN_GUIDE.md 4.5절에 설정 방법과 CSP·nonce·차단 출처 설명을 추가하고 PDF 를 다시 생성. dataworks:v0.9.53 이미지를 dataworks-v0.9.53.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.53.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.53.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.53

v0.9.52 - Data Works

Choose a tag to compare

@hkjang hkjang released this 10 Sep 19:05

Data Works v0.9.52

주요 변경 사항

  • 사용자·관리자 가이드를 캡처 포함 완성본으로 보강하고 PDF 정본 추가 (v0.9.52): 두 가이드 모두 .md 만 있고 .pdf 가 없었으며 가이드 표준이 요구하는 절이 빠져 있었음. 사용자 가이드에 '처음 5분'(로그인→관제실→검토 센터→출시 게이트→승인 기록)·'자주 하는 작업'·'용어' 절을 넣고, '막혔을 때' 는 일반론 대신 실제로 돌아오는 문구를 싣도록 로그인 실패(invalid_credentials)와 상품 런타임 API 오류 코드 13종을 HTTP 상태·서버 메시지·조치 표로 정리했으며, 쓰이지 않던 캡처(통합 검색, 알림 센터, 모바일 메뉴, 상품 탭 5종)를 싣고 alt 텍스트를 PDF 그림 설명이 되도록 한 줄 설명으로 바꿨음. 관리자 가이드에는 구성 요소·포트·볼륨·최소 자원 표, cmd/dataworks 가 읽는 환경 변수 137개 전수 표(이름·기본값·필수·설명), 역할별 등급과 Scope 표, 운영 절(상태 점검 엔드포인트·로그 위치·pg_dump 백업과 복구·업그레이드와 롤백), 증상→확인→조치 형식의 장애 대응 표와 보안 절을 추가(로그·응답 문구는 코드에서 확인한 실제 값). 관리자 가이드 '계정과 권한' 절에 실을 화면이 없던 문제도 함께 해소해, 캡처 스펙이 건너뛰던 관리자 설정의 '역할 및 권한' 탭을 서버 기본 역할·스코프·설명을 그대로 옮긴 /admin/roles·/admin/users 데모 픽스처로 촬영하고(desktop·mobile 20-admin-roles.jpg) 기존 캡처도 모두 다시 찍었음. 정본이 갈라지지 않도록 GitHub Pages 용 user-guide.html·admin-guide.html 이 저장소의 .md/.pdf 를 정본으로 가리키게 하고 README 에 PDF 링크를 추가. dataworks:v0.9.52 이미지를 dataworks-v0.9.52.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.52.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.52.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.52

v0.9.51 - Data Works

Choose a tag to compare

@hkjang hkjang released this 10 Sep 10:36

Data Works v0.9.51

주요 변경 사항

  • action center 의 엔타이틀먼트 활성 판정이 런타임 규칙과 어긋나던 문제 수정 (v0.9.51): GET /admin/dataworks/action-centerent.Status != "active" || entitlementExpired(...) 로 상태 문자열을 대소문자·공백까지 그대로 비교했지만, 런타임 조회 게이트는 store.EntitlementActive(status 는 EqualFold+trim, expires_at 은 trim 후 파싱하고 해석 불가면 만료)를 쓴다. 그래서 쓰기 경로가 status 를 정규화하기(v0.9.50) 전에 저장된 "Active"·" active " 행은 고객 API 키가 POST /v1/data-products/{key}/query 에서 정상적으로 서빙받는데도 운영 화면에는 inactive_access 로 떠서 운영자가 멀쩡한 접근권을 회수하도록 유도했고, 같은 행이 만료 예고(entitlement_expiring) 루프에는 도달하지 못해 갱신 신호까지 잃었음(계약 쪽 contractScopeStatusActive 와 같은 유형의 판정 불일치). 판정을 같은 패키지의 런타임 래퍼 entitlementActive 에 위임해 두 경로가 하나의 규칙을 쓰게 하고, 호출부가 사라진 entitlementExpired 를 삭제(진짜로 닫힌 revoked 행은 종전대로 inactive_access 로 남음). HTTP 회귀 테스트(레거시 "Active"·" active " 행 + revoked 행 → inactive_accessrevoked 하나뿐, 20일 뒤 만료되는 공백 포함 행이 expiring_access 로 잡힘)를 추가해 재발을 차단하고 docs/OPERATIONS.md 의 "만료 예정 계약·권한 확인" 절에 문서화. dataworks:v0.9.51 이미지를 dataworks-v0.9.51.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.51.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.51.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.51

v0.9.50 - Data Works

Choose a tag to compare

@hkjang hkjang released this 10 Sep 02:56

Data Works v0.9.50

주요 변경 사항

  • API Entitlement 쓰기 경로의 status 허용값 검증 부재 수정 (v0.9.50): POST /admin/dataworks/products/{key}/entitlementsexpires_at 형식만 검사하고 status 는 그대로 저장해, enabled·actve 같은 오타가 들어오면 store.EntitlementActiveactive 만 인정하므로 발급 순간부터 고객 API 키가 POST /v1/data-products/{key}/query 에서 403 inactive_entitlement 를 받는데 admin 목록에는 정상 발급된 접근권으로 보였음(계약 쪽 invalid_contract_status 와 같은 유형의 fail-closed 오설정). 계약 쪽 contractScopeStatusKnown 과 대칭으로 entitlementStatusKnown 을 두고 active(기본)·draft·suspended·revoked 만 허용하며 그 외에는 400 invalid_entitlement_status 로 거부하고, 소문자·trim 정규화 후 빈 값은 active 로 채워 응답이 실제 저장 행과 일치하도록 정렬(감사용으로 남기는 revoked 행은 관례대로 계속 저장 가능). HTTP 회귀 테스트(오타 상태 거부·미저장, ACTIVE 정규화 저장, revoked 허용, 생략 시 기본값이 응답·저장 행 모두 active)와 entitlementStatusKnown 표 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 5절에 문서화. dataworks:v0.9.50 이미지를 dataworks-v0.9.50.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.50.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.50.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.50

v0.9.49 - Data Works

Choose a tag to compare

@hkjang hkjang released this 09 Sep 06:36

Data Works v0.9.49

주요 변경 사항

  • action center 가 revoked·draft·suspended 계약도 만료 임박으로 영구 집계하던 문제 수정 (v0.9.49): GET /admin/dataworks/action-centercontract_expiring 루프는 계약(Contract Scope)의 valid_to 만 보고 scope.Status 를 보지 않아, 런타임이 절대 서빙하지 않는 계약(draft·suspended·revoked)까지 "renew, narrow, or retire" 항목으로 보고했음. 종료한 계약의 valid_to 는 시간이 갈수록 과거로 멀어지기만 하므로 이 항목은 절대 사라지지 않고, 이미 만료된 창이라 심각도까지 high 로 고정돼 운영 화면과 expiring_contracts 카운터가 의도적으로 닫은 계약으로 영구히 부풀고 정말 갱신이 필요한 활성 계약을 덮었음(바로 아래 엔타이틀먼트 루프는 이미 ent.Status != "active" 를 걸러냄). 런타임의 활성 판정과 어긋나지 않도록 contractScopeCanServe 안에 있던 상태 검사를 contractScopeStatusActive 로 분리해 두 곳이 같은 규칙을 쓰게 했고, 이미 만료된 활성 계약은 종전대로 high 로 남겨 운영자가 원하는 신호를 유지(창 기준 필터가 아니라 상태 기준 필터만 추가). HTTP 회귀 테스트(90일 전 만료된 revoked·draft·suspended 3건 + 10일 뒤 만료 active 1건 → expiring_contracts=1, 액션은 활성 계약 하나)와 contractScopeStatusActive 표 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 5절에 문서화. dataworks:v0.9.49 이미지를 dataworks-v0.9.49.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.49.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.49.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.49

v0.9.48 - Data Works

Choose a tag to compare

@hkjang hkjang released this 08 Sep 22:46

Data Works v0.9.48

주요 변경 사항

  • Contract Scope 접근 창 순서와 미지원 status 검증 부재 수정 (v0.9.48): POST /admin/dataworks/products/{key}/contract-scopesvalid_from·valid_to 의 RFC3339 형식만 보고 두 값의 순서는 보지 않아 valid_fromvalid_to 보다 뒤인 뒤집힌 창을 200 으로 저장했는데, 런타임 contractScopeActive 는 현재 시각이 창 안에 있을 때만 참이므로 그렇게 저장된 계약은 존재하는 내내 모든 조회를 403 contract_scope_inactive 로 막았음. status 도 store 가 빈 값만 active 로 채울 뿐 허용값 검증이 없어 actve·enabled 같은 오타가 그대로 저장돼 계약이 즉시 죽었고, 두 경우 모두 admin 목록에는 정상적인 고객 계약으로 보였음(같은 핸들러가 이미 형식·rate_limit·allowed_fields·masking_policy 는 거부함). 뒤집힌 창은 400 invalid_access_window, 미지원 상태는 400 invalid_contract_status(허용: active·draft·suspended·revoked)로 거부하고 status 를 소문자·trim 정규화한 뒤 빈 값은 active 로 채워 응답이 실제 저장 행과 일치하도록 정렬. HTTP 회귀 테스트(뒤집힌 창 거부·미저장, 오타 상태 거부·미저장, 정규화 저장, 생략 시 기본값)와 contractScopeStatusKnown 표 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 5절에 문서화. dataworks:v0.9.48 이미지를 dataworks-v0.9.48.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.48.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.48.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.48

v0.9.47 - Data Works

Choose a tag to compare

@hkjang hkjang released this 08 Sep 15:37

Data Works v0.9.47

주요 변경 사항

  • 런타임이 실제로 수행하지 않는 마스킹 문구가 민감 상품 Publish Gate 를 통과시키던 문제 수정 (v0.9.47): applyMasking 이 구현한 정책은 redact·hash 뿐이고 그 외 값은 원본을 그대로 돌려주는데, POST /admin/dataworks/products/{key}/contract-scopesmasking_policy 를 검증 없이 저장했고 민감 상품 Publish Gate 는 비어 있지 않고 none 이 아니면 마스킹 구성으로 집계해, "개인 단위 원천값 제외" 같은 서술형 문구가 게시를 통과시키면서 조회 응답은 원본 값을 그대로 내보냈음. 같은 판독기는 반대 방향으로도 fail-open 이었는데, 마스킹은 계약별로 적용되는데 계약이 여럿일 때 그중 하나만 마스킹하면 상품 전체가 통과해 나머지 고객은 게시 후에도 원본 값을 받았음. 쓰기 경로에서 none(빈 값 포함)·redact·hash 만 허용하고(400 invalid_masking_policy, 소문자·trim 정규화) 게이트는 "아직 조회를 처리할 수 있는 계약이 모두" 런타임이 강제하는 정책을 가질 때만 참이 되게 정렬. revoked 상태나 이미 닫힌 창(파싱 불가 valid_to 포함)은 다시는 조회를 처리할 수 없으므로 제외해 옛 계약이 영구히 게시를 막지 않게 했고, 아직 시작되지 않은 창은 나중에 서빙하므로 포함한다(contractScopeCanServe 로 분리하고 contractScopeActive 가 이를 재사용). HTTP 회귀 테스트 3건(서술형 거부·정규화 저장, 레거시 행의 게이트 판정, 계약 둘 중 하나만 마스킹 시 차단 + 종료·미래 계약 처리)과 정책 분류·contractScopeCanServe 표 테스트, 허용 목록과 applyMasking 동기화 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 5절에 문서화. dataworks:v0.9.47 이미지를 dataworks-v0.9.47.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.47.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.47.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.47

v0.9.46 - Data Works

Choose a tag to compare

@hkjang hkjang released this 08 Sep 10:47

Data Works v0.9.46

주요 변경 사항

  • 한 API 키가 같은 상품에 엔타이틀먼트를 여러 개 가질 때 죽은 계약을 가리키는 행만 평가하던 문제 수정 (v0.9.46): dw_api_entitlementsid 단위로 저장돼 한 API 키가 같은 상품에 여러 행을 가질 수 있고 각 행이 자기 contract_key 를 가리키는데, POST /v1/data-products/{key}/querystore.FindAPIEntitlement 가 고른 한 행만 평가했음. 그래서 우선순위 1순위 행이 이미 종료된 계약(Contract Scope)을 가리키고 다른 활성 엔타이틀먼트가 살아 있는 계약을 가리키면, 실제로 유효한 접근권이 있는데도 403 contract_scope_inactive 로 막혔음. 후보 전체를 활성 우선·최신 우선으로 돌려주는 store.ListAPIEntitlementCandidates 를 추가하고(FindAPIEntitlement 는 그 첫 원소로 재구현), 런타임이 후보를 훑어 "엔타이틀먼트 활성 + scope 가 조회 허용 + 계약이 이 상품 것이고 active·유효기간 안 + 민감 상품이면 purpose 존재" 를 모두 만족하는 첫 행을 쓰도록 정렬. 요청 본문에 좌우되는 allowed_fields 와 호출량을 소모하는 rate_limit 은 선택 기준에서 제외해 후보 순회가 분당 한도를 앞당겨 소진하지 않게 했고, 만족하는 후보가 없으면 종전대로 1순위 행으로 검사를 흘려보내 inactive_entitlement·contract_scope_missing·contract_scope_inactive·missing_contract_purpose 중 실제 원인이 그대로 응답되도록 유지. HTTP 회귀 테스트(활성 두 행 중 죽은 계약 쪽이 1순위여도 200 이고 살아 있는 계약 키로 처리, 계약이 전부 닫히면 여전히 403 contract_scope_inactive)와 store 후보 정렬 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 에 선택 규칙을 문서화. dataworks:v0.9.46 이미지를 dataworks-v0.9.46.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.46.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.46.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.46

v0.9.45 - Data Works

Choose a tag to compare

@hkjang hkjang released this 08 Sep 08:28

Data Works v0.9.45

주요 변경 사항

  • API Entitlement 만료 예고 부재와 action center 만료 예정 창 하드코딩 수정 (v0.9.45): GET /admin/dataworks/action-center 는 계약(Contract Scope)에만 30일 고정 예고를 주고 API Entitlement 에는 예고가 전혀 없어, 고객 API 키는 expires_at 당일 그대로 죽고 화면에는 그 뒤에야 inactive_access 로 나타나 운영자가 갱신을 준비할 신호가 하나도 없었음. 활성·미만료 엔타이틀먼트가 창 안에 만료되면 expiring_access/entitlement_expiring 액션으로 보고하도록 추가하고, 분기 단위 갱신 주기를 위해 30일로 고정돼 있던 창을 ?expiring_within=13w|45d|72h 로 지정할 수 있게 해 응답이 적용된 창을 expiring_within 으로 되돌려 주도록 정렬. 해석 불가·비양수 값을 기본값으로 조용히 되돌리면 운영자가 물어본 창과 다른 답을 주게 되므로 400 invalid_expiring_within 으로 거부. 내장 admin UI 는 새 액션을 기존 "접근 만료" 탭에 합산·필터하고 두 접근 액션 모두에 만료일을 표시하며, workbench 검토 화면의 summary→action type 매핑이 5개뿐이라 나머지 카운터 버튼이 빈 목록을 보여주던 문제도 함께 해소. parseExpiryHorizon 표 테스트와 HTTP 회귀 테스트(기본 30일에서 20일 뒤 만료 감지·200일짜리 미감지, 13w 로 60일 계약까지 감지, 7d 로 미감지, 잘못된 파라미터 400)를 추가해 재발을 차단하고 docs/OPERATIONS.md 와 README 에 문서화. dataworks:v0.9.45 이미지를 dataworks-v0.9.45.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.45.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.45.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.45

v0.9.44 - Data Works

Choose a tag to compare

@hkjang hkjang released this 07 Sep 03:01

Data Works v0.9.44

주요 변경 사항

  • 데이터 상품 조회 응답 키가 계약 표기를 따르지 않던 문제 수정과 빈 allowed_fields 계약 저장 차단 (v0.9.44): POST /v1/data-products/{key}/querycontractResponseFields 는 요청 필드를 계약의 allowed_fields 와 대소문자 무시로 대조하면서도 응답 data 의 키는 클라이언트가 보낸 표기를 그대로 사용했음. 그런데 같은 상품의 BuildDynamicOpenAPIDocumentallowed_fields 를 그대로 응답 프로퍼티 이름이자 required 목록으로 선언하므로, 계약이 score 인데 소비자가 Score 로 요청하면 상품 자신의 OpenAPI 문서에 없는 키가 내려가고 required 로 선언된 키는 빠져 응답 스키마를 검증하는 소비자가 깨졌음. 매칭된 계약 표기를 응답 키로 돌려주도록 정렬. 같은 경로에서 POST /admin/dataworks/products/{key}/contract-scopesallowed_fields 없이도 200 으로 계약을 저장하는 것을 확인했는데, 그런 계약은 런타임에서 모든 조회를 403(empty_contract_scope·forbidden_fields)으로 막으면서 admin 목록에는 활성 계약으로 보였음. 접근 창·마스킹 정책 검증과 같은 관례로 400 invalid_allowed_fields 거부와 trim·대소문자 무시 중복 제거 정규화를 쓰기 경로에 추가. 표기 정규화 단위 테스트, 런타임 HTTP 회귀 테스트(Score·RISK_BAND 요청 → score·risk_band 응답), admin 쓰기 회귀 테스트를 추가해 재발을 차단하고 docs/OPERATIONS.md 에 문서화. dataworks:v0.9.44 이미지를 dataworks-v0.9.44.tar.gz 단일 오프라인 GitHub Release asset으로 배포.

배포 파일

파일 설명
dataworks-v0.9.44.tar.gz 오프라인 적재 가능한 Data Works Docker 이미지 (linux/amd64)

빠른 시작

# 이미지 로드
gunzip -c dataworks-v0.9.44.tar.gz | docker load

# 실행
docker run -d --name dataworks --restart=always \
  -p 8080:8080 \
  -e POSTGRES_DSN='postgres://dataworks:change-me@postgres:5432/dataworks?sslmode=disable' \
  -e BOOTSTRAP_ADMIN='admin@dataworks.local' \
  -e BOOTSTRAP_ADMIN_PASSWORD='change-me' \
  -e ENCRYPTION_KEY='replace-with-64-hex-characters' \
  dataworks:v0.9.44