인증 정보 관리
이 플러그인의 설치 단계와 전체 마크다운 가이드를 포함한 설정 프롬프트를 복사하세요.
iOS 및 Android 빌드 인증서를 로컬로 관리하여 편리한 클라우드 빌드를 관리하세요.
Overview
'Overview'라는 제목의 섹션Capgo CLI에서 빌드 인증서를 저장합니다. 컴퓨터에 저장 — Capgo의 서버에 저장하지 않습니다. 기본적으로 모든 프로젝트에 공유되는 하나의 전역 파일에 저장됩니다. ~/.capgo-credentials/credentials.json프로젝트당 별도로 저장 --local 을 유지하기 위해 __CAPGO_KEEP_0__를 전달합니다. __CAPGO_KEEP_1__ .capgo-credentials.json Capgo
명령어
명령어인증 정보 관리
인증 정보 관리저장된 인증 정보와 작업하기 가장 빠른 방법은 인터랙티브 매니저입니다. 인터랙티브 매니저는 TUI(터미널 사용자 인터페이스)를 열어 저장된 인증 정보를浏览할 수 있고, 앱 및 플랫폼별로 구성된 것을 확인할 수 있으며, CI/CD에 적합한 파일을 내보내거나 플랫폼의 인증 정보를 삭제할 수 있습니다. build init 터미널 창 .env 클립보드에 복사
bunx @capgo/cli@latest build credentials manage| 설명 | 설명 |
|---|---|
--appId <appId> | 앱 관리 (생략 시 선택하도록 유도) |
--platform <ios|android> | 플랫폼 관리 (생략 시 선택하도록 유도) |
--local | 프로젝트별로 사용 .capgo-credentials.json global 파일 대신 |
일회성 스크립트 명령어를 선호하십니까? 아래의 개별 명령어를 사용하세요.
인증 정보 저장
인증 정보 저장자동 사용을 위해 로컬에 빌드 인증 정보를 저장하세요:
bunx @capgo/cli@latest build credentials save --platform <ios|android> [options]인증 정보 업데이트
인증 정보 업데이트__CAPGO_KEEP_0__:
bunx @capgo/cli@latest build credentials update --platform <ios|android> [options]__CAPGO_KEEP_3__: update __CAPGO_KEEP_4__: existing credentials을 부분적으로 업데이트하려면 다시 모든 것을 제공하지 않아도 됩니다: __CAPGO_KEEP_5__: --overwrite-ios-provisioning-map.
명령어를 사용하여
bunx @capgo/cli@latest build credentials update \ --platform ios \ --ios-provisioning-profile "com.example.app.widget=./widget_profile.mobileprovision"기존 인증서에 확장 프로파일을 추가하는 예: save __CAPGO_KEEP_7__:
인증 정보 목록
인증 정보 목록 섹션현재 저장된 인증 정보 (비밀번호는 가려져 있습니다)를 보려면:
bunx @capgo/cli@latest build credentials list
# List credentials for a specific appbunx @capgo/cli@latest build credentials list --appId com.example.app인증 정보 삭제
인증 정보 삭제 섹션로컬 머신에서 저장된 인증 정보를 삭제합니다:
# Clear all credentialsbunx @capgo/cli@latest build credentials clear
# Clear credentials for a specific app + platformbunx @capgo/cli@latest build credentials clear --appId com.example.app --platform ios인증 정보 이전
인증 정보 이전 섹션__CAPGO_KEEP_0__을 새로운 다중 목표 형식으로 변환하세요.:
bunx @capgo/cli@latest build credentials migrate --platform ios__CAPGO_KEEP_0__ 명령은 오래된 BUILD_PROVISION_PROFILE_BASE64 __CAPGO_KEEP_0__,__CAPGO_KEEP_0__으로 변환하고, 그들을 제거합니다. 자세한 내용은 CAPGO_IOS_PROVISIONING_MAP__CAPGO_KEEP_0__에서 __CAPGO_KEEP_0__로의 마이그레이션 을 참조하세요. __CAPGO_KEEP_0__ iOS 자격 증명 저장
__CAPGO_KEEP_0__ 제목 ‘__CAPGO_KEEP_0__ iOS 자격 증명 저장’
__CAPGO_KEEP_0__예제 완료
예제 완료bunx @capgo/cli@latest build credentials save \ --platform ios \ --certificate ./cert.p12 \ --p12-password "YourP12Password" \ --ios-provisioning-profile "com.example.app=./profile.mobileprovision" \ --apple-key ./AuthKey_ABC1234567.p8 \ --apple-key-id "ABC1234567" \ --apple-issuer-id "00000000-0000-0000-0000-000000000000" \ --apple-team-id "TEAM123456"iOS 옵션
iOS 옵션| 옵션 | 설명 | 필수 |
|---|---|---|
--certificate <path> | __CAPGO_KEEP_0__ 인증서 파일 경로 | 예 (릴리즈) |
--p12-password <password> | __CAPGO_KEEP_0__ 인증서 파일의 암호 | 예 (릴리즈) |
--ios-provisioning-profile <mapping> | __CAPGO_KEEP_0__ 프로비전 프로파일 매핑 (,). 여러 대상 앱에 대해 반복 가능합니다. 단일 프로파일이 있고 __CAPGO_KEEP_0__ bundleId 접두사가 없는 경우, __CAPGO_KEEP_0__ 프로파일에서 자동으로 추론됩니다.bundleId=path). Repeatable for multi-target apps. If only one profile and no bundleId prefix, CLI auto-infers from the profile. | __CAPGO_KEEP_0__ App Store Connect .p8 키 경로 |
--apple-key <path> | Path to App Store Connect API .p8 key | __CAPGO_KEEP_0__ App Store Connect 키 ID |
--apple-key-id <id> | App Store Connect API Key ID | __CAPGO_KEEP_0__ |
--apple-issuer-id <id> | App Store Connect API 발급자 ID (UUID) | See note¹ |
--apple-team-id <id> | App Store Connect 팀 ID | Yes |
--apple-id <email> | 애플 ID 이메일 (앱별 암호 업로드 대안으로 API 키 사용) | See note² |
--apple-app-specific-password <password> | 앱별 암호 (xxxx-xxxx-xxxx-xxxx) | See note² |
--apple-app-id <id> | 숫자 App Store Connect 앱 ID (예 1234567890) | See note² |
--ios-distribution <mode> | 배포 모드: app_store (기본값) 또는 ad_hoc | No |
--output-upload | Capgo 다운로드 링크를 시간 제한된 빌드 아티팩트에 활성화하세요. | No (기본값: false) |
--output-retention <seconds> | 빌드 출력을 얼마나 유지할 것인가 (예: 3600s) | No (기본값: 3600s) |
--skip-build-number-bump | 자동 빌드 번호 증가를 생략합니다. | No |
iOS 인증서 및 프로비전 프로파일이 저장되는 항목입니다.
Section titled “What Gets Stored”iOS 인증서 및 프로비전 프로파일을 저장할 때 CLI:
- 인증서와 프로비전 프로파일 파일을 읽습니다.
- base64 인코딩으로 변환합니다.
- 저장합니다.
~/.capgo-credentials/credentials.json(또는.capgo-credentials.json__CAPGO_KEEP_0__--local) - __CAPGO_KEEP_0__
__CAPGO_KEEP_1__
{ "ios": { "BUILD_CERTIFICATE_BASE64": "...", "CAPGO_IOS_PROVISIONING_MAP": "{\"com.example.app\":{\"profile\":\"...\",\"name\":\"match AppStore com.example.app\"}}", "APPLE_KEY_CONTENT": "...", "P12_PASSWORD": "...", "APPLE_KEY_ID": "ABC1234567", "APPLE_ISSUER_ID": "...", "APP_STORE_CONNECT_TEAM_ID": "TEAM123456", "CAPGO_IOS_DISTRIBUTION": "app_store" }}__CAPGO_KEEP_3__
__CAPGO_KEEP_4__완전한 예제
완전한 예제 섹션bunx @capgo/cli@latest build credentials save \ --platform android \ --keystore ./release.keystore \ --keystore-alias "my-key-alias" \ --keystore-key-password "KeyPassword123" \ --keystore-store-password "StorePassword123" \ --play-config ./play-store-service-account.json안드로이드 옵션
안드로이드 옵션 섹션| 옵션 | 설명 | 필수 |
|---|---|---|
--keystore <path> | .keystore 또는 .jks 파일의 경로 | 예 (릴리즈) |
--keystore-alias <alias> | 키 별칭 (keystore) | Yes (release) |
--keystore-key-password <password> | __CAPGO_KEEP_0__의 비밀번호 | Yes (release) |
--keystore-store-password <password> | 키 별칭의 키 스토어 비밀번호 | Yes (release) |
--play-config <path> | Play Store 서비스 계정 JSON의 경로 | Yes (submission) |
저장되는 것들
저장되는 것들에 대한 섹션안드로이드 인증서를 저장할 때 CLI:
- 키 스토어와 서비스 계정 JSON 파일을 읽어 base64 인코딩으로 변환합니다.
- What Gets Stored
- __CAPGO_KEEP_0__을 저장합니다.
~/.capgo-credentials/credentials.json(또는.capgo-credentials.json와--local) - 비밀번호와 별칭을 평문으로 저장합니다 (로컬 파일만).
저장된 파일 구조:
{ "android": { "ANDROID_KEYSTORE_FILE": "...", "PLAY_CONFIG_JSON": "...", "KEYSTORE_KEY_ALIAS": "my-key-alias", "KEYSTORE_KEY_PASSWORD": "...", "KEYSTORE_STORE_PASSWORD": "..." }}저장된 인증 정보를 사용합니다.
인증 정보를 사용하는 방법절에 제목이 있습니다 “인증 정보를 사용하는 방법”
# Credentials automatically loaded from ~/.capgo-credentials/credentials.jsonbunx @capgo/cli@latest build request com.example.app --platform ios클립보드에 복사합니다.
# Environment variables take precedence over saved credentialsBUILD_CERTIFICATE_BASE64="..." \P12_PASSWORD="different-password" \bunx @capgo/cli@latest build request com.example.app --platform ios우선 순위:
- 환경 변수 (가장 높은 우선 순위)
- 저장된 자격 증명 (
~/.capgo-credentials/credentials.json, 또는 로컬.capgo-credentials.json) - 자격 증명이 없는 경우 (가장 낮은 우선 순위)
저장된 자격 증명을 보는 중
Section titled “저장된 자격 증명을 보는 중”저장된 자격 증명 목록:
bunx @capgo/cli@latest build credentials list예시 출력:
📋 Saved Build Credentials:
iOS Credentials: ✓ Certificate (base64) ✓ Provisioning Map (JSON) ✓ Apple Key Content (base64) ✓ P12 Password: ******** ✓ Apple Key ID: ABC1234567 ✓ Apple Issuer ID: 00000000-0000-0000-0000-000000000000 ✓ Team ID: TEAM123456
Android Credentials: ✓ Keystore (base64) ✓ Play Store Config (base64) ✓ Keystore Alias: my-key-alias ✓ Key Password: ******** ✓ Store Password: ********
Location: ~/.capgo-credentials/credentials.json
🔒 These credentials are stored locally on your machine only. When building, they are sent to Capgo but NEVER stored there. They are auto-deleted after build completion.보안 최적화 방법
보안 최적화 방법 섹션로컬 스토리지 보안
로컬 스토리지 보안 섹션-
파일 권한
터미널 창 # Global credentials directory + filechmod 700 ~/.capgo-credentialschmod 600 ~/.capgo-credentials/credentials.json# Local (per-project) credentials, if you use --localchmod 600 .capgo-credentials.json -
계정 정보는 절대 커밋하지 마세요
터미널 창 # Ignore the per-project credentials file (used with --local)echo ".capgo-credentials.json" >> .gitignore전역 파일은 홈 디렉토리 내에 repo 외부에 위치합니다.
-
분리된 인증 정보
- 로컬 개발과 CI/CD를 위한 별도의 인증 정보를 사용하세요.
- 인증 정보를 정기적으로轮전하세요.
- 팀원들 사이에 인증 정보를 공유하지 마세요.
CI/CD 사용
CI/CD 사용CI/CD 환경에서 환경 변수를 저장된 인증 정보보다 선호하세요. 준비된 상태로 내보내세요.
(권장) .env __CAPGO_KEEP_0__
Export 하기 쉬운 .env (권장) 섹션 제목수동으로 각 자격 증명 파일을 base64로 인코딩하는 대신 (아래 참조 ),파일을 생성해 주세요: build credentials manage 터미널 창
bunx @capgo/cli@latest build credentials manage# pick your app → choose "Export to .env")을 생성합니다. 기본적으로 두 플랫폼이 결합되어 있습니다. 하나만으로 제한하려면 .env.capgo.<appId>.<platform> 또는 0600을 추가하세요. --platform ios 권한 --platform android 을 추가하세요.
환경 변수 전체 참조
환경 변수 전체 참조CLI는 다음 환경 변수를 읽어 인증 정보를 읽습니다:
iOS 인증 정보:
| 변수 | 설명 | 형식 | 필수 |
|---|---|---|---|
BUILD_CERTIFICATE_BASE64 | P12/PKCS12 인증서로 code에 서명하는 것 | Base64 | 예 (릴리즈) |
CAPGO_IOS_PROVISIONING_MAP | 앱 번들 ID를 프로비저닝 프로파일 데이터로 매핑한 JSON 객체 | JSON 문자열 | 예 (릴리즈) |
P12_PASSWORD | P12 인증서의 암호 | 평문 | 선택 사항 |
APPLE_KEY_ID | 앱 스토어 연결 API 키 ID | 문자열 (예: 'ABC1234567') | 참고 ¹을 참조하십시오 |
APPLE_ISSUER_ID | 애플 스토어 연결 API 발급자 ID | UUID 문자열 | 참고사항 1을 참조하십시오 |
APPLE_KEY_CONTENT | 애플 스토어 연결 API 키 (.p8 파일 내용) | Base64 | 참고사항 1을 참조하십시오 |
APP_STORE_CONNECT_TEAM_ID | 애플 개발자 팀 ID | 문자열 (예: "XXXXXXXXXX") | 예 |
CAPGO_IOS_DISTRIBUTION | 배포 모드: app_store (기본값) 또는 ad_hoc | 문자열 | No |
안드로이드 인증 정보:
| 변수 | 설명 | 형식 | 필수 |
|---|---|---|---|
ANDROID_KEYSTORE_FILE | APK/AAB을 위한 키스토어 파일 | Base64 | Yes (release) |
KEYSTORE_KEY_ALIAS | 키스토어 내의 키 별칭 | 문자열 | Yes (release) |
KEYSTORE_KEY_PASSWORD | __CAPGO_KEEP_0__ 키 별칭의 비밀번호 | 평문 | Yes* |
KEYSTORE_STORE_PASSWORD | __CAPGO_KEEP_0__ 키 스토어 파일의 비밀번호 | 평문 | Yes* |
PLAY_CONFIG_JSON | Google Play 서비스 계정 JSON | Base64 | Yes (submission) |
*만 비밀번호 하나가 제공되면, 두 개 모두에 사용됩니다. KEYSTORE_KEY_PASSWORD 그리고 KEYSTORE_STORE_PASSWORD.
GitHub 액션 예시
GitHub 액션 예시 제목name: Cloud Build
on: push: branches: [main]
jobs: build-ios: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 - run: bun install - run: bunx @capgo/cli@latest build request com.example.app --platform ios env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
build-android: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 - run: bun install - run: bunx @capgo/cli@latest build request com.example.app --platform android env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}Base64 값 준비 중
__CAPGO_KEEP_0__ 제목: Base64 값 준비CI/CD 비밀을 위해 자격 증명 파일을 Base64로 변환하려면:
# iOS Certificate (.p12)base64 -i certificate.p12 | tr -d '\n' > certificate_base64.txt
# iOS Provisioning Profiles — use the CLI to generate CAPGO_IOS_PROVISIONING_MAP:bunx @capgo/cli@latest build credentials save --platform ios \ --ios-provisioning-profile "com.example.app=./profile.mobileprovision" \ # ... other options# Then copy CAPGO_IOS_PROVISIONING_MAP from ~/.capgo-credentials/credentials.json to your CI secrets
# iOS App Store Connect Key (.p8)base64 -i AuthKey_XXXXXX.p8 | tr -d '\n' > apple_key_base64.txt
# Android Keystore (.keystore or .jks)base64 -i release.keystore | tr -d '\n' > keystore_base64.txt
# Google Play Service Account JSONbase64 -i play-store-service-account.json | tr -d '\n' > play_config_base64.txt환경 변수는 왜 더 안전한가?
환경 변수는 왜 더 안전한가? 섹션이 접근 방식은 더 안전합니다:
- CI/CD 플랫폼에서 비밀을 관리합니다
- 실행자에 비밀 파일이 없습니다
- 비밀을 쉽게轮换하고 접근 제어를 적용할 수 있습니다
- 비밀 사용 기록을 관리할 수 있습니다
비밀轮换
비밀轮换 섹션정기적으로 비밀을轮환하세요:
- iOS: 연간 새로운 인증서와 API 키를 생성하세요
- 안드로이드: 연간 키 스토어 비밀번호 변경
- 팀 구성 변경 후: 팀 구성원 떠나는 경우 회전
저장된 자격 증명 업데이트:
# Re-run save command with new credentialsbunx @capgo/cli@latest build credentials save --platform ios --certificate ./new-cert.p12 ...문제 해결
제목이 '문제 해결'인 섹션”No credentials found”
제목이 ''의 자격 증명이 없습니다'인 섹션빌드가 자격 증명이 없다고 말하는 경우:
-
__CAPGO_KEEP_0__을 확인합니다.:
__CAPGO_KEEP_1__ 창 bunx @capgo/cli@latest build credentials list -
__CAPGO_KEEP_0__이 없으면 __CAPGO_KEEP_0__을 저장합니다.:
__CAPGO_KEEP_1__ 창 bunx @capgo/cli@latest build credentials save --platform ios ... -
__CAPGO_KEEP_0__ 파일이 존재하는지 확인합니다.:
__CAPGO_KEEP_1__ 창 ls -la ~/.capgo-credentials/credentials.json # globalls -la .capgo-credentials.json # local (--local)
__CAPGO_KEEP_2__가 읽을 때 __CAPGO_KEEP_2__가 발생합니다.
__CAPGO_KEEP_2__ 제목 ‘__CAPGO_KEEP_2__가 읽을 때 __CAPGO_KEEP_2__가 발생합니다.’__CAPGO_KEEP_2__ 파일 권한을 수정합니다.
chmod 600 ~/.capgo-credentials/credentials.json # globalchmod 600 .capgo-credentials.json # local사용되지 않는 자격증명
사용되지 않는 자격증명 섹션정확한 플랫폼이 지정되었는지 확인하십시오:
# Make sure --platform matches saved credentialsbunx @capgo/cli@latest build request com.example.app --platform ios # Uses ios credentialsbunx @capgo/cli@latest build request com.example.app --platform android # Uses android credentials자격증명이 깨끗하고 다시 저장되도록 하십시오.
깨끗하고 다시 저장되도록 하십시오. 자격증명 섹션자격증명이 손상된 것처럼 보인다면:
# Clear all credentialsbunx @capgo/cli@latest build credentials clear
# Save againbunx @capgo/cli@latest build credentials save --platform ios ...환경 변수에서 마이그레이션
환경 변수에서 마이그레이션현재 환경 변수를 사용 중이라면 저장된 자격증명을 사용할 수 있습니다:
-
현재 환경 변수를 추출하세요
터미널 창 echo $BUILD_CERTIFICATE_BASE64 # Verify they exist -
base64 파일을 원본 파일로 되돌리세요 (만약 필요하다면) (만약 필요하다면)
터미널 창 echo "$BUILD_CERTIFICATE_BASE64" | base64 -d > cert.p12echo "$BUILD_PROVISION_PROFILE_BASE64" | base64 -d > profile.mobileprovision -
CLI를 사용하여 저장하세요
터미널 창 bunx @capgo/cli@latest build credentials save \--platform ios \--certificate ./cert.p12 \--ios-provisioning-profile ./profile.mobileprovision \--p12-password "$P12_PASSWORD" \--apple-key-id "$APPLE_KEY_ID" \--apple-issuer-id "$APPLE_ISSUER_ID" \--apple-team-id "$APP_STORE_CONNECT_TEAM_ID"__CAPGO_KEEP_1__ existing__CAPGO_KEEP_2__ (__CAPGO_KEEP_3__)
BUILD_PROVISION_PROFILE_BASE64__CAPGO_KEEP_4__: __CAPGO_KEEP_5____CAPGO_KEEP_6__ bunx @capgo/cli@latest build credentials migrate --platform ios__CAPGO_KEEP_1__ existing__CAPGO_KEEP_2__ (__CAPGO_KEEP_3__)
CAPGO_IOS_PROVISIONING_MAP__CAPGO_KEEP_4__ converts the legacy single-profile to a __CAPGO_KEEP_7__ and removes the old __CAPGO_KEEP_8__ and __CAPGO_KEEP_9__ keys.BUILD_PROVISION_PROFILE_BASE64__CAPGO_KEEP_10__APPLE_PROFILE_NAME__CAPGO_KEEP_6__ -
__CAPGO_KEEP_0__
__CAPGO_KEEP_1__ existing__CAPGO_KEEP_2__ (__CAPGO_KEEP_3__) bunx @capgo/cli@latest build request com.example.app --platform ios -
환경 변수 제거 (선택 사항)
터미널 창 unset BUILD_CERTIFICATE_BASE64 BUILD_PROVISION_PROFILE_BASE64
파일 위치
파일 위치인증 정보는 단일 JSON 파일에 저장됩니다:
- 전역 (기본값):
~/.capgo-credentials/credentials.json— 모든 프로젝트에 걸쳐 공유됩니다 - 지역 (with
--local):.capgo-credentials.json프로젝트 루트에서 — 전역 파일을 해당 프로젝트에 대체합니다.
파일은 처음으로 자격 증명을 저장할 때 자동으로 생성됩니다. 추가 .capgo-credentials.json 프로젝트에 .gitignore 따라서 프로젝트별 자격 증명은 절대 커밋되지 않습니다.
다음 단계
제목이 “다음 단계”인 섹션- 시작하기 - 첫 번째 빌드를 생성하세요
- iOS 빌드 - iOS 전용 빌드 구성
- Android 빌드 - Android 전용 빌드 구성
- 문제 해결 - 일반적인 문제와 해결 방법
도움이 필요하세요?
'도움이 필요하세요?'라는 제목의 섹션- 📚 문제 해결 가이드
- 💬 디스코드 커뮤니티
- 📧 이메일: capgo.app에 대한 지원
관리 자격 증명에서 계속하기
관리 자격 증명 사용 중인 경우관리 자격 증명에서 계속하기로 이동하기 관리 자격 증명 사용 중인 경우 CI/CD 자동화 계획을 수립하기 위해 연결하세요. Capgo CI/CD Capgo CI/CD에서 제품 워크플로우를 위해 Capgo 네이티브 빌드 Capgo 네이티브 빌드에서 제품 워크플로우를 위해 Capgo 통합 Capgo 통합에서 제품 워크플로우를 위해 CI/CD 통합 CI/CD 통합 구현 세부 사항에 대해 GitHub 액션 통합 GitHub 액션 통합 구현 세부 사항에 대해