복제 관리자를 위한 질문과 대답

적용 대상:SQL ServerAzure SQL Managed Instance

다음 질문과 답변은 복제된 데이터베이스의 관리자가 직면한 다양한 작업에 대한 지침을 제공합니다.

복제 구성

활동을 게시할 때 데이터베이스에서 중지해야 합니까?

아니요 게시를 만드는 동안 데이터베이스에서 작업을 계속할 수 있습니다. 스냅샷을 생성하는 작업에는 리소스가 많이 사용될 수 있으므로 데이터베이스에 작업량이 적은 시간을 이용하여 스냅샷을 생성하는 것이 가장 좋습니다. 기본적으로 스냅샷은 새 게시 마법사를 완료하면 생성됩니다.

스냅샷 생성 중에 테이블이 잠깁니까?

잠금이 수행되는 시간은 사용된 복제 유형에 따라 달라집니다.

  • 병합 게시의 경우 스냅샷 에이전트는 잠금을 수행하지 않습니다.

  • 트랜잭션 게시의 경우 기본적으로 스냅샷 에이전트는 스냅샷 생성의 초기 단계에서만 잠금을 사용합니다.

  • 스냅샷 게시의 경우 스냅샷 에이전트는 전체 스냅샷 생성 프로세스 중에 잠금을 수행합니다.

잠금을 사용하면 다른 사용자가 테이블을 업데이트할 수 없으므로 특히 스냅샷 게시의 경우 데이터베이스에서 활동이 낮은 기간 동안 스냅샷 에이전트를 실행하도록 예약해야 합니다.

언제 구독을 사용할 수 있습니까? 구독 데이터베이스는 언제 사용할 수 있습니까?

구독 데이터베이스에 스냅샷이 적용된 후에 구독을 사용할 수 있습니다. 그 전에도 구독 데이터베이스에 액세스할 수 있지만 스냅샷이 적용될 때까지 데이터베이스를 사용하면 안 됩니다. 다음과 같이 복제 모니터를 사용하여 스냅샷 생성 및 적용 상태를 확인합니다.

  • 스냅샷 에이전트에서 스냅샷을 생성한 다음 복제 모니터의 게시에 대한 에이전트 탭에서 스냅샷 생성 상태를 확인합니다 . 자세한 내용은 복제 모니터사용하여 정보 보기 및 작업 수행을 참조하세요.

  • 스냅샷은 배포 에이전트 또는 병합 에이전트에 의해 적용됩니다. 복제 모니터의 배포 에이전트 또는 병합 에이전트 페이지에서 스냅샷 애플리케이션의 상태를 확인합니다. 자세한 내용은 복제 모니터사용하여 정보 보기 및 작업 수행을 참조하세요.

배포 또는 병합 에이전트가 시작될 때 스냅샷 에이전트가 완료되지 않은 경우 어떻게 되나요?

배포 에이전트 또는 병합 에이전트가 스냅샷 에이전트와 동시에 실행되는 경우 오류가 발생하지 않습니다. 그러나 다음과 같은 사항에 유의하십시오.

  • 배포 에이전트 또는 병합 에이전트가 지속적으로 실행되도록 구성된 경우 에이전트는 스냅샷 에이전트가 완료된 후 자동으로 스냅샷을 적용합니다.

  • 배포 에이전트 또는 병합 에이전트가 일정 또는 주문형으로 실행되도록 구성되어 있고 에이전트가 실행될 때 사용할 수 있는 스냅샷이 없는 경우 에이전트는 스냅샷을 아직 사용할 수 없다는 메시지와 함께 종료됩니다. 스냅샷 에이전트가 완료된 후 스냅샷을 적용하려면 에이전트를 다시 실행해야 합니다. 에이전트 실행에 대한 자세한 내용은 밀어넣기 구독 동기화, 끌어오기 구독 동기화복제 에이전트 실행 파일 개념을 참조하세요.

복제 구성을 스크립팅해야 합니까?

있음. 복제 구성 스크립팅은 복제 토폴로지 재해 복구 계획의 핵심 부분입니다. 스크립팅에 대한 자세한 내용은 복제 스크립팅을 참조 하세요.

복제된 데이터베이스에 필요한 복구 모델은 무엇인가요?

복제는 단순, 대량 로그 또는 전체 복구 모델을 사용하여 제대로 작동합니다. 병합 복제는 메타데이터 테이블에 정보를 저장하여 변경 내용을 추적합니다. 트랜잭션 복제는 트랜잭션 로그를 표시하여 변경 내용을 추적하지만 이 표시 프로세스는 복구 모델의 영향을 받지 않습니다.

복제 작업에서 복제된 테이블에 열을 추가하는 이유는 무엇입니까? 테이블이 게시되지 않으면 해당 열이 제거됩니까?

변경 내용을 추적하려면 지연 업데이트 구독을 사용하여 복제 및 트랜잭션 복제를 병합하여 게시된 모든 테이블의 모든 행을 고유하게 식별할 수 있어야 합니다. 이를 위해 다음 작업이 수행됩니다.

  • 병합 복제는 ROWGUIDCOL 속성이 설정된 데이터 형식 uniqueidentifier 열이 이미 없는 한 모든 테이블에 열 rowguid를 추가합니다(이 경우 이 열이 사용됨). 테이블을 게시 에서 삭제하면 rowguid 열이 제거되고 기존 열을 추적에 사용한 경우 열이 제거되지 않습니다.

  • 트랜잭션 게시가 지연 업데이트 구독을 지원하는 경우 복제는 모든 테이블에 열 msrepl_tran_version 추가합니다. 발행물 에서 테이블을 삭제하면 msrepl_tran_version 열이 제거되지 않습니다.

  • 필터는 행 식별을 위해 복제에 사용된 rowguidcol 을 포함하지 않아야 합니다. 기본적으로 이 열은 병합 복제를 설정할 때 추가된 열이며 이름은 rowguid입니다.

게시된 테이블에서 제약 조건을 어떻게 관리합니까?

게시된 테이블의 제약 조건과 관련하여 고려해야 할 여러 가지 문제가 있습니다.

  • 트랜잭션 복제에는 게시된 각 테이블에 대한 기본 키 제약 조건이 필요합니다. 병합 복제에는 기본 키가 필요하지 않지만 있는 경우 복제되어야 합니다. 스냅샷 복제에는 기본 키가 필요하지 않습니다.

  • 기본적으로 기본 키 제약 조건, 인덱스 및 CHECK 제약 조건은 구독자에 복제됩니다.

  • FOREIGN KEY 제약 조건과 CHECK 제약 조건에 대해서는 NOT FOR REPLICATION 옵션이 기본적으로 지정됩니다. 이러한 제약 조건은 사용자 작업에는 적용되지만 에이전트 작업에는 적용되지 않습니다.

제약 조건이 복제되는지 여부를 제어하는 스키마 옵션을 설정하는 방법에 대한 자세한 내용은 스키마 옵션 지정을 참조 하세요.

ID 열을 관리하려면 어떻게 해야 하나요?

복제는 구독자의 업데이트를 포함하는 복제 토폴로지의 자동 ID 범위 관리를 제공합니다. 자세한 내용은 ID 열 복제를 참조하세요.

동일한 개체를 다른 여러 게시에 게시할 수 있습니까?

예, 하지만 몇 가지 제한 사항. 자세한 내용은 데이터 및 데이터베이스 개체 게시 항목에서 "둘 이상의 게시에 테이블 게시" 섹션을 참조하세요.

여러 게시에서 동일한 배포 데이터베이스를 사용할 수 있나요?

있음. 동일한 배포 데이터베이스를 사용할 수 있는 게시의 수나 유형에 대한 제한은 없습니다. 지정된 게시자의 모든 게시는 동일한 배포자 및 배포 데이터베이스를 사용해야 합니다.

게시가 여러 개 있는 경우 배포자에서 여러 배포 데이터베이스를 구성하여 각 배포 데이터베이스를 통해 흐르는 데이터가 단일 게시에서 전송되도록 할 수 있습니다. 배포자 속성 대화 상자 또는 sp_adddistributiondb(Transact-SQL)를 사용하여 배포 데이터베이스를 추가합니다. 대화 상자에 액세스하는 방법에 대한 자세한 내용은 배포자 및 게시자 속성 보기 및 수정을 참조 하세요.

배포자와 게시자에 대한 정보, 즉 데이터베이스에서 어떤 개체가 게시되었는지 등과 같은 정보를 어떻게 찾습니까?

이 정보는 SQL Server Management Studio 및 여러 복제 저장 프로시저를 통해 사용할 수 있습니다. 자세한 내용은 배포자 및 게시자 정보 스크립트를 참조 하세요.

복제에서 데이터를 암호화하나요?

아니요 복제는 데이터베이스에 저장되거나 네트워크를 통해 전송되는 데이터를 암호화하지 않습니다. 자세한 내용은 복제 보안 설정 보기 및 수정 항목 의 "암호화" 섹션을 참조하세요.

인터넷을 통해 데이터를 복제하려면 어떻게 해야 하나요?

다음을 사용하여 인터넷을 통해 데이터를 복제합니다.

모든 유형의 Microsoft SQL Server 복제는 VPN을 통해 데이터를 복제할 수 있지만 병합 복제를 사용하는 경우 웹 동기화를 고려해야 합니다.

연결이 끊어지면 복제를 다시 시작하나요?

있음. 연결이 끊어지면 중단된 지점에서 복제 처리가 다시 시작됩니다. 불안정한 네트워크에서 병합 복제를 사용하는 경우 관련 변경 내용이 한 단위로 처리되는 논리적 레코드를 사용해 보십시오. 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.

낮은 대역폭 연결을 통해 복제가 작동하나요? 압축을 사용하나요?

예. 느린 대역폭 연결을 통해서도 복제를 수행할 수 있습니다. TCP/IP를 통해 연결의 경우 프로토콜에서 제공하는 압축을 사용하지만 추가 압축을 제공하지는 않습니다. HTTPS를 통한 웹 동기화 연결의 경우 프로토콜에서 제공하는 압축과 변경 내용을 복제하는 데 사용되는 XML 파일의 추가 압축을 사용합니다.

IP 주소를 사용하여 서버에 연결하는 경우 복제를 구성할 수 있나요?

아니요, 복제는 실제 서버 이름을 사용하는 경우에만 작동합니다. SSMS(SQL Server Management Studio) 18.0 이상 버전부터 실제 서버 이름 및 포트 번호를 사용하여 복제를 구성할 수 있습니다.

로그인 및 개체 소유권

로그인과 암호도 복제됩니까?

아니요 SSIS 패키지를 만들어 한 게시자에서 하나 이상의 구독자로 로그인과 암호를 전송할 수 있습니다.

스키마란 무엇이며 어떻게 복제됩니까?

Microsoft SQL Server 2005(9.x) 부터 스키마 에는 두 가지 의미가 있습니다.

  • 문과 같은 개체의 정의입니다 CREATE TABLE . 기본적으로 복제는 복제된 모든 개체의 정의를 구독자에 복사합니다.

  • 개체가 만들어 <지는 네임스페이스: 데이터베이스>입니다.<스키마>.<개체입니다>. 스키마는 문을 사용하여 CREATE SCHEMA 정의됩니다.

  • 복제에는 스키마 및 개체 소유권과 관련하여 새 게시 마법사에서 다음과 같은 기본 동작이 있습니다.

  • 호환성 수준이 90 이상인 병합 게시, 스냅샷 게시, 트랜잭션 게시의 아티클에 대해 기본적으로 구독자의 개체 소유자는 게시자에 있는 해당 개체의 소유자와 동일합니다. 개체를 소유한 스키마가 구독자에 없는 경우 자동으로 만들어집니다.

  • 호환성 수준이 90보다 낮은 병합 게시의 아티클의 경우: 기본적으로 소유자는 비워 두고 구독자에서 개체를 만드는 동안 dbo지정됩니다.

  • Oracle 게시의 아티클에 대해 기본적으로 소유자는 dbo로 지정됩니다.

  • 문자 모드 스냅샷(SQL Server 이외 구독자 및 SQL Server Compact 구독자에 사용됨)을 사용하는 게시의 아티클의 경우 기본적으로 소유자는 비워 둡니다. 소유자는 기본적으로 배포 에이전트 또는 병합 에이전트에서 구독자에 연결하는 데 사용하는 계정과 연결된 소유자로 설정됩니다.

개체 소유자는 아티클 속성 - <Article> 대화 상자와 sp_addarticle, sp_addmergearticle, sp_changearticlesp_changemergearticle 저장 프로시저를 통해 변경할 수 있습니다. 자세한 내용은 게시 속성 보기 및 수정, 아티클 정의 및 아티클 속성 보기 및 수정을 참조하세요.

게시 데이터베이스의 권한 부여와 일치하도록 구독 데이터베이스에 대한 부여를 구성하려면 어떻게 해야 하나요?

기본적으로 복제는 구독 데이터베이스에서 GRANT 문을 실행하지 않습니다. 구독 데이터베이스에 대한 사용 권한이 게시 데이터베이스의 사용 권한과 일치하도록 하려면 다음 방법 중 하나를 사용합니다.

구독을 다시 초기화하면 구독 데이터베이스에 부여된 사용 권한은 어떻게 되나요?

기본적으로 구독자의 개체는 구독을 다시 초기화할 때 삭제되고 다시 생성되므로 해당 개체에 대해 부여된 모든 권한이 삭제됩니다. 이러한 문제는 다음과 같이 처리할 수 있습니다.

  • 이전 섹션에서 설명한 기술을 사용하여 다시 초기화 후 부여를 다시 적용합니다.

  • 구독을 다시 초기화할 때 개체를 삭제하지 않도록 지정합니다. 다시 초기화하기 전에 다음 중 하나를 수행합니다.

    • sp_changearticle 실행하거나 sp_changemergearticle. @property 매개 변수에 ‘pre_creation_cmd’(sp_changearticle) 또는 ‘pre_creation_command’(sp_changemergearticle)를 지정하고 @value 매개 변수에 ‘none’, ‘delete’ 또는 ‘truncate’ 값을 지정합니다.

    • 대상 개체 섹션의 아티클 속성 - <아티클> 대화 상자에서 기존 개체를 변경하지 않고 데이터 삭제 값을 선택합니다. 아티클에 행 필터가 있는 경우 필터와 일치하는 데이터만 삭제합니다. 또는 이름이 사용 중인 경우 Action 옵션에 대한 기존 개체의 모든 데이터를 자른다. 이 대화 상자에 액세스하는 방법에 대한 자세한 내용은 게시 속성 보기 및 수정을 참조 하세요.

데이터베이스 유지 관리

게시된 테이블에서 TRUNCATE TABLE이 실행되지 않는 이유는 무엇입니까?

TRUNCATE TABLE은 개별 행 삭제를 기록하지 않고 DML 트리거를 발생시키지 않는 DDL 문입니다. 복제가 해당 작업으로 인한 변경 내용을 추적할 수 없으므로 TRUNCATE TABLE은 허용되지 않습니다. 트랜잭션 복제는 트랜잭션 로그를 통해 변경 내용을 추적하고 병합 복제는 게시된 테이블의 DML 트리거를 통해 변경 내용을 추적합니다.

복제된 데이터베이스에서 대량 삽입 명령을 실행하면 어떤 영향이 있나요?

트랜잭션 복제의 경우 다른 삽입처럼 대량 삽입도 추적되어 복제됩니다. 병합 복제의 경우 변경 내용 추적 메타데이터가 제대로 업데이트되었는지 확인해야 합니다.

백업 및 복원에 대한 복제 고려 사항이 있나요?

있음. 복제와 관련된 데이터베이스에는 여러 가지 특별한 고려 사항이 있습니다. 자세한 내용은 복제된 데이터베이스 백업 및 복원을 참조 하세요.

복제가 트랜잭션 로그의 크기에 영향을 주나요?

병합 복제 및 스냅샷 복제는 트랜잭션 로그 크기에 영향을 주지 않지만 트랜잭션 복제는 영향을 줄 수 있습니다. 데이터베이스에 하나 이상의 트랜잭션 게시가 포함된 경우 게시와 관련된 모든 트랜잭션이 배포 데이터베이스에 전달될 때까지 로그가 잘리지 않습니다. 로그 판독기 에이전트가 일정에 따라 실행되는 경우 트랜잭션 로그가 너무 방대해지면 일정 실행 간격을 좁히거나 또는 연속 모드에서 실행되도록 설정합니다. 연속 모드(기본값)로 실행되도록 설정된 경우 실행 중인지 확인합니다. 로그 판독기 에이전트 상태를 확인하는 방법에 대한 자세한 내용은 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.

또한 게시 데이터베이스나 배포 데이터베이스에서 'sync with backup' 옵션을 설정한 경우 트랜잭션이 모두 백업될 때까지 트랜잭션 로그가 잘리지 않습니다. 트랜잭션 로그가 너무 커지고 이 옵션을 설정한 경우 트랜잭션 로그 백업 간의 간격을 줄이는 것이 좋습니다. 백업 및 트랜잭션 복제와 관련된 데이터베이스 복원에 대한 자세한 내용은 스냅샷 및 트랜잭션 복제의 백업 및 복원을 위한 전략을 참조하세요.

복제된 데이터베이스에서 인덱스나 테이블을 어떻게 다시 작성합니까?

인덱스를 다시 작성하기 위한 다양한 메커니즘이 있습니다. 트랜잭션 게시의 테이블에는 기본 키가 필요하므로 이러한 테이블에서 기본 키를 삭제하고 다시 만들 수 없으므로 복제에 대한 특별한 고려 사항 없이 모두 사용할 수 있습니다.

게시 및 구독 데이터베이스에서 인덱스를 추가하거나 변경하려면 어떻게 해야 하나요?

인덱스는 복제에 대한 특별한 고려 사항 없이 게시자 또는 구독자에서 추가할 수 있습니다(인덱스가 성능에 영향을 줄 수 있음). CREATE INDEXALTER INDEX 복제되지 않으므로 인덱스(예: 게시자)를 추가하거나 변경하는 경우 해당 인덱스가 반영되도록 하려면 구독자에서 동일한 추가 또는 변경을 수행해야 합니다.

복제와 관련된 데이터베이스의 파일은 어떻게 이동하거나 이름을 바꾸나요?

SQL Server 2005(9.x) 이전 버전의 SQL Server에서는 데이터베이스 파일을 이동하거나 이름을 변경하려면 데이터베이스를 분리하고 다시 연결해야 했습니다. 그러나 복제된 데이터베이스는 분리할 수 없으므로 먼저 이러한 데이터베이스에서 복제를 제거해야 했습니다. SQL Server 2005(9.x)부터 데이터베이스를 분리하고 다시 연결하지 않고도 복제에 영향을 주지 않고 파일을 이동하거나 이름을 바꿀 수 있습니다. 파일 이동 및 이름 바꾸기에 대한 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.

복제 중인 테이블을 어떻게 삭제합니까?

먼저 sp_droparticle, sp_dropmergearticle 또는 게시 속성 - <게시> 대화 상자를 사용하여 게시에서 아티클을 삭제한 다음 데이터베이스에서 DROP <Object>삭제합니다. 구독이 추가된 후에는 스냅샷 또는 트랜잭션 게시에서 아티클을 삭제할 수 없습니다. 먼저 구독을 삭제해야 합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.

게시된 테이블에 열을 추가하거나 삭제하려면 어떻게 해야 하나요?

SQL Server는 열 추가 및 삭제를 포함하여 게시된 개체에 대한 다양한 스키마 변경을 지원합니다. 예를 들어, 게시자에서 ALTER TABLE … DROP COLUMN을(를) 실행하면 해당 문이 구독자로 복제된 다음 실행되어 해당 열을 삭제합니다. SQL Server 2005(9.x) 이전 버전의 SQL Server를 실행하는 구독자는 저장 프로시저 sp_repladdcolumn 및 sp_repldropcolumn 통해 열을 추가 및 삭제할 수 있습니다. 자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하세요.

복제 유지 관리

구독자의 데이터가 게시자의 데이터와 동기화되는지 확인하려면 어떻게 해야 하나요?

유효성 검사를 사용합니다. 유효성 검사는 지정된 구독자가 게시자와 동기화되는지 여부를 보고합니다. 자세한 내용은 복제된 데이터의 유효성 검사를 참조하세요. 유효성 검사는 올바르게 동기화되지 않은 행이 있는 경우 해당 행에 대한 정보를 제공하지 않지만 tablediff 유틸리티 에서는 이러한 정보를 제공합니다.

기존 발행물에 테이블을 추가하려면 어떻게 해야 하나요?

테이블(또는 다른 개체)을 추가하기 위해 게시 또는 구독 데이터베이스에 대한 작업을 중지할 필요가 없습니다. 게시 속성 - <게시 대화 상자 또는 저장 프로시저 sp_addarticle sp_addmergearticle 통해 게시>에 테이블을 추가합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.

발행물에서 테이블을 제거하려면 어떻게 해야 하나요?

sp_droparticle, sp_dropmergearticle 또는 게시 속성 - <게시 대화 상자를 사용하여 발행물>에서 테이블을 제거합니다. 구독이 추가된 후에는 스냅샷 또는 트랜잭션 게시에서 아티클을 삭제할 수 없습니다. 먼저 구독을 삭제해야 합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.

구독을 다시 초기화해야 하는 작업은 무엇인가요?

구독을 다시 초기화해야 하는 아티클 및 게시 변경 내용이 많이 있습니다. 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.

스냅샷이 무효화되는 작업은 무엇인가요?

스냅샷을 무효화하고 새 스냅샷을 생성해야 하는 아티클 및 게시 변경 내용이 많이 있습니다. 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.

복제를 제거하려면 어떻게 해야 하나요?

데이터베이스에서 복제를 제거하는 데 필요한 작업은 데이터베이스가 게시 데이터베이스, 구독 데이터베이스 또는 둘 다로 제공되었는지 여부에 따라 달라집니다.

복제할 트랜잭션 또는 행이 있는지 확인하려면 어떻게 해야 하나요?

트랜잭션 복제의 경우 복제 모니터의 저장 프로시저 또는 배포되지 않은 명령 탭을 사용합니다. 자세한 내용은 배포 데이터베이스(복제 Transact-SQL 프로그래밍) 에서 복제된 명령 및 기타 정보 보기 및 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.

병합 복제의 경우 sp_showpendingchanges저장 프로시저를 사용합니다. 자세한 내용은 sp_showpendingchanges(Transact-SQL)를 참조하세요.

배포 에이전트는 얼마나 뒤처지나요? 다시 초기화해야 하나요?

복제 모니터에서 sp_replmonitorsubscriptionpendingcmds 저장 프로시저 또는 배포되지 않은 명령 탭을 사용합니다. 저장 프로시저 및 탭 표시:

  • 선택한 구독자에 배달되지 않은 배포 데이터베이스의 명령 수. 명령은 하나의 Transact-SQL DML(데이터 조작 언어) 문 또는 하나의 DDL(데이터 정의 언어) 문으로 구성됩니다.

  • 명령을 구독자에 배달하는 데 걸리는 예상 시간. 이 값이 스냅샷을 생성하여 구독자에 적용하는 데 필요한 시간 값보다 더 큰 경우 구독자를 다시 초기화하십시오. 자세한 내용은 구독 다시 초기화를 참조하세요.

자세한 내용은 sp_replmonitorsubscriptionpendingcmds(Transact-SQL)복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.

복제 및 기타 데이터베이스 기능

복제는 로그 전달 및 데이터베이스 미러링과 함께 작동하나요?

복제가 클러스터링과 함께 작동하나요?

있음. 모든 데이터가 클러스터의 한 디스크 세트에 저장되므로 특별히 고려해야 할 사항은 없습니다.

SQL 복제를 기반으로 하는 타사 솔루션의 문제를 해결하려면 어떻게 해야 하나요?

지원을 받으려면 타사 공급업체에 문의하여 문제를 해결하는 것이 좋습니다. 일반적으로 공급업체가 문제를 SQL Server와 함께 제공하는 핵심 복제 문제로 격리하는 경우 Microsoft 지원은 추가 지원을 위해 관련됩니다.