라우팅 모드를 사용하여 사설 네트워크 부하 분산기를 생성하기
VNF(Virtual Network Function) 디바이스는 가상 머신에서 실행되는 가상 네트워크 서비스(예: 라우터 및 방화벽)입니다. 실제 네트워크 디바이스를 구매하는 것보다 IBM Cloud VPC을(를) 사용하면 VNF 디바이스를 프로비저닝하여 더욱 향상된 확장성을 얻을 수 있습니다.
IBM Cloud VPC에서 서버를 대상으로 하는 트래픽은 정상 VNF 디바이스로 전달되어야 합니다. 그렇지 않으면 트래픽 중단이 발생합니다. 라우팅 모드에서 네트워크 로드 밸런서를 사용하여 상태 검사를 수행하고 워크로드가 정상적인 VNF 디바이스를 통해서만 이동하도록 확인할 수 있습니다. 이로 인해 라우팅 모드를 사용하는 네트워크 로드 밸런서는 VNF 디바이스만을 백엔드 대상으로 지원합니다.
라우팅 모드로 NLB를 배치할 수 있는 다양한 방법에 대한 자세한 예는 HA VNF 배치 를 참조하십시오.
시작하기 전에
라우팅 모드가 활성화된 네트워크 부하 분산 장치를 구성하려면 다음 전제 조건이 충족되었는지 확인하십시오
-
VPC가 없는 경우, NLB를 생성하려는 리전에서 VPC를 생성하십시오.
-
VPC의 원하는 구역에 서브넷을 작성하십시오.
-
라우팅 모드를 지원하려면 먼저 NLB에 대한 서비스-서비스 인증 정책을 작성해야 합니다. 이를 수행하려면 다음 단계를 따르십시오.
- 브라우저에서 IBM Access Management에 로그인하십시오.
- 권한 부여를 클릭한 후 작성을 클릭하십시오.
- 소스 서비스의 경우 VPC 인프라 서비스를 선택하십시오. 범위 액세스를 설정하려면 ‘선택한 속성에 따른 리소스’ > ‘리소스 유형’ > ‘VPC용 로드 밸런서’를 선택하십시오.
- 대상 서비스의 경우 VPC 인프라 서비스를 선택하십시오. 범위 액세스를 위해 ‘선택한 속성에 따른 리소스’ > ‘리소스 유형’ > ‘가상 사설 클라우드’를 선택하십시오.
- 편집기 확인란을 선택하여 편집기에 액세스한 다음, 권한 부여를 클릭합니다.
다음 목록은 라우팅 모드가 사용으로 설정된 네트워크 로드 밸런서에 대한 몇 가지 중요한 고려사항을 자세히 설명합니다.
- NLB 라우트 모드에는 두 개의 IP 주소 (활성/대기) 가 있습니다.
- NLB 라우트 모드는 투명하도록 설계되었습니다. 장애 복구가 발생하면 라우트 모드는 동일한 VPC에서 작성된 모든 라우팅 규칙을 대기 어플라이언스 IP의
next_hop로 업데이트합니다. 결과적으로, 두 IP 모두 라우트 모드에서 NLB의 수명 동안 사용될 수 있습니다. - Transit VPC 구성의 경우
vpc-hub에서 NLB를 배치하고vpc-spoke에서 egress 라우트를 구성할 수 있습니다. 이는vpc-hub에서 라우트 모드를 사용하여 NLB로 다시 데이터를 강제 실행합니다. 출력 규칙을 변경할 필요가 없도록vpc-spoke에 대한 입력 규칙과 동일한 입력 규칙을vpc-hub에 추가해야 합니다. 트래픽이vpc-hub에 도달하면, 진입 라우팅 규칙이next_hop을 덮어쓰고 이를 기본 어플라이언스로 보냅니다.
UI를 사용하여 라우팅 모드를 사용하는 네트워크 로드 밸런서 작성
IBM Cloud 콘솔을 사용하여 라우팅 모드의 Network Load Balancer for VPC 를 생성하고 구성하려면 다음 단계를 따르십시오
-
브라우저에서 IBM Cloud 콘솔을 열고 계정에 로그인하세요.
-
탐색 메뉴
선택한 다음 인프라
> 네트워크 > 로드 밸런서를 클릭합니다.
-
페이지의 오른쪽 상단에 있는 **새 로드 밸런서 +**를 클릭하십시오.
-
주문 양식에서 다음 정보를 완료하십시오.
- 로드 밸런서에 고유 이름을 입력하고 VPC를 선택하십시오.
- 리소스 그룹을 선택하십시오. 기본 그룹을 사용하거나 목록(계정에 정의된 경우)에서 선택하십시오. 로드 밸런서를 생성한 후에는 리소스 그룹을 변경할 수 없습니다.
- NLB(Network Load Balancer) 타일 및 로드 밸런서를 배치할 서브넷을 선택하십시오.
- 개인용 유형을 선택하십시오.
- 선택적으로 태그를 추가합니다.
-
라우팅 모드 창에서 검사 목록 지시사항을 검토한 후 이 단추를 클릭하여 사용으로 설정하십시오.
프로비저닝이 완료된 후에는 라우팅 모드 NLB의 구성을 수정할 수 없습니다.
-
새 풀을 클릭하고 다음 정보를 지정하여 백엔드 풀을 작성하십시오.
-
풀의 이름을 입력하십시오(예:
my-pool). -
이 풀에서 인스턴스의 프로토콜을 입력하십시오. 풀의 프로토콜은 연관된 리스너의 프로토콜과 일치해야 합니다. 예를 들어, 리스너가 TCP인 경우 풀의 프로토콜은 TCP여야 합니다.
-
로드 밸런싱 알고리즘인 메소드를 선택하십시오. 다음과 같은 옵션이 표시됩니다:
- 라운드 로빈 - 요청을 차례대로 각 인스턴스에 전달합니다. 모든 인스턴스가 대략 동일한 수의 클라이언트 연결을 수신합니다.
- 가중치 라운드 로빈 - 요청을 해당 가중치에 비례하여 각각의 인스턴스로 전달합니다. 예를 들어, 인스턴스 A, B, C가 있고 이들의 가중치가 각각 60, 60, 30으로 설정되어 있다면, 인스턴스 A와 B는 동일한 수의 연결을 받게 되고, 인스턴스 C는 그 절반만큼의 연결을 받게 됩니다.
- 최소 연결 - 현재 연결 수가 가장 적은 인스턴스에 요청을 전달합니다.
- 가중치 기반 전달- IP 해시 알고리즘을 사용하여 할당된 가중치에 따라 대상 간에 패킷을 분산시키며 요청을 전달합니다. 각 패킷은 헤더 정보를 기반으로 전달되며, 대칭 및 비대칭 트래픽을 모두 지원합니다.
-
세션 고정성을 선택하고 없음을 선택하십시오.
-
상태 검사에서는 다음 옵션이 표시됩니다.
- 상태 점검 경로- 상태 점검 경로는 HTTP 을 상태 확인 프로토콜로 선택한 경우에만 적용됩니다. 상태 검사 경로는 풀의 인스턴스에 HTTP 상태 검사 요청을 보내기 위해 로드 밸런서가 사용하는 URL을 지정합니다. 기본적으로 상태 검사는 루트 경로(/)로 전송됩니다.
- 상태 프로토콜 - 로드 밸런서가 풀의 인스턴스에 상태 확인 메시지를 전송하는 데 사용되는 프로토콜입니다.
- 헬스 포트- 로드 밸런서가 헬스 체크 요청을 전송하는 포트입니다. 기본적으로 상태 확인은 트래픽이 인스턴스로 전송되는 동일한 포트에서 전송됩니다.
- 간격 - 두 번의 연속 상태 검사 시도 사이의 간격(초)입니다. 기본적으로 상태 확인은 5초마다 전송됩니다.
- 타임아웃(초)- 시스템이 상태 확인 요청에 대한 응답을 기다리는 최대 시간입니다. 기본적으로 로드 밸런서는 2초 동안 응답을 기다립니다.
- 최대 재시도 횟수- 인스턴스가 비정상 상태로 판정되기 전에 로드 밸런서가 수행하는 상태 확인 시도의 최대 횟수입니다. 기본적으로 두 번의 상태 확인이 실패하고 나면 인스턴스가 비정상 상태로 간주됩니다.
로드 밸런서는 상태가 정상적이지 않은 인스턴스로의 연결을 중단하지만, 여전히 해당 인스턴스의 상태를 지속적으로 모니터링하며, 상태가 다시 정상으로 판명될 경우(즉, 연속 두 번의 상태 점검을 성공적으로 통과할 경우) 해당 인스턴스의 사용을 재개합니다.
풀에 있는 인스턴스의 상태가 비정상적이지만 애플리케이션이 정상적으로 실행되고 있다고 생각된다면, 상태 프로토콜과 상태 경로 값을 다시 한 번 확인해 보십시오. 또한 인스턴스가 연결된 보안 그룹을 검사하여 해당 규칙에서 로드 밸런서와 인스턴스 간의 트래픽을 허용하는지 확인하십시오.
-
-
새 리스너를 클릭하고 이 리스너가 트래픽을 전달하는 백엔드 풀을 지정하십시오.
수신 요청을 수신하는 프로토콜과 요청이 수신되는 청취 포트는 이미 선택되어 있습니다.
-
주문 요약에는 가격 추정치가 표시됩니다. 클라우드 서비스 용어를 검토하십시오. 그런 다음 작성을 클릭하여 주문을 완료하십시오.
CLI를 사용하여 라우팅 모드를 사용하는 네트워크 로드 밸런서 작성하기
CLI를 사용하여 네트워크 부하 분산기를 생성하려면 다음 단계를 따르십시오
-
CLI 환경을 설정하십시오.
-
계정에 로그인하십시오. 비밀번호를 입력하면 시스템이 사용할 계정 및 지역에 대한 프롬프트를 표시합니다.
ibmcloud login --sso -
로드 밸런서를 작성하십시오.
ibmcloud is load-balancer-create nlb-test public --subnet 0896-b1f24514-89dc-4afd-b0e2-5489a43cf45c --family network --route-mode true샘플 출력:
Creating load balancer vnf under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs Provision status create_pending Operating status offline Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false -
NLB가 활성 상태가 될 때까지 대기한 후 다음 명령을 실행하십시오.
ibmcloud is load-balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512샘플 출력:
Getting load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs 10.241.64.16, 10.241.64.17 Provision status active Operating status online Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false사설 IP에 나열된 첫 번째 IP 주소를 기록해 두십시오. 사용자 정의 경로를 정의할 때 이 기능이 필요합니다.
-
풀을 추가하십시오.
ibmcloud is load-balancer-pool-create example-pool r006-df4c0e10-e882-4ade-a668-b2e518325d6a round_robin tcp 20 2 5 tcp샘플 출력:
Creating pool example-pool of load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com ID r014-474dca7d-aece-48a3-a636-fe8c3e654a3b Name example-pool Protocol tcp Algorithm round_robin Instance group ID Name - - Proxy protocol disabled Health monitor Type Port Health monitor URL Delay Retries Timeout tcp - 20 2 5 Session persistence Type Cookie name - - Members Provision status active Created 2021-09-14T18:03:56.274-05:00 -
멤버를 추가하십시오.
ibmcloud is load-balancer-pool-member-create r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 r014-474dca7d-aece-48a3-a636-fe8c3e654a3b 200 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf샘플 출력:
Creating member of pool r014-474dca7d-aece-48a3-a636-fe8c3e654a3b under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-1fdb900f-81a4-4204-839a-fcdee6c28e8a Port 200 Target 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf Weight 50 Health unknown Created 2021-09-14T19:27:11.077-05:00 Provision status create_pending
API를 사용하여 라우팅 모드의 네트워크 로드 밸런서 생성하기
API를 사용하여 라우팅 모드로 네트워크 로드 밸런서를 작성하려면 다음 단계를 수행하십시오.
-
API 환경을 설정하십시오.
-
다음 템플리트를 사용하여 API 요청 페이로드를 작성하십시오. 고유한 값을 사용하여 이름 및 서브넷을 수정하십시오.
{ "name": "nlb-vnf", "is_public": false, "profile": { "name": "network-fixed" }, "route_mode": true, "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024" } ] }이 페이로드를 JSON 파일로 저장하십시오. 다음 예에서 파일 이름은
create.json입니다. -
다음 명령을 사용하여 NLB를 작성하기 위한 요청을 작성하십시오. 먼저 페이로드에서 다음 속성을 설정해야 합니다:
route_mode은(는)true입니다.is_public은(는)false입니다.- 프로파일 이름은
network_fixed
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers?version=2021-07-30&generation=2" | jq이 예제에서는 MIT 라이선스로 제공되는 타사 도구인
jq를 파서로 사용합니다. 인스턴스를 생성할 때 사용할 수 있는 모든 VPC 이미지에jq가 미리 설치되어 있지는 않을 수 있습니다. 사용하기 전에jq를 설치해야 할 수도 있으며, 원한다면 다른 파서를 사용할 수도 있습니다.샘플 출력:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377862525Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "offline", "pools": [], "private_ips": [], "provisioning_status": "create_pending", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true } -
NLB가 활성 상태가 되면
GET호출을 수행하여 해당 상태를 페치하십시오.curl -s -H "Authorization: Bearer $IAM_TOKEN" -X GET "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d?version=2021-07-30&generation=2" | jq샘플 출력:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377863Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "online", "pools": [], "private_ips": [ { "address": "10.241.64.13" }, { "address": "10.241.64.14" } ], "provisioning_status": "active", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true }Private IPs에 나열된 첫 번째 IP 주소를 기록하십시오. 사용자 정의 경로를 정의할 때 이것이 필요합니다. -
풀을 추가하십시오.
먼저 다음 템플리트를 사용하여 API 요청 페이로드를 작성하십시오.
{ "algorithm": "round_robin", "protocol": "tcp", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" } }그런 후 다음 명령을 실행하십시오.
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools?version=2021-07-30&generation=2" | jq샘플 출력:
{ "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "algorithm": "round_robin", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" }, "protocol": "tcp", "created_at": "2021-09-14T21:56:08.202217034Z", "provisioning_status": "active", "proxy_protocol": "disabled" } -
NLB가 활성 상태가 될 때까지 기다린 후, 리스너를 추가하십시오.
리스너의 포트 범위는 다음과 같이 정의해야 합니다.
port_min은(는)1입니다.port_max은(는)65535입니다.
다음 템플리트를 사용하여 API 요청 페이로드를 작성하십시오.
{ "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328" }, "port_min": 1, "port_max": 65535, "protocol": "tcp" }다음 명령을 실행하십시오.
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create_vnf.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners?version=2021-07-30&generation=2" | jq샘플 출력:
{ "id": "r014-0ce87b15-9530-4624-a574-92495631f75d", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners/r014-0ce87b15-9530-4624-a574-92495631f75d", "protocol": "tcp", "port": 1, "port_min": 1, "port_max": 65535, "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver" }, "provisioning_status": "create_pending", "created_at": "2021-09-14T22:01:13.523172702Z", "accept_proxy_protocol": false, "https_redirect": null } -
풀 멤버를 추가하십시오.
먼저 다음 템플리트를 사용하여 API 요청 페이로드를 작성하십시오.
{ "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" } }그런 후 다음 명령을 실행하십시오.
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @add_member.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members?version=2021-07-30&generation=2" | jq샘플 출력:
{ "id": "r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members/r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "href": "https://us-east.iaas.cloud.ibm.com/v1/instances/0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::instance:0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" }, "weight": 50, "health": "unknown", "created_at": "2021-09-14T22:07:46.898295306Z", "provisioning_status": "create_pending" }
다음 단계
라우팅 모드를 사용하는 NLB가 활성 상태가 된 후 다음 단계를 따라 NLB 구성을 마무리합니다
-
다음 정보를 수집하십시오.
-
다음과 같이 사용자 정의 라우트를 구성하십시오.
- 백엔드 고객 워크로드 서브넷으로 향하는 모든 트래픽에 대해 다음 홉을 NLB 사설 IP로 설정하십시오.
- 클라이언트 서브넷을 대상으로 하는 트래픽의 경우 다음 홉을 NLB 사설 IP로 설정하십시오.
-
VNF 인스턴스(VNI)는 NLB와 동일한 서브넷에 있어야 하며, 풀에 멤버로 추가되어야 합니다.