소프트웨어 라이선스 키란 무엇인가?
소프트웨어 라이선스 키란, 여러분 소프트웨어의 특정 설치본이 실행 권한을 가지고 있음을 증명하는 문자열로, 보통 구매·계정·특정 기기에 연결되어 있다. "설치 파일만 있으면 누구나 영원히 쓸 수 있다"를 "돈을 낸 사람만 쓸 수 있다"로 바꾸는 장치다. 키 자체는 보통 아무 의미가 없다 — SLK-7X9K-2MPQ-R4WT-BH3N처럼 무작위처럼 보이는 문자열일 뿐이며, 그 힘은 그것을 검증하는 대상, 즉 유효하고, (활성화 한도 이내로) 사용되었고, 올바른 제품에 연결되어 있음을 확인할 수 있는 서버에서 나온다. 아무도 검증하지 않는 키는 그냥 아무도 지키지 않는 문 앞의 비밀번호일 뿐이다.
라이선스 키는 실제로 어떻게 작동하나?
라이선스 키가 의미를 갖는 순간은 두 가지, 활성화와 검증이다. 활성화는 한 번만 일어난다 — 고객이 키를 입력하면 앱이 라이선스 서버를 호출하고, 서버는 키가 유효하고 기기 제한을 넘지 않았는지 확인한 뒤, 바로 이 기기(보통 하드웨어 지문을 통해)가 이제 활성화되었다고 기록한다. 검증은 그 이후 실행할 때마다 일어난다 — 앱은 서버를 다시 호출하거나, 더 나은 방법으로는 지난번 검증에 성공했을 때 로컬에 저장해둔 서명된 리스(lease)를 확인해서 활성화가 여전히 유효한지 확인하며, 이 덕분에 인터넷 연결 없이도 정해진 기간(보통 3~7일) 동안 오프라인에서 계속 작동할 수 있다. 서명 여부가 중요한 이유는, 파일에 저장된 단순한 로컬 플래그는 누구나 텍스트 편집기로 고칠 수 있지만, 암호학적으로 서명된 리스(현대의 표준은 Ed25519)는 네트워크 호출 없이도 진위를 검증할 수 있으면서도, 서버 밖으로 절대 나가지 않는 개인 키 없이는 위조할 수 없기 때문이다.
라이선스 키 vs 제품 키 vs 시리얼 키: 실제 차이는?
일상적으로는 계속 뒤섞여 쓰이지만, 유래가 다르고 사용하는 사람에 따라 의미도 다를 때가 있다:
라이선스 키
현대적이고 일반적인 용어 — 보통 계정이나 구매에 연결되어 있고, 실시간 서버와 대조 검증되며, 종종 취소가 가능하다. 오늘날 대부분의 SaaS와 인디 소프트웨어 라이선싱이 실제로 의미하는 것이 바로 이것이다.
제품 키
역사적으로 박스/리테일 소프트웨어(Windows, Office)에 쓰였다 — 설치 중 한 번 입력하는 키로, 보통 한 번만 검증되고 그 이후로는 거의 확인되지 않는다.
일련번호 / 시리얼 키
세 용어 중 가장 오래된 것 — 원래는 판매된 사본마다 부여되는 단순한 고유 식별자였고, 서버 측 검증이 아예 없는 경우가 많아서 그만큼 유출되고 공유되기 쉬웠다.
활성화 키
사실 별도의 범주라기보다는 — 보통 위 항목 중 하나를 가리키는 다른 이름일 뿐이며, 특히 첫 실행 시 사본을 잠금 해제/활성화하는 것을 지칭할 때 쓰인다.
라이선스 키의 종류
어떤 유형이 필요한지는 전적으로 어떻게 판매하는지, 누가 소프트웨어를 쓰는지에 달려 있다:
| Type | How it works | Best for |
|---|---|---|
| 단일 기기 고정(node-locked) | 키 하나에 기기 하나. 두 번째 기기에서 활성화를 시도하면 실패하거나 첫 번째 기기가 비활성화된다. | 개인에게 판매하는 데스크톱 앱 — 인디 소프트웨어에서 가장 흔한 모델. |
| 플로팅 / 좌석제 | 팀이 공유하는 N개의 동시 활성화 풀이며, 누군가 비활성화하거나 오프라인이 되면 자리가 하나 풀린다. | 개인이 아니라 팀 단위로 판매하는 B2B 툴. |
| 구독 / 기간 제한 | 결제 주기가 끝나면 기기와 무관하게 키(또는 그 뒤의 계정)가 더 이상 검증에 성공하지 않는다. | SaaS 및 반복 매출 제품 — Stripe 등과 자연스럽게 결합된다. |
| 체험판 키 | 첫 활성화 이후 정해진 기간(7/14/30일) 동안은 검증에 성공하다가 그 후 멈춘다 — 이는 유료 키와는 별개의 로직이지, 아무도 강제하지 않는 타이머가 달린 유료 키가 아니다. | 유료 제품을 그냥 내주지 않으면서 구매 전에 체험하게 하는 것. |
직접 라이선싱 시스템을 만들어야 할까, 서비스를 써야 할까?
직접 만들기
가능하고, 실제로 많은 개발자가 그렇게 한다 — 하지만 "그냥 키 하나 확인하는 것"은 어느새 키와 활성화를 추적하는 데이터베이스, 앱이 어디서든 호출할 수 있는 API, 키를 취소하는 수단(차지백, 사기, 환불은 실제로 일어난다), 그리고 재설치만으로는 초기화되지 않는 체험판 로직으로 불어난다. 이 중 어느 것도 앱 내부에만 안전하게 둘 수 없다 — 작정한 사용자라면 순전히 오프라인에서 이뤄지는 검사는 결국 패치로 무력화할 수 있기 때문이다. 이렇게 다 나열해 놓고 보면, 결국 진짜 제품도 아닌 기능 하나를 위해 여러분이 앞으로 영원히 소유하게 될 작은 백엔드 서비스 — 호스팅, 가동시간, 유지보수 — 라는 걸 알게 된다.
라이선싱 서비스 사용하기
호스팅형 라이선싱 API(SublimeKeys가 한 예다)는 activate/verify/deactivate 엔드포인트, 판매마다 수동 또는 자동으로 키를 발급할 수 있는 대시보드, 서명된 리스를 통한 오프라인 검증, 취소 기능을 제공하며, 여러분이 아무것도 직접 호스팅할 필요가 없다. 트레이드오프는 단순하다 — 라이선싱 코드베이스를 다시는 건드리지 않는 대가로 적은 반복 비용(대개 무료 요금제로 시작 가능)을 지불하는 것. 대부분의 인디 개발자에게는 이 특정한 바퀴를 재발명하는 것보다 진짜 제품에 시간을 쓰는 쪽이 더 가치 있다.
인디 개발자들이 흔히 저지르는 라이선싱 실수
설치 시 딱 한 번만 키를 확인하는 것
지속적인 검증이 없으면, 공유된 키 하나와 유출된 설치 파일 하나만으로도 영원히 무제한 무료 복사본이 가능해진다.
오프라인 대책이 없는 것
온라인에서만 검증하는 시스템은 와이파이가 끊기는 순간 돈을 낸 고객까지 막아버려서, 보안이 아니라 지원 티켓만 만들어낸다.
서명되지 않은 로컬 라이선스 파일
디스크에 {"licensed": true}라고 적힌 JSON 파일은 라이선스 검사가 아니다 — 그건 그냥 메모장으로 고칠 수 있는 제안일 뿐이다.
취소 경로가 없는 것
특정 키를 무효화할 방법이 없으면, 차지백 한 번이나 키 유출 한 번을 깔끔하게 되돌릴 수 없다.
체험판을 상태가 아니라 타이머로 다루는 것
"설치 후 경과일"만 확인하는 체험판은 재설치하면 초기화된다. 진짜 체험판 로직은 서버 쪽에 있어야 한다.
자주 묻는 질문
무료 앱에도 라이선스 키 시스템이 필요한가요?
아니요 — 라이선스 키는 유료 접근을 제한하기 위해 존재하는 것입니다. 무료 앱에는 확인할 게 없습니다.
라이선스 키도 크랙될 수 있나요?
사용자 기기에서만 완전히 실행되는 검사는, 충분히 작정한 사람이라면 결국 패치로 제거할 수 있습니다. 현실적인 목표는 이를 불가능하게 만드는 것이 아니라, 가벼운 공유에 필요한 수준을 넘어서는 수고를 요구하면서, 동시에 돈을 낸 고객에게는 매끄럽고 방해받지 않는 경험을 주는 것입니다.
활성화와 검증의 차이는 무엇인가요?
활성화는 키가 기기에서 처음 사용될 때 딱 한 번 일어납니다. 검증은 그 이후 실행할 때마다 일어나며, 활성화가 여전히 유효한지 확인합니다.
라이선스 키가 인터넷 연결 없이도 작동할 수 있나요?
시스템이 오프라인 검증을 지원한다면 가능합니다 — 보통 마지막으로 온라인 검증에 성공했을 때 로컬에 저장해둔 암호학적으로 서명된 리스를 통해서이며, 무기한이 아니라 정해진 기간(일 단위) 동안만 유효합니다.
라이선스 키는 DRM과 같은 건가요?
관련은 있지만 동일하지는 않습니다 — DRM은 보통 더 깊은 기술적 제한(암호화, 하드웨어 잠금)을 의미합니다. 라이선스 키 시스템은 DRM이 흔히 수반하는 나머지 요소들 없이도, 실행 시 검사 정도로 가볍게 만들 수 있습니다.
About
Patrick Chen — Sublimearts.io를 만든 인디 개발자. ReelNox Studio를 위해 바로 이 라이선스 검사 코드를 직접 작성한 뒤, 유료 소프트웨어를 파는 다른 모든 인디 개발자들이 똑같은 문제를 처음부터 다시 풀고 있다는 걸 깨닫고 SublimeKeys를 만들었다.