중요합니다
2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.
시작하기 전에 이 페이지의 맨 위에 있는 정책 유형 선택기를 사용하여 설정하려는 정책 유형을 선택합니다. Azure Active Directory B2C는 미리 정의된 사용자 흐름 또는 완전히 구성 가능한 사용자 지정 정책을 통해 사용자가 애플리케이션과 상호 작용하는 방법을 정의하는 두 가지 방법을 제공합니다. 이 문서에서 필요한 단계는 각 방법마다 다릅니다.
애플리케이션에는 사용자가 자신의 프로필을 등록, 로그인 또는 관리할 수 있는 사용자 흐름이 있을 수 있습니다. Azure AD B2C(Azure Active Directory B2C) 테넌트에서 다양한 유형의 여러 사용자 흐름을 만들고 필요에 따라 애플리케이션에서 사용할 수 있습니다. 사용자 흐름은 애플리케이션에서 다시 사용할 수 있습니다.
사용자 흐름을 사용하면 사용자가 로그인, 등록, 프로필 편집 또는 암호 재설정과 같은 작업을 수행할 때 애플리케이션과 상호 작용하는 방법을 결정할 수 있습니다. 이 문서에서는 다음 방법을 알아봅니다.
사용자 지정 정책은 Azure AD B2C(Azure Active Directory B2C) 테넌트 동작을 정의하는 구성 파일입니다. 이 문서에서는 다음 방법을 알아봅니다.
- 가입 및 로그인 사용자 흐름 만들기
- 셀프 서비스 비밀번호 재설정을 활성화
- 프로필 편집 사용자 흐름 만들기
중요합니다
사용자 흐름 버전을 참조하는 방식이 변경되었습니다. 이전에는 V1(프로덕션 준비) 버전과 V1.1 및 V2(미리 보기) 버전을 제공했습니다. 이제 사용자 흐름을 최신 기능이 있는 권장 사용자 흐름과 표준(레거시) 사용자 흐름이라는 두 가지 버전으로 통합했습니다. 모든 레거시 미리 보기 사용자 흐름(V1.1 및 V2)은 더 이상 사용되지 않습니다. 자세한 내용은 Azure AD B2C의 사용자 흐름 버전을 참조하세요. 이러한 변경 내용은 Azure 퍼블릭 클라우드에만 적용합니다. 다른 환경에서는 레거시 사용자 흐름 버전 관리 기능을 계속 사용합니다.
필수 조건
- Azure 구독에 연결된 Azure AD B2C 테넌트가 아직 없으면 만듭니다.
- 웹 애플리케이션을 등록하고 ID 토큰 암시적 부여를 사용하도록 설정합니다.
- Azure 구독에 연결된 Azure AD B2C 테넌트가 아직 없으면 만듭니다.
- 웹 애플리케이션을 등록하고 ID 토큰 암시적 부여를 사용하도록 설정합니다.
가입 및 로그인 사용자 흐름 만들기
등록 및 로그인 사용자 흐름은 단일 구성으로 두 환경을 모두 처리합니다. 애플리케이션의 사용자는 컨텍스트에 따라 올바른 경로를 따라 진행됩니다. 등록 및 로그인 사용자 흐름을 만들려면 다음을 수행합니다.
Azure Portal에 로그인합니다.
여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
Azure Portal에서 Azure AD B2C를 검색하고 선택합니다.
정책에서 사용자 흐름을 선택한 다음 새 사용자 흐름을 선택합니다.
사용자 흐름 만들기 탭에서 가입 및 로그인 사용자 흐름을 선택합니다.
버전 선택에서권장을 선택한 다음 만들기를 선택합니다. (사용자 흐름 버전에 대해 자세히 알아보세요 .)
사용자 흐름에 대한 이름을 입력합니다. 예를 들어 signupsignin1입니다.
ID 공급자의 경우 전자 메일 등록을 선택합니다.
사용자 특성 및 토큰 클레임의 경우 등록하는 동안 수집하여 사용자로부터 보내려는 클레임 및 특성을 선택합니다. 예를 들어 자세히 표시를 선택한 다음 국가/지역, 표시 이름 및 우편 번호에 대한 특성 및 클레임을 선택합니다. 확인을 선택합니다.
만들기를 선택하여 사용자 흐름을 추가합니다. B2C_1_ 접두사는 이전에 입력한 이름 앞에 자동으로 추가됩니다. 예를 들어 B2C_1_signupsignin1.
사용자 흐름 테스트
사용자 흐름 페이지에서 방금 만든 사용자 흐름을 선택하여 개요 페이지를 엽니다.
사용자 흐름 개요 페이지의 맨 위에서 사용자 흐름 실행을 선택합니다. 페이지 오른쪽에 창이 열립니다.
애플리케이션의 경우 테스트하려는 웹 애플리케이션(예: webapp1)을 선택합니다. 회신 URL에는
https://jwt.ms
가 표시되어야 합니다.사용자 흐름 실행을 선택한 다음 지금 등록을 선택합니다.
유효한 전자 메일 주소를 입력하고, 확인 코드 보내기를 선택하고, 받은 확인 코드를 입력한 다음, 코드 확인을 선택합니다.
새 암호를 입력하고 암호를 확인합니다.
국가 및 지역을 선택하고 표시할 이름을 입력하고 우편 번호로 입력한 다음 만들기를 선택합니다. 토큰이 반환
https://jwt.ms
되며 브라우저에 표시되어야 합니다.이제 사용자 흐름을 다시 실행할 수 있으며 방금 만든 계정으로 로그인할 수 있습니다. 반환된 토큰에는 국가/지역, 이름 및 우편 번호에서 선택한 클레임이 포함됩니다.
비고
"사용자 흐름 실행" 환경은 현재 권한 부여 코드 흐름을 사용하여 SPA 회신 URL 유형과 호환되지 않습니다. 이러한 종류의 앱에서 "사용자 흐름 실행" 환경을 사용하려면 "웹" 형식의 회신 URL을 등록하고 암시적 흐름을 사용하도록 설정합니다.
셀프 서비스 비밀번호 재설정을 활성화
등록 또는 로그인 사용자 흐름에 셀프 서비스 암호 재설정 을 사용하도록 설정하려면 다음을 수행합니다.
- 사용자 흐름 페이지에서 방금 만든 등록 또는 로그인 사용자 흐름을 선택합니다.
- 왼쪽 메뉴의 설정 에서 속성을 선택합니다.
- 암호 구성에서 셀프 서비스 암호 재설정을 선택합니다.
- 저장을 선택합니다.
사용자 흐름 테스트
- 사용자 흐름 페이지에서 방금 만든 사용자 흐름을 선택하여 개요 페이지를 연 다음 사용자 흐름 실행을 선택합니다.
-
애플리케이션의 경우 테스트하려는 웹 애플리케이션(예: webapp1)을 선택합니다.
회신 URL에는
https://jwt.ms
가 표시되어야 합니다. - 사용자 흐름 실행을 선택합니다.
- 등록 또는 로그인 페이지에서 암호를 잊으셨나요?를 선택합니다.
- 이전에 만든 계정의 전자 메일 주소를 확인한 다음 계속을 선택합니다.
- 이제 사용자의 암호를 변경할 수 있습니다. 암호를 변경하고 계속을 선택합니다. 토큰은
https://jwt.ms
에 반환되고 브라우저에 표시됩니다.
프로필 편집 사용자 흐름 만들기
사용자가 애플리케이션에서 프로필을 편집할 수 있도록 하려면 프로필 편집 사용자 흐름을 사용합니다.
- Azure AD B2C 테넌트 개요 페이지의 메뉴에서 사용자 흐름을 선택한 다음, 새 사용자 흐름을 선택합니다.
- 사용자 흐름 만들기 페이지에서 프로필 편집 사용자 흐름을 선택합니다.
- 버전 선택에서권장을 선택한 다음 만들기를 선택합니다.
- 사용자 흐름에 대한 이름을 입력합니다. 예를 들어 profileediting1입니다.
- ID 공급자의 경우 로컬 계정에서 전자 메일 등록을 선택합니다.
- 사용자 특성의 경우 고객이 프로필에서 편집할 수 있도록 하려는 특성을 선택합니다. 예를 들어 자세히 표시를 선택한 다음 표시 이름 및 작업 제목에 대한 특성과 클레임을 모두 선택합니다. 확인을 선택합니다.
- 만들기를 선택하여 사용자 흐름을 추가합니다. B2C_1_ 접두사는 이름에 자동으로 추가됩니다.
사용자 흐름 테스트
- 만든 사용자 흐름을 선택하여 개요 페이지를 엽니다.
- 사용자 흐름 개요 페이지의 맨 위에서 사용자 흐름 실행을 선택합니다. 페이지 오른쪽에 창이 열립니다.
-
애플리케이션의 경우 테스트하려는 웹 애플리케이션(예: webapp1)을 선택합니다.
회신 URL에는
https://jwt.ms
가 표시되어야 합니다. - 사용자 흐름 실행을 선택한 다음, 이전에 만든 계정으로 로그인합니다.
- 이제 사용자의 표시 이름 및 직종을 변경할 수 있습니다.
를 선택합니다 계속. 토큰은
https://jwt.ms
에 반환되고 브라우저에 표시됩니다.
팁 (조언)
이 문서에서는 수동으로 테넌트 설정 방법을 설명합니다. 이 문서에서 전체 프로세스를 자동화할 수 있습니다. 자동화하면 등록 및 로그인, 암호 재설정 및 프로필 편집 과정을 제공하는 Azure AD B2C SocialAndLocalAccountsWithMFA 스타터 팩이 배포됩니다. 아래 연습을 자동화하려면 IEF 설치 앱을 방문하여 지침을 따릅니다.
Identity Experience Framework 애플리케이션에 대한 서명 및 암호화 키 추가
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
- Azure Portal에서 Azure AD B2C를 검색하고 선택합니다.
- 개요 페이지에서 정책아래에 있는 식별 경험 프레임워크를 선택합니다.
서명 키 만들기
- 정책 키를 선택한 다음 추가를 선택합니다.
-
옵션의 경우 .를 선택합니다
Generate
. -
이름에 입력합니다
TokenSigningKeyContainer
. 접두사는B2C_1A_
자동으로 추가될 수 있습니다. - 키 형식의 경우 RSA를 선택합니다.
- 키 사용의 경우 서명을 선택합니다.
- 선택하고생성합니다.
암호화 키 만들기
- 정책 키를 선택한 다음 추가를 선택합니다.
-
옵션의 경우 .를 선택합니다
Generate
. -
이름에 입력합니다
TokenEncryptionKeyContainer
. 접두사B2C_1A
_가 자동으로 추가될 수 있습니다. - 키 형식의 경우 RSA를 선택합니다.
- 키 사용의 경우 암호화를 선택합니다.
- 선택하고생성합니다.
ID 경험 프레임워크 애플리케이션 등록
Azure AD B2C를 사용하려면 로컬 계정으로 사용자를 등록하고 로그인하는 데 사용하는 두 개의 애플리케이션인 IdentityExperienceFramework, 웹 API 및 IdentityExperienceFramework 앱에 위임된 권한이 있는 네이티브 앱인 ProxyIdentityExperienceFramework를 등록해야 합니다. 사용자는 전자 메일 주소 또는 사용자 이름 및 암호를 사용하여 테넌트에 등록된 애플리케이션에 액세스하여 "로컬 계정"을 만들 수 있습니다. 로컬 계정은 Azure AD B2C 테넌트에만 존재합니다.
이러한 두 애플리케이션을 Azure AD B2C 테넌트에 한 번만 등록해야 합니다.
IdentityExperienceFramework 애플리케이션 등록
Azure AD B2C 테넌트에 애플리케이션을 등록하려면 앱 등록 환경을 사용할 수 있습니다.
- 앱 등록을 선택하고, 새 등록을 선택합니다.
-
이름에
IdentityExperienceFramework
를 입력합니다. - 지원되는 계정 유형에서 이 조직 디렉터리의 계정만 선택합니다.
-
리디렉션 URI에서 웹을 선택한 다음, Azure AD B2C 테넌트 도메인 이름을 입력
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com
your-tenant-name
합니다. - 사용 권한아래에서, openid 및 offline_access 권한에 대한 관리자 동의 부여를 선택한 후 확인란을 선택합니다.
- 등록을 선택합니다.
- 이후 단계에서 사용할 수 있게 애플리케이션(클라이언트) ID를 기록합니다.
다음으로 범위를 추가하여 API를 노출합니다.
- 왼쪽 메뉴의 관리에서 API 노출을 선택합니다.
- 범위 추가를 선택한 다음 기본 애플리케이션 ID URI를 수락하려면 저장 후 계속을 선택합니다.
- 다음 값을 입력하여 Azure AD B2C 테넌트에서 사용자 지정 정책 실행을 허용하는 범위를 만듭니다.
-
범위 이름:
user_impersonation
-
관리자 동의 표시 이름:
Access IdentityExperienceFramework
-
관리자 동의 설명:
Allow the application to access IdentityExperienceFramework on behalf of the signed-in user.
-
범위 이름:
- 범위 추가 선택
ProxyIdentityExperienceFramework 애플리케이션 등록
- 앱 등록을 선택하고, 새 등록을 선택합니다.
-
이름에
ProxyIdentityExperienceFramework
를 입력합니다. - 지원되는 계정 유형에서 이 조직 디렉터리의 계정만 선택합니다.
- 리디렉션 URI에서 드롭다운을 사용하여 공용 클라이언트/네이티브(모바일 및 데스크톱)를 선택합니다.
-
리디렉션 URI에
myapp://auth
을 입력합니다. - 사용 권한아래에서, openid 및 offline_access 권한에 대한 관리자 동의 부여를 선택한 후 확인란을 선택합니다.
- 등록을 선택합니다.
- 이후 단계에서 사용할 수 있게 애플리케이션(클라이언트) ID를 기록합니다.
다음으로, 애플리케이션을 공용 클라이언트로 처리해야 한다고 지정합니다.
- 왼쪽 메뉴의 관리 아래에서 인증을 선택합니다.
- 고급 설정의 공용 클라이언트 흐름 허용 섹션에서 다음 모바일 및 데스크톱 흐름을[예]로 설정합니다.
- 저장을 선택합니다.
-
"isFallbackPublicClient": true가 Microsoft Graph 앱 매니페스트(New)에 설정되어 있는지 확인합니다.
- 왼쪽 메뉴의 관리 아래에서 매니페스트 를 선택하여 Microsoft Graph 앱 매니페스트(새로 만들기)를 엽니다.
- Microsoft Graph 앱 매니페스트(새로 만들기) 탭에서 AAD Graph 앱 매니페스트(곧 사용 중단) 탭으로 전환합니다.
- isFallbackPublicClient 키를 찾아 해당 값이 true로 설정되어 있는지 확인합니다.
이제 IdentityExperienceFramework 등록에서 이전에 노출한 API 범위에 권한을 부여합니다.
- 왼쪽 메뉴의 관리 아래에서 API 권한을 선택합니다.
- 구성된 사용 권한 아래에서 권한 추가를 선택합니다.
- 조직에서 사용하는 API 탭을 선택한 다음 IdentityExperienceFramework 애플리케이션을 선택합니다.
- 사용 권한에서 이전에 정의한 user_impersonation 범위를 선택합니다.
- 권한 추가를 선택합니다. 안내에 따라 몇 분 정도 기다린 후 다음 단계를 진행하세요.
- 테넌트 이름<에 대한 관리자 동의 부여를> 선택합니다.
- 예를 선택합니다.
- 새로 고침을 선택한 후, 범위의 상태 아래에 "허용 대상..."이 나타나는지 확인하십시오.
사용자 지정 정책 시작 팩
사용자 지정 정책은 기술 프로필 및 사용자 경험을 정의하기 위해 Azure AD B2C 테넌트에 업로드하는 XML 파일 집합입니다. 빠르게 진행하기 위해 미리 빌드된 몇 가지 정책을 스타터 팩에 제공합니다. 이러한 각 시작 팩에는 설명된 시나리오를 달성하는 데 필요한 최소한의 기술 프로필 및 사용자 경험 수가 포함됩니다. Azure AD B2C 사용자 지정 정책에 대한 자세한 가이드는 사용자 지정 정책 방법 가이드 시리즈를 따르세요.
- LocalAccounts - 로컬 계정만 사용할 수 있습니다.
- SocialAccounts - 소셜(또는 페더레이션된) 계정만 사용할 수 있습니다.
- SocialAndLocalAccounts - 로컬 계정과 소셜 계정을 모두 사용할 수 있습니다.
- SocialAndLocalAccountsWithMFA - 소셜, 로컬 및 다단계 인증 옵션을 사용하도록 설정합니다.
각 시작 팩에는 다음이 포함됩니다.
- 기본 파일 - 기본에 대한 몇 가지 수정이 필요합니다. 예: TrustFrameworkBase.xml
- 지역화 파일 - 이 파일은 지역화 변경이 수행되는 위치입니다. 예: TrustFrameworkLocalization.xml
- 확장 파일 - 이 파일은 대부분의 구성이 변경되는 위치입니다. 예: TrustFrameworkExtensions.xml
- 신뢰 당사자 파일 - 애플리케이션에서 호출하는 작업별 파일입니다. 예: SignUpOrSignin.xml, ProfileEdit.xml, PasswordReset.xml
이 문서에서는 SocialAndLocalAccounts 시작 팩에서 XML 사용자 지정 정책 파일을 편집합니다. XML 편집기가 필요한 경우 간단한 플랫폼 간 편집기인 Visual Studio Code를 사용해 보세요.
시작 팩 가져오기
GitHub에서 사용자 지정 정책 시작 팩을 가져온 다음 SocialAndLocalAccounts 시작 팩의 XML 파일을 Azure AD B2C 테넌트 이름으로 업데이트합니다.
.zip 파일을 다운로드 하거나 리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack
SocialAndLocalAccounts 디렉터리의 모든 파일에서 문자열
yourtenant
을 Azure AD B2C 테넌트 이름으로 바꿉니다.예를 들어 B2C 테넌트의 이름이 contosotenant이면 모든 인스턴스가
yourtenant.onmicrosoft.com
됩니다contosotenant.onmicrosoft.com
.
사용자 지정 정책에 애플리케이션 ID 추가
확장 파일 TrustFrameworkExtensions.xml애플리케이션 ID를 추가합니다.
-
SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
을 열어<TechnicalProfile Id="login-NonInteractive">
요소를 찾습니다. - 이전에 만든 IdentityExperienceFramework 애플리케이션의 애플리케이션 ID로
IdentityExperienceFrameworkAppId
의 두 인스턴스를 모두 바꾸세요. - 두 개의
ProxyIdentityExperienceFrameworkAppId
인스턴스를 사전에 생성한 ProxyIdentityExperienceFramework 애플리케이션의 애플리케이션 ID로 바꿉니다. - 파일을 저장합니다.
Facebook을 ID 공급자로 추가
SocialAndLocalAccounts 스타터 팩에는 Facebook 소셜 로그인이 포함되어 있습니다. Facebook은 사용자 지정 정책을 사용하는 데 필요하지 않지만 여기서는 사용자 지정 정책에서 페더레이션 소셜 로그인을 사용하도록 설정하는 방법을 보여 줍니다. 페더레이션된 소셜 로그인을 사용하도록 설정할 필요가 없는 경우 LocalAccounts 시작 팩을 대신 사용하고 정책 업로드 섹션으로 건너뜁니다.
Facebook 애플리케이션 만들기
Facebook 애플리케이션 만들기에 설명된 단계를 사용하여 Facebook 앱 ID 및 앱 비밀을 가져옵니다. Facebook 계정을 활용한 가입 및 로그인 설정 기사에서 필수 구성 요소와 나머지 단계를 건너뛰세요.
Facebook 키 만들기
Facebook 애플리케이션의 앱 비밀을 정책 키로 추가합니다. 이 문서의 필수 구성 요소의 일부로 만든 애플리케이션의 앱 비밀을 사용할 수 있습니다.
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
- Azure Portal에서 Azure AD B2C를 검색하고 선택합니다.
- 개요 페이지에서 정책아래에 있는 식별 경험 프레임워크를 선택합니다.
- 정책 키를 선택한 다음 추가를 선택합니다.
-
옵션의 경우 .를 선택합니다
Manual
. -
이름에
FacebookSecret
를 입력합니다. 접두사는B2C_1A_
자동으로 추가될 수 있습니다. - 비밀에서 developers.facebook.com Facebook 애플리케이션의 앱 비밀을 입력합니다. 이 값은 애플리케이션 ID가 아닌 비밀입니다.
- 키 사용의 경우 서명을 선택합니다.
- 선택하고생성합니다.
사용자 지정 정책 시작 팩에서 TrustFrameworkExtensions.xml 업데이트
파일에서 SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
값을 client_id
Facebook 애플리케이션 ID로 바꾸고 변경 내용을 저장합니다.
<TechnicalProfile Id="Facebook-OAUTH">
<Metadata>
<!--Replace the value of client_id in this technical profile with the Facebook app ID"-->
<Item Key="client_id">00000000000000</Item>
정책 업로드
- Azure Portal의 B2C 테넌트에서 ID 경험 프레임워크 메뉴 항목을 선택합니다.
- 사용자 지정 정책 업로드를 선택합니다.
- 이 순서대로 정책 파일을 업로드합니다.
- TrustFrameworkBase.xml
- TrustFrameworkLocalization.xml
- TrustFrameworkExtensions.xml
- SignUpOrSignin.xml
- ProfileEdit.xml
- PasswordReset.xml
파일을 업로드할 때 Azure는 각각에 접두 B2C_1A_
사를 추가합니다.
팁 (조언)
XML 편집기에서 유효성 검사를 지원하는 경우 시작 팩의 TrustFrameworkPolicy_0.3.0.0.xsd
루트 디렉터리에 있는 XML 스키마에 대해 파일의 유효성을 검사합니다. XML 스키마 유효성 검사는 업로드하기 전에 오류를 식별합니다.
사용자 지정 정책 테스트
- 사용자 지정 정책에서 B2C_1A_signup_signin 선택합니다.
- 사용자 지정 정책의 개요 페이지에서 애플리케이션을 선택 하려면 webapp1이라는 웹 애플리케이션과 같이 테스트하려는 웹 애플리케이션을 선택합니다.
-
회신 URL이 .인지 확인합니다
https://jwt.ms
. - 지금 실행을 선택합니다.
- 전자 메일 주소를 사용하여 등록합니다.
- 지금 실행을 다시 선택합니다.
- 동일한 계정으로 로그인하여 올바른 구성이 있는지 확인합니다.
- 지금 다시 실행을 선택하고 Facebook을 선택하여 Facebook에 로그인하고 사용자 지정 정책을 테스트합니다.
다음 단계
이 문서에서는 다음 방법을 알아보았습니다.
- 회원가입 및 로그인 사용자 흐름 구축하기
- 프로필 편집 사용자 흐름 만들기
- 사용자 암호 재설정 절차 만들기
다음으로, Azure AD B2C를 사용하여 애플리케이션에서 사용자를 로그인하고 등록하는 방법을 알아봅니다. 아래에 연결된 샘플 앱을 따릅니다.
- 샘플 ASP.NET Core 웹앱 구성
- Web API를 호출하는 샘플 ASP.NET Core 웹앱 구성
- 샘플 Python 웹 애플리케이션에서 인증 구성
- SPA(단일 페이지 애플리케이션) 샘플 구성
- 샘플 Angular 단일 페이지 앱 구성
- 샘플 Android 모바일 앱 구성
- 샘플 iOS 모바일 앱 구성
- 샘플 WPF 데스크톱 애플리케이션에서 인증 구성
- 웹 API에서 인증 사용
- SAML 애플리케이션 구성
Azure AD B2C 아키텍처 심층 분석 시리즈에서 자세히 알아볼 수도 있습니다.