# 고객 포털에서 활성화


고객이 앱에서 라이센스 활성화를 시작하면 해당 앱의 고객 포털로 이동해 기기를 승인할 수 있어요. 앱은 고객 비밀번호를 보관하지 않고, SDK가 승인 결과를 받아 권한을 확인해요.

이 가이드는 브라우저 승인, 앱의 결과 수신과 다른 기기로 이전하는 흐름을 설명해요. 코드를 먼저 실행하려면 [언어별 SDK 가이드](/sdk/node/)를 사용하세요.

## 1. 앱에서 활성화 요청을 만드세요

`ActivationClient.start()` 또는 언어별 대응 메서드를 호출하세요. SDK는 설치 정보를 담은 요청을 서버에 등록하고 `portalUrl`과 `requestId`를 반환해요.

`portalUrl`을 시스템 브라우저로 여세요. 고객 로그인 화면은 요청의 제품을 서버에서 조회해 이름과 로고를 표시해요. 요청 번호는 공개 정보지만 결과 수신 비밀과 설치 자격증명은 앱의 개인 상태 디렉터리에 보관해요.

요청 등록에 실패하면 API 주소와 연결 상태를 확인하세요. 포털 주소를 API 주소에 넣거나 매번 상태 디렉터리를 바꾸면 정상적인 설치를 이어갈 수 없어요.

## 2. 고객이 사용할 라이센스를 선택하게 하세요

고객은 포털에서 자신의 계정으로 로그인해요. 벤더·운영자 계정은 고객 승인에 사용할 수 없어요. 해당 앱에 소유한 라이센스가 없다면 구매 키를 등록한 뒤 다시 선택하세요.

포털에서 라이센스와 기기 이름을 확인하고 **이 기기 활성화**를 누르세요. 확인창에서 승인하면 서버가 이 기기에 등록을 예약하고 활성화 응답을 발급해요. 라이센스당 활성 등록은 한 개예요.

이미 다른 기기가 등록되어 있으면 자동으로 등록을 비우지 않아요. 포털이 이전 요청을 안내하며, 아래의 **다른 기기로 이전하기** 절차를 따릅니다.

## 3. 앱에서 승인 결과를 받아 적용하세요

앱은 `poll()` 또는 언어별 대응 메서드를 3초 이상의 간격으로 호출해요. 결과에 따라 다음 행동을 구분하세요.

| 상태 | 의미 | 앱의 동작 |
|---|---|---|
| `pending` | 아직 고객 승인이나 벤더 검토가 끝나지 않았어요. | 승인 화면으로 돌아갈 수 있게 안내하고 기다리세요. |
| `applied`와 유효한 `result` | 서명된 응답을 받아 기기에서 적용·검증했어요. | 현재 기능 권한을 확인하세요. |
| `application_failed` | 응답은 받았지만 기기에서 적용 검증에 실패했어요. | `result.code`에 맞는 오류를 보여주고 기능을 열지 마세요. |

포털의 발급됨과 기기의 적용 확인됨은 별도예요. 연결된 SDK의 적용 확인을 받으면 포털 상태도 바뀌어요. 응답 발급만으로 실제 사용을 시작했다고 판단하지 마세요.

## 4. 실행 중에도 권한을 확인하세요

앱의 기능을 실행하기 직전과 실행 중 적절한 주기에 `validate()`를 호출하세요. `valid=true`와 필요한 기능값을 함께 확인해야 해요. 예를 들어 CSV 내보내기는 `demo_export=true`가 필요해요.

연결 기반 등록은 서버가 서명한 캐시와 통신 유예를 사용할 수 있어요. 통신 장애 유예는 마지막 정상 검증부터 계산하고, 라이센스 만료 유예는 이용권의 만료일부터 계산해요. 첫 연결에 성공한 적이 없는 설치에는 통신 유예를 적용하지 않아요.

정지·폐기·만료·서명 오류는 통신 장애가 아니에요. 명시적 거절을 받은 뒤 네트워크가 끊겨도 이전 허용 결과로 덮지 마세요.

## 같은 기기에서 복구하기

상태 디렉터리와 보호 키가 남아 있다면 같은 기기의 요청을 다시 사용하거나 새 요청으로 복구할 수 있어요. Linux의 신뢰 하드웨어 식별, Windows의 플랫폼 키 저장소, Mac의 기기 전용 보호 키 핸들은 보존 방식이 달라요. 자세한 조건은 [기기 식별과 복구](/guides/hwid/)를 확인하세요.

기기 이름이나 새로운 소프트웨어 설치 ID만으로 원래 장비라고 증명하지는 않아요. 키를 복구할 수 없다면 이전 요청이 필요해요.

## 다른 기기로 이전하기

1. 새 기기의 앱에서 활성화 요청을 만들어요.
2. 고객 포털에서 기존 라이센스를 선택하고 이전 사유를 입력해요.
3. 벤더는 제품의 **기기 이전** 탭에서 사유와 기존 등록을 확인해요.
4. 기존 오프라인 이용권·캐시가 남을 수 있음을 확인하고 검토 사유와 함께 승인하거나 거절해요.
5. 승인되면 해당 요청의 새 기기에만 응답을 발급해요. 앱은 polling 또는 파일 가져오기로 적용해요.

승인 대기 중 원래 등록이 바뀌면 오래된 요청을 그대로 승인하지 않아요. 변경된 상황에 맞는 새 요청으로 다시 검토하세요. 요청·결정·발급·적용 확인은 감사기록으로 남아요.

이전 승인은 기존 오프라인 기기의 사용 종료 증명이 아니에요. 완전히 연결되지 않은 기기에 발급된 이용권은 즉시 원격 무효화할 수 없어요.

[파일을 옮겨 활성화하기](/guides/activation-offline/) · [실제 기능 허용·거부 검증하기](/guides/integration-checks/)
