Zero-Knowledge(영지식 증명)을 TypeScript 기반으로 구현할 수 있다면?
여러분 모두 개인정보를 다루게 되는 서비스를 한번쯤은 개발하신 적 있으텐데, 설계 과정에서 이런 고민을 했던 경험이 존재할 겁니다.
“사용자의 생년월일을 저장하지 않고도 성인 여부를 검증할 수 있을까?”
“민감한 정보를 서버에 넘기지 않고도 특정 조건을 만족한다는 사실만 증명할 수 있을까?”
“데이터는 숨기면서, 검증은 누구나 할 수 있게 만들 수 있을까?”
일반적인 Web2 서비스에서는 보통 검증을 위해 데이터를 직접 받아야 합니다.
나이 인증을 하려면 생년월일이나 신분증 정보를 받고, 자격을 확인하려면 증명서나 개인정보를 받고,권한을 판단하려면 서버가 사용자의 상태를 직접 알고 있어야 합니다.
그런데 이 방식은 늘 부담이 있습니다.
개발자는 더 많은 개인정보를 보관해야 하고, 사용자는 더 많은 정보를 서비스에 맡겨야 하며, 서비스가 커질수록 보안과 컴플라이언스 부담도 함께 커집니다.
→ 여기서 등장하는 개념이 Zero-Knowledge Proof, 흔히 말하는 영지식 증명입니다.
1. 영지식 증명이란?

영지식 증명은 간단히 말하면, 어떤 사실이 참이라는 것은 증명하지만, 그 사실을 증명하는 데 사용된 원본 데이터는 공개하지 않는 기술입니다.
예를 들어보겠습니다.
사용자가 “나는 20세 이상이다”라는 사실을 증명해야 한다고 해보겠습니다. 기존 방식에서는 보통 생년월일, 신분증, 본인인증 결과 같은 데이터를 서비스가 직접 받습니다.
하지만 영지식 증명을 사용하면 사용자는 자신의 정확한 생년월일을 공개하지 않고도,
“나는 20세 이상이라는 조건을 만족한다”
라는 사실만 증명할 수 있습니다.
또 다른 예시도 가능합니다.
비밀번호를 직접 보내지 않고, 비밀번호를 알고 있다는 사실만 증명하기
실제 연봉을 공개하지 않고, 특정 소득 기준을 넘는다는 사실만 증명하기
지갑 주소나 거래 내역 전체를 공개하지 않고, 특정 조건을 만족한다는 사실만 증명하기
내부 데이터를 공개하지 않고, 계산 결과가 올바르다는 사실만 증명하기
→ 영지식 증명의 핵심은 “데이터 공개”와 “검증 가능성”을 분리한다는 점입니다.
2. 블록체인과는 무슨 관계가 있을까?

마크애니의 ‘영지식증명’ 활용 블록체인 전자계약. 출처: 블록미디어
블록체인은 기본적으로 검증 가능성이 강한 시스템입니다. 누가 어떤 트랜잭션을 보냈는지, 어떤 상태가 변경되었는지, 스마트 컨트랙트가 어떤 규칙에 따라 실행되었는지를 네트워크 참여자들이 함께 검증할 수 있습니다.
Web2 서비스에서는 서버 내부에서 처리되는 로직과 데이터 변경을 사용자가 직접 확인하기 어렵지만, 블록체인에서는 그 과정을 더 공개적이고 검증 가능한 방식으로 다룰 수 있습니다.
다만 이 장점은 동시에 단점이 되기도 합니다. Web2에서는 서버 안에 데이터를 숨길 수 있지만, 사용자는 서버가 정말 올바르게 처리했는지 믿어야 합니다. 반대로 일반적인 블록체인은 누구나 검증할 수 있지만, 그 과정에서 너무 많은 데이터가 공개될 수 있습니다. 정리하면 다음과 같습니다.
Web2: 데이터는 숨길 수 있지만, 검증은 서버를 믿어야 한다.
일반적인 블록체인: 검증은 가능하지만, 데이터가 너무 많이 공개될 수 있다.
영지식 증명은 이 간극을 줄이기 위한 기술입니다. 원본 데이터는 숨기면서도, 특정 조건이 올바르게 충족되었다는 사실만 검증 가능하게 만드는 방식입니다. 그래서 ZK는 블록체인과 자주 함께 언급됩니다. 블록체인의 공개 검증성은 유지하면서도 개인정보나 민감한 비즈니스 데이터는 노출하지 않는 방향으로 확장할 수 있기 때문입니다.
3. ZK 구현의 높은 난이도
문제는 영지식 증명이 개념만큼 구현하기 쉽지는 않다는 점입니다. ZK를 공부하다 보면 circuit, constraint, witness, prover, verifier, proving key, verifying key, public input, private input 같은 용어들이 갑자기 등장합니다.
TypeScript, Node.js, API, DB, 프론트엔드 상태 관리, 인증 및 배포에 익숙한 Web2 개발자 입장에서는 꽤 낯설게 느껴질 수밖에 없습니다.
특히 ZK에서는 단순히 함수를 작성하고 true나 false를 반환하는 방식으로 문제를 바라보기 어렵습니다.
예를 들어 일반적인 TypeScript에서의 나이 인증은 아래와 같은 간단한 조건문으로 구현할 수 있습니다.
if (age >= 20) {
return true;
}하지만 ZK에서는 “사용자의 실제 age 값을 공개하지 않으면서도, age가 20 이상이라는 조건을 만족한다는 증명”을 만들어야 합니다. 즉, 로직을 작성하는 것을 넘어 이 조건을 수학적으로 증명 가능한 형태로 표현해야 하는 셈입니다.
그래서 많은 Web2 개발자들이 이 지점에서 진입장벽을 느낍니다.
“좋은 건 알겠는데, 이걸 실제 서비스 코드처럼 작성할 수 있을까?”, “매번 회로와 증명 시스템을 직접 다뤄야 하나?”, “TypeScript 개발자가 접근할 수 있는 방식은 없을까?” 같은 질문이 자연스럽게 나오게 됩니다. 그리고 바로 이 질문에서 Midnight이 꽤 흥미로운 선택지가 됩니다.
4. TypeScript로 ZK를 구현할 수 있다고?
정확히 말하면, 일반적인 TypeScript 코드가 그대로 ZK 회로가 되는 것은 아닙니다.
대신 Midnight에서는 Compact라는 스마트 컨트랙트 언어를 사용합니다.
Compact는 TypeScript/JavaScript 개발자가 비교적 익숙하게 느낄 수 있는 문법적 구조를 가지고 있고, Midnight의 개발 흐름에서는 Compact로 작성한 컨트랙트가 ZK circuit과 TypeScript API 등으로 연결됩니다.
즉, Web2 개발자 입장에서는 이런 흐름으로 이해하면 쉽습니다.
Compact로 프라이버시 로직을 작성하고,
TypeScript API를 통해 애플리케이션 코드와 연결한다.
중요한 점은 Midnight이 ZK를 “수학 논문 수준에서 직접 다루는 영역”으로만 두지 않고, 애플리케이션 개발자가 접근할 수 있는 개발 경험으로 끌어오려 한다는 점입니다.
물론 ZK 개념 자체를 완전히 몰라도 된다는 뜻은 아닙니다. private input, public state, proof, verifier 같은 개념은 이해해야 합니다.
하지만 모든 것을 밑바닥부터 직접 구현하는 방식과는 다릅니다.
Web2 개발자가 익숙한 방식으로 생각해보면, 아래의 개념으로 설명할 수 있습니다.
백엔드에서 비즈니스 로직을 작성하듯이 조건을 정의하고
프론트엔드/클라이언트에서 사용자 입력을 다루고
TypeScript API를 통해 컨트랙트와 상호작용하고
실제 검증은 ZK proof 기반으로 처리되는 구조
5. Midnight 소개

Midnight은 프라이버시 중심의 블록체인입니다.
일반적인 블록체인이 모든 데이터를 공개적으로 검증하는 방향에 가깝다면, Midnight은 ZK와 selective disclosure를 활용해 필요한 것은 검증 가능하게 만들고, 공개하지 않아도 되는 민감한 데이터는 숨기는 것을 목표로 합니다.
Web2 개발자 관점에서 보면 Midnight의 흥미로운 점은 “코인”이나 “투자”보다 오히려 애플리케이션 구조에 있습니다.
예를 들어 이런 서비스를 생각해볼 수 있습니다.
사용자의 개인정보를 직접 저장하지 않는 인증 서비스
자격 조건만 증명하는 멤버십 시스템
투표 내용은 숨기고 결과만 검증 가능한 투표 시스템
민감한 기업 데이터를 공개하지 않는 B2B 검증 시스템
게임에서 내부 로직이나 특정 값을 공개하지 않고 정당성을 검증하는 시스템
규제 준수 여부를 선택적으로 증명하는 서비스
개발자 입장에서 중요한 질문은 결국 이것입니다.
앞으로의 서비스에서도 정말 모든 데이터를 서버가 직접 들고 있어야 할까?
영지식 증명과 Midnight 같은 프라이버시 중심 블록체인은 이 질문에 대한 하나의 대안이 될 수 있습니다.
데이터를 무조건 수집하고 저장하는 방식이 아니라, 필요한 조건만 증명하고 원본 데이터는 숨기는 방식.
이런 구조가 가능해지면 개인정보 보호, 보안, 컴플라이언스, 사용자 신뢰 측면에서 꽤 다른 설계를 할 수 있습니다.
마무리
블록체인이라는 단어를 들으면 보통 코인, 지갑, 거래소부터 떠올리게 됩니다.
하지만 ZK 관점에서는 블록체인을 다음과 같은 인프라로 이해할 수 있습니다.
데이터를 모두 공개하는 공간이 아니라,원본 데이터는 숨긴 채 조건의 정당성을 검증하는 실행 환경
특히 TypeScript에 익숙한 Web2 개발자라면 Midnight의 Compact와 TypeScript API 흐름을 통해 ZK 기반 애플리케이션 개발을 한 번쯤 살펴볼 만합니다.
아직은 낯선 개념이 많지만, 방향성은 꽤 흥미롭습니다.
“개인정보를 덜 수집하면서도 검증 가능한 서비스”를 만들 수 있다면, ZK는 단순한 블록체인 기술을 넘어 Web2 서비스 아키텍처에도 영향을 줄 수 있다고 생각합니다.
Midnight, ZK, Compact/TypeScript 기반 개발에 관심 있는 분들은 아래 개발자 커뮤니티에 입장해 Midnight 개발을 시작해 보세요.
Midnight 한국 개발자 커뮤니티: https://t.me/+_w-zPLIZRGsyYjE1
댓글을 작성해보세요.