Categories: 블록체인 글

Python에서 Web3로 — 3부작 중 1편

이걸 만드세요 — 헬스케어 + 블록체인 포트폴리오를 위한 FHIR Consent Vault

Python 개발자가 Web3로 넘어가려고 할 때, 진짜 어려운 질문은 “Solidity를 배워야 할까?”가 아닙니다. “이 일을 할 수 있다는 걸 증명하려면 뭘 만들어야 하지?” 가 어려운 질문입니다.

이 글에서는 프리랜서 포트폴리오에서 체급 이상의 펀치를 날리는 구체적인 프로젝트 하나를 안내해 드립니다. 세 가지를 결합합니다 — 헬스케어 데이터 표준, 분산 신원, 암호학적 검증 가능성. 글로벌 프리랜서 시장에서 이 셋을 Python으로 다루는 사람이 거의 없습니다.

프로젝트는 FHIR Consent Vault입니다 — 환자가 본인 의료 데이터의 동의를 관리하고, 모든 동의 기록이 암호학적으로 서명되어 위변조 불가능한 원장에 anchoring(닻 내림)되고, 제3자(보험사, 연구기관)가 중앙 기관을 신뢰하지 않고도 동의를 검증할 수 있는 시스템입니다.

저녁 시간 활용해서 4주면 작동 버전을 만들 수 있습니다. 끝나면 Upwork에서 시급 $80–$150에 해당하는 스킬을 증명할 결과물이 손에 잡힙니다.

왜 이 조합이 강한가

이 프로젝트에서 세 가지 표준이 수렴하는데, 셋 다 지금 가속 중입니다.

FHIR (Fast Healthcare Interoperability Resources) 는 HL7이 만든 의료 데이터 교환 국제 표준입니다. 미국은 2022년 “21st Century Cures Act”로 모든 EHR 시스템에 FHIR API를 의무화했습니다. EU, 영국, 호주, 캐나다 모두 채택했고요. 전 세계 모든 헬스케어 스타트업이 FHIR을 다룰 사람을 찾고 있습니다. 대부분 Java/C# 진영에서 찾고 있어요. Python으로 이걸 다루는 인력은 드뭅니다.

DID와 검증 가능 자격증명(Verifiable Credentials) 은 W3C가 만든 휴대 가능한 디지털 신원 표준입니다. 백신 패스, 학위 증명, 재직 증명 — 모두 이 모델로 옮겨가고 있어요. 2026년부터 EU 회원국에 의무 적용되는 EU 디지털 신원 지갑이 이 표준 위에서 돌아갑니다.

Merkle Tree와 암호학적 anchoring 이 블록체인으로 가는 다리입니다. 실제로 블록체인을 배포하지 않아도 이 패턴을 증명할 수 있습니다 — 로컬 SQLite를 “원장”으로 쓰고 해싱 로직만 제대로 짜면 이해도를 보여줄 수 있어요.

이 세 언어를 다 구사할 수 있는 개발자 — FHIR 데이터, DID/VC 신원, 온체인 검증 패턴 — 가 바로 헬스케어 블록체인 스타트업이 못 찾는 사람입니다. 그 사람이 되세요.

시스템 설계

세 명의 행위자가 있습니다:

  • 환자(Patient) — 의료 데이터의 주체, 동의 발급/철회
  • 데이터 보유자(Data Holder) — FHIR 서버 역할의 가상 병원
  • 요청자(Requester) — 가상의 보험사 또는 연구기관

흐름:

  1. 보험사가 “최근 6개월간 당뇨 관련 진단 데이터” 접근을 요청
  2. 환자가 검토 후 승인 → 시스템이 FHIR Consent 리소스 생성, 환자 키로 서명
  3. 서명된 동의의 해시가 Merkle Tree에 들어가고, 주기적으로 루트가 원장에 커밋됨
  4. 병원이 환자 서명을 검증하고, 요청된 FHIR 리소스를 보험사에 전달
  5. 보험사가 받은 데이터의 해시가 커밋된 값과 일치하는지 검증 → 진본 확인
  6. 환자는 언제든 동의 철회 가능; 철회 사실도 원장에 기록

이게 증명하는 것: 헬스케어 데이터 의미론, 신원 암호학, 검증 가능 시스템에 대한 이해. 강력한 실증입니다.

기술 스택

# 핵심
fastapi              # REST API 백엔드
fhir.resources       # FHIR Python 라이브러리 (Patient, Consent, Observation)
cryptography         # ECDSA 서명, SHA-256 해싱
pymerkle             # Merkle Tree 구현
sqlalchemy + sqlite  # 로컬 원장 시뮬레이션

# 신원
didkit               # DID Document, Verifiable Credential 발급
# (또는 did:key를 직접 구현 — 의외로 간단합니다)

# 데모 UI
streamlit            # 3분할 데모: 환자 / 병원 / 보험사

# 테스트
pytest

가짜 환자 데이터는 Synthea로 생성합니다. 현실적인 FHIR 형식 가상 의료 기록을 만들어 주는 오픈소스예요. 명령어 하나로 환자 10명, 각자 30년치 진료 기록을 받을 수 있어요 — 실제 데이터가 아니라 법적 리스크 0.

4주 빌드 일정

Week 1 — FHIR 기본기

  • Synthea로 가상 환자 10명 생성
  • fhir.resources로 Patient, Observation, Condition, Consent 리소스 파싱
  • FastAPI 엔드포인트 구축: GET /patients, GET /patients/{id}/observations, POST /consents
  • 산출물: 작동하는 FHIR CRUD API + Postman 컬렉션

Week 2 — 동의 원장과 Merkle Tree

  • 동의 발급 구현: 환자가 ECDSA로 서명, 시스템이 해시 생성·저장
  • 시간 단위 Merkle Tree 커밋: 해시들 묶고, 루트 계산, ledger 테이블에 루트 저장
  • 검증 엔드포인트: 동의가 주어지면 Merkle proof 반환, 저장된 루트와 대조 검증
  • 산출물: 위변조 감지 가능한 동의 시스템 + 단위 테스트

Week 3 — DID와 검증 가능 자격증명

  • 각 환자에게 did:key 발급 (가장 간단한 DID 메소드, 공개키에서 직접 생성)
  • 동의 기록을 W3C Verifiable Credential로 래핑
  • 검증자 측 검증 구현: VC 서명 확인, 발급자 DID 검증, 만료 확인
  • 산출물: 본인 서버 없이도 작동하는 휴대 가능한 자기완결적 동의 자격증명

Week 4 — 데모와 문서화

  • 3분할 Streamlit UI: 환자(동의 발급), 병원(요청 확인), 보험사(받은 데이터 검증)
  • 보험금 청구 시나리오를 3분 데모 영상으로 녹화
  • 종합 README 작성: 아키텍처 다이어그램, 시퀀스 다이어그램
  • 블로그 포스트 1편 발행 (영문): “Building a HIPAA-friendly Consent Ledger with FHIR and DIDs in Python”

입문자를 위한 더 작은 버전

4주가 부담스러우면 2주짜리 미니 버전부터: FHIR Hash Notary.

CLI 도구 하나로:

  • 입력: FHIR JSON 파일
  • 처리: SHA-256 해시 + RFC 3161 타임스탬프 추가 + ECDSA 서명
  • 출력: “공증서(notary token)” JSON 파일
  • 별도 verify 명령: 토큰을 원본과 대조해 검증

전체 시스템 복잡도 없이 암호학적 요소와 FHIR 파싱을 익힐 수 있어요. 저녁 시간으로 2주. 재미있으면 Consent Vault로 확장하면 됩니다.

오늘 당장

오늘 시작할 수 있어요:

# 1. Synthea로 가짜 환자 데이터 생성 (자바 필요)
git clone https://github.com/synthetichealth/synthea
cd synthea && ./run_synthea -p 10 Massachusetts

# 2. 결과물 확인
ls output/fhir/

# 3. Python 환경 설정
pip install fhir.resources fastapi pymerkle cryptography uvicorn

첫 번째로 할 일 — 유일하게 첫 번째로 해야 할 일 — 은 Synthea 출력 JSON 하나를 Python으로 로드해서 환자의 전체 처방 이력을 출력해 보는 겁니다. 30분에서 한 시간이면 됩니다. 그 한 번의 연습이 어떤 튜토리얼보다 FHIR을 더 잘 가르쳐 줄 거예요. 직접 구조와 씨름해야 하니까요.

그 다음부터는 프로젝트가 자연스럽게 풀립니다.

왜 이게 중요한가

새로운 기술 영역을 배울 때 “모든 걸” 배우려는 유혹이 있습니다 — 모든 튜토리얼 읽고, 모든 영상 보고. 그 길은 영원한 학생 신분으로 가지, 취업으로는 안 갑니다.

지름길은 구체적인 것 하나를 잘 만들고 그것에 대해 쓰는 것입니다. 제대로 된 테스트와 깔끔한 코드, 데모 영상, 사려 깊은 블로그 포스트가 있는 작동하는 FHIR Consent Vault 하나가 10개 기술 영역에 걸친 반쯤 완성된 프로젝트 10개보다 포트폴리오에서 더 가치 있습니다.

이걸 출시하면 진짜로 드문 걸 갖게 됩니다 — Java가 지배하는 표준 영역의 Python 전문성을, 실제 기업이 풀려고 하는 문제에 적용한 결과물.

이걸로 프리랜서 일은 시작할 수 있어요.


다음 편 예고: Python으로 뭔가 만들기 시작하면 Solidity와 Rust 얘기를 듣게 됩니다. Python 개발자는 어느 쪽을 배워야 하고, 그 선택이 시급에 어떤 차이를 만드나? Part 2에서 다룹니다.


ChainLab이 씁니다 — 세상을 잇는 체인. 실제 세계를 위한 블록체인 인프라를 만듭니다. chainlab.dev

Recent Posts

블록체인이 진짜 파는 것: “나는 못 고친다”

체인 위의 데이터 — 3부작 중 3편 · ChainLab 앞의 두 편은 배관에 관한 것이었습니다…

2개월 ago

데이터를 소비하는 것이 스마트컨트랙트일 때

체인 위의 데이터 — 3부작 중 2편 · ChainLab 1편에서 우리는 하나의 재정의에 도달했습니다. 블록체인은…

2개월 ago

무료 데이터를 블록체인에 얹어 판다는 것

체인 위의 데이터 — 3부작 중 1편 · ChainLab 솔깃한 아이디어가 하나 있습니다. 부동산 실거래가…

2개월 ago

한국에선 왜 아직? — 규제 이야기, 쉽게 (5/5)

기술은 세계 최고 수준인데, 왜 우리나라에선 AI 결제가 아직 잘 안 굴러갈까요? 답은 '실력'이 아니라…

2개월 ago

에스크로 — 돈을 안전하게 맡기는 금고, 그런데 왜 어려울까 (4/5)

중고거래 안전결제, 다들 써보셨죠? AI 결제에도 이게 필요합니다. 문제는, 생각보다 훨씬 까다롭다는 거예요. 중고거래를 떠올려…

2개월 ago

AP2 & MPP — ‘미리 허락받는’ 결제 vs ‘탭 열어두는’ 결제 (3/5)

앞 편의 x402가 자판기였다면, 이번 두 방식은 '용돈 한도'와 '술집 외상장부'에 가깝습니다. 앞 편 복습:…

2개월 ago