Berachain 탐색: 원주율 프로토콜 및 기술 요점 분석
저자: Beosin
Berachain은 시장에서 많은 주목을 받고 있는 블록체인으로, 여러 혁신과 특성을 갖추고 있어 많은 커뮤니티와 개발자들의 관심을 끌고 있습니다. Berachain은 PoL 메커니즘과 3대 토큰 모델을 통해 체인 상의 유동성 문제에 대한 독특한 해결책을 제공합니다. Berachain이 곧 메인넷을 출시함에 따라, Berachain은 초기 생태계 사용자와 프로젝트를 유치하고 지원하기 위해 인센티브 프로그램과 TGE를 출시했습니다.
본 글에서는 Berachain의 아키텍처, 3대 원주율 애플리케이션의 설계 및 관련 계약 실행 프로세스를 설명하여 독자가 Berachain을 깊이 이해할 수 있도록 돕겠습니다.
1. 아키텍처
Berachain은 Layer1 EVM 동등 체인으로, 3중 토큰 모델과 유동성 합의 메커니즘(Proof-of-Liquidity)을 도입하여 유동성, 합의 및 거버넌스 메커니즘을 통합하여 체인 생태계의 유동성 제공자에게 더 많은 인센티브를 제공합니다.
Berachain 아키텍처는 주로 두 개의 레이어로 나뉩니다:
(1) BeaconKit 합의 레이어. 이 레이어는 블록체인의 합의 메커니즘을 담당하며, CometBFT를 기본 합의 알고리즘으로 사용하고, 이 기반 위에 Proof-of-Liquidity를 도입합니다. CometBFT는 Tendermint 기반의 합의 프로토콜로, 빠른 거래 확인과 비잔틴 내결함성(BFT) 기능을 제공합니다. Berachain에서 BeaconKit은 CometBFT를 추가로 캡슐화하여 이더리움 가상 머신(EVM)과 호환되는 실행 환경과 상호작용할 수 있게 합니다.
(2) EVM 실행 레이어. Berachain의 실행 레이어는 이더리움과 동일한 가상 머신인 EVM(Ethereum Virtual Machine)을 사용하여, Berachain이 기존 이더리움 도구 체인, 스마트 계약 및 생태계를 지원하도록 보장합니다. 이를 통해 개발자는 이더리움의 스마트 계약과 탈중앙화 애플리케이션(dApps)을 Berachain으로 직접 이식할 수 있습니다.
Berachain의 노드 유형은 검증 노드와 RPC 노드의 두 가지로 나뉘며, 각 노드는 전체 노드 또는 아카이브 노드로 구성될 수 있습니다. 각 유형의 노드는 실행 클라이언트와 합의 클라이언트의 조합으로, 실행 측면에서 모든 EVM 실행 클라이언트를 지원하며, Berachain이 구축한 BeaconKit 합의 클라이언트 및 프레임워크와 쌍을 이룹니다.
● 실행 클라이언트: 스마트 계약 코드를 실행하고 상태 변화를 관리하며 거래 로직을 실행합니다. Ethereum Engine API를 사용하여 Berachain은 6종의 주요 EVM 실행 클라이언트를 지원합니다: Geth, Erigon, Nethermind, Besu, Reth 및 Ethereumjs.
● 합의 클라이언트: 네트워크 노드 간의 합의를 도출하여 거래 및 블록의 검증과 정렬을 보장합니다. Berachain은 BeaconKit을 합의 클라이언트로 사용합니다.
2. Proof-of-Liquidity (PoL)
Berachain의 Proof-of-Liquidity (PoL) 토큰 경제 모델은 주로 세 가지 핵심 토큰을 포함합니다:
$BERA: BERA는 Berachain의 원주율 가스 토큰으로, 거래 수수료를 지불하고 검증자의 스테이킹 토큰으로 사용됩니다.
$BGT: Berachain의 거버넌스 토큰으로, 체인 상의 거버넌스, 보상 분배 및 검증자의 위임에 참여하는 데 사용됩니다. 이 토큰은 일반적인 거버넌스 토큰과 비교할 때 독특한 점이 있으며, BGT는 soulbound 토큰으로, 이는 전송할 수 없음을 의미합니다. 즉, 사용자는 서로 다른 주소 간에 BGT를 전송할 수 없지만, 이 토큰은 1:1 비율로 BERA로 교환할 수 있습니다. 이는 단방향 작업이며, BERA는 BGT로 교환할 수 없습니다. BGT는 전송할 수 없는 soulbound 토큰으로, 실제로 Berachain 생태계에 참여하는 사용자(예: 유동성 제공, 대출 등)만이 거버넌스에 참여할 수 있습니다.
$HONEY: Berachain의 원주율 스테이블 코인으로, Berachain 생태계 내외에서 안정적이고 신뢰할 수 있는 교환 수단을 제공합니다. 공식적으로 그 가치는 1달러와 연동되어 있다고 소개됩니다. HONEY는 완전히 담보된 스테이블 코인으로, 화이트리스트에 있는 담보를 금고에 예치하여 발행할 수 있습니다. 다양한 담보는 서로 다른 발행 비율을 가지며, 이는 BGT 거버넌스에 의해 결정됩니다.
Berachain이 채택한 Proof of Liquidity (PoL) 메커니즘은 전통적인 합의 메커니즘(예: PoW 또는 PoS)과는 다릅니다. PoL은 모든 체인 생태계의 유동성 제공자가 기여한 내용을 고려합니다. 유동성 채굴 및 스테이킹을 통해 Berachain은 PoL을 활용하여 더 많은 사용자가 Berachain의 전체 생태계에 참여하도록 유도합니다. 아래는 Berachain의 원주율 탈중앙화 거래소 BEX를 예로 들어 PoL의 주요 프로세스를 소개합니다:
- 초기 스테이킹: 사용자는 먼저 BERA를 스테이킹하여 블록 생성 자격을 가진 검증자가 됩니다.
- 블록 제안: 활성 검증자 중 하나가 무작위로 선택되어 새로운 블록을 제안합니다.
- 보상 분배: 제안된 블록의 검증자는 거버넌스 토큰(BGT)을 받고, 이를 체인 생태계 내의 다양한 보상 금고에 분배합니다. 이 매개변수는 각 검증자가 설정합니다.
- 유동성 제공자: BEX에 대해 유동성 제공자는 BEX 풀에 토큰(예: HONEY 및 BERA)을 예치하여 유동성을 제공하고, 유동성 증명 토큰(예: $HONEY-WBERA)을 얻어 이를 보상 금고에 스테이킹하여 기여도에 따라 BGT 보상을 받습니다.
- 위임 거버넌스 토큰: BGT 보유자는 이를 활성 검증자에게 위임하여 해당 검증자가 블록 제안 시 보상을 분배받는 비율을 증가시켜 BGT의 분배에 영향을 미치지만, 이 비율은 검증자의 블록 생성 확률에는 영향을 미치지 않습니다.
현재 거버넌스 토큰 BGT의 주요 출처는 Berachain의 세 가지 공식 원주율 DApp입니다. 하나는 Berachain의 원주율 탈중앙화 거래소 BEX, 다른 하나는 Berachain의 원주율 비관리 대출 프로토콜 Bend, 마지막으로 원주율 탈중앙화 레버리지 거래 플랫폼 Berps입니다. 본문에서는 이 세 가지 프로젝트의 비즈니스 논리를 주로 소개합니다.
3. PoL과 BEX
BEX (Berachain Exchange)는 Berachain의 원주율 탈중앙화 거래소(DEX) 프로토콜로, 사용자가 중개인 없이 임의의 암호 자산 쌍을 거래할 수 있도록 합니다. BEX는 Berachain 생태계의 중요한 구성 요소로, 원주율 탈중앙화 거래소로서 PoL 합의 메커니즘과 긴밀히 결합되어 있습니다:
- 유동성 풀: BEX의 유동성 풀은 거버넌스를 통해 PoL 보상 금고로 업그레이드될 수 있어 BGT 보상을 받을 자격이 있습니다.
- 유동성 제공자: 사용자는 BEX에서 유동성을 제공하고 LP 토큰을 얻은 후, 이 토큰을 PoL 보상 금고에 스테이킹하여 BGT 보상을 얻을 수 있습니다.
- 거버넌스: BEX의 거버넌스 메커니즘은 제안을 통해 새로운 유동성 풀을 PoL 보상 금고의 화이트리스트에 추가할 수 있도록 하여, 이러한 풀들이 BGT 보상을 받을 수 있도록 합니다.
테스트 체인에서 계약을 연구한 결과, 현재 BEX의 주요 코드 아키텍처는 세 부분으로 나뉘며, 첫 번째 부분은 BeraCrocMultiSwap 계약(https://bartio.beratrail.io/address/0x21e2C0AFd058A89FCf7caf3aEA3cB84Ae977B73D)으로, 이 계약은 토큰의 다중 경로 교환을 담당하며, 사용자의 토큰 교환이 중간 토큰을 포함할 경우 이 계약을 호출해야 합니다.
두 번째 부분은 CrocSwapDex 계약(https://bartio.beratrail.io/address/0xAB827b1Cc3535A9e549EE387A6E9C3F02F481B49)으로, 이 계약은 사용자와 풀 간의 모든 작업을 담당하며, 유동성 추가 및 제거, 토큰 교환 등을 포함합니다.
세 번째 부분은 Path 계약으로, 체인 상의 BEX는 총 8종의 Path 계약을 보유하고 있으며, 각 Path 계약은 서로 다른 기능에 해당합니다. 사용자가 CrocSwapDex 계약에 전달하는 User Cmd 매개변수에 따라 CrocSwapDex는 해당 Path를 호출하여 지정된 로직을 완료합니다.
프로젝트의 주요 논리는 서로 다른 Path 기능에 따라 다음과 같이 분류됩니다:
- BootPath: 계약 업그레이드 관련 기능
- ColdPath: 거래와 관련 없는 관리 로직, 풀 초기화 및 초과 담보 기능 포함
- HotPath: 거래에서 가장 일반적인 로직, 토큰의 단일 단계 교환
- KnockoutPath: 거래가 예정된 유동성 경계점 또는 가격점(일명 bump point)을 초과할 때 이 이벤트가 발생하여 유동성을 재평가하거나 조정합니다. 일반 거래 경로와 달리 유동성 경계를 초과하는 코드는 복잡하여 일반 교환을 처리하는 HotPath에 완전히 포함될 수 없으므로 분리하여 처리합니다.
- LongPath: 긴 체인 복합 주문 거래(Long-chain Compound Orders)를 처리하며, 일반적으로 탈중앙화 거래 플랫폼이나 유동성 풀에서 여러 단일 작업이 조합된 복잡한 거래를 의미합니다.
- MicroPaths: 단일 원자 작업과 관련된 중간 구성 요소를 포함하며, 복잡한 복합 작업을 실행할 때 미리 로드된 유동성 곡선의 맥락에서 호출될 수 있습니다.
- SafeModePath: DEX 계약이 비상 상태에 들어갈 때 모든 다른 작업을 제한하고 특정 관리 작업만 허용하는 것을 주요 목표로 합니다.
- WarmPath: 유동성 제공자의 핵심 작업 로직을 포함하며, 환경 유동성 발행(Mint ambient liquidity), 집중 범위 유동성 발행(Mint concentrated range liquidity), 환경 유동성 소각(Burn ambient liquidity), 집중 범위 유동성 소각(Burn concentrated range liquidity)을 포함합니다.
3.1 유동성 추가
본 글에서는 유동성 추가 및 토큰 교환 두 가지 일반적인 로직을 주로 소개합니다. 사용자가 유동성을 추가할 때, 먼저 프론트엔드 또는 계약을 통해 CrocSwapDex 계약의 userCmd 함수를 호출하며, 여기서 callpath는 DELEGATECALL을 통해 명령 호출을 전달할 해당 Path 계약을 식별하는 16비트 인덱스입니다.
그 후 계약은 ProxyCaller 계약의 callUserCmd 함수를 호출하여 전달된 proxyIdx에 따라 해당 Path 계약을 프록시 호출합니다. 이때 WarmPath 계약이 호출됩니다. WarmPath 계약의 commitLP 함수는 전달된 매개변수에 따라 유동성 추가 분기 로직에 들어가며, 계약은 MINTAMBIENTLIQLP, MINTAMBIENTBASELP, MINTAMBIENTQUOTE_LP 세 가지 유동성 추가 로직을 포함하여, 각각 지정된 수량의 유동성을 직접 추가하거나 풀의 base 토큰 또는 quote 토큰으로 평가하여 유동성 추가 수량을 계산합니다.
마지막으로 WarmPath 계약의 mintAmbientLiq 함수는 유동성을 발행하는 주요 책임을 지며, 이 계약은 SettleLayer 계약의 settleFlows 함수를 호출하여 사용자에게 해당 유동성 증명 토큰을 발행합니다.
유동성 제거 로직은 유동성 추가와 유사하므로 본문에서는 구체적으로 설명하지 않겠습니다.
3.2 토큰 교환
사용자가 BEX를 사용하여 토큰을 교환할 때, 먼저 BeraCrocMultiSwap 계약의 multiSwap 함수를 호출하며, 이 함수는 교환 경로에 따라 단계적으로 CrocSwapDex 계약에서 교환을 수행합니다. 그 후 CrocSwapDex 계약의 caluserCmd 함수를 호출하여 지정된 HotPath 또는 KnockoutPath에서 구체적인 교환 로직을 실행하며, 여기서는 가장 일반적인 HotPath 계약을 사용합니다. HotPath는 MarketSequencer의 swapOverPool 함수를 호출하여 교환할 토큰 수량을 계산합니다. 마지막으로 HotPath 계약은 SettleLayer 계약의 settleFlows 함수를 호출하여 사용자에게 교환 후 얻은 목표 토큰을 전송합니다.
종합적으로 볼 때, BEX는 전통적인 uniswap V2 등 DEX에 비해 다음과 같은 특성을 가지고 있습니다:
곡선 상태(CurveState) 관리
곡선 스냅샷(Snapshotting CurveState): 가스 소비를 최적화하기 위해 BEX는 현재 곡선 상태(CurveState)를 체인 상의 저장소(EVM Storage)에서 메모리로 복사하고, 거래가 완료된 후 수정된 상태를 다시 체인에 기록합니다.
스냅샷에 저장된 정보에는 가격 루트(priceRoot), 유동성 씨앗(ambientSeeds) 및 집중 유동성(concLiq_)이 포함됩니다. 유동성 씨앗 등 개념에 대한 자세한 내용은 Ambient Finance (Crocswap)의 백서를 참조하시기 바랍니다: https://crocswap-whitepaper.netlify.app/
거래 실행(Swap Execution)
단계별 거래 실행: BEX의 코드 아키텍처는 거래를 단계별로 실행할 수 있도록 하며, 특히 대규모 거래 시 여러 유동성 경계를 초과하게 됩니다(예: Uniswap V3의 tick). 유동성 경계를 초과할 때 유동성과 가격을 재조정해야 합니다. 반복 계산: 각 유동성 구간(또는 tick)을 순회함으로써 시스템은 거래의 유동성을 점진적으로 소모하거나 축적하여 거래를 완료하거나 사용자의 가격 제한에 도달할 때까지 진행합니다.
비트맵 구조: Uniswap V3와 유사하게, Ambient DEX는 비트맵을 사용하여 각 가격 범위 내의 유동성이 존재하는지 여부를 표시하고, 비트맵을 통해 다음 사용 가능한 유동성 구간을 빠르게 찾습니다. 그러나 현재 BEX 체인 상의 풀 유동성은 환경 유동성을 채택하고 있으며, 유동성 제공자는 전역적으로 유동성을 제공하고 있으므로, 특정 가격 방식으로 집중 유동성을 추가하는 것이 아니기 때문에 현재 토큰 교환 작업에서 uniswap V2와 큰 차이가 없습니다.
4. PoL과 Bend
Bend는 Bera 체인上的 비관리 대출 프로토콜로, 핵심은 Berachain 생태계에 기본적인 대출 서비스를 제공하는 것입니다. 이 프로젝트는 Berachain 생태계의 중요한 구성 요소로, 공식 대출 시장으로서 PoL 합의 메커니즘과 긴밀히 결합되어 있습니다.
대출자는 암호화폐를 담보로 HONEY 토큰을 대출받을 수 있으며(예: wBTC 등), 대출하는 동안 일정량의 거버넌스 토큰을 얻을 수 있습니다. 이는 PoL 합의 메커니즘이 BGT의 분배를 완성하는 데 도움을 줍니다. HONEY 제공자는 HONEY의 유동성을 제공하여 대출에서 발생하는 이자 수익을 얻을 수 있습니다.
Bend의 주요 참여자는 세 가지입니다:
- $HONEY 토큰의 유동성을 제공하는 유동성 제공자(Suppliers).
- 암호화폐를 담보로 HONEY 토큰을 대출받는 대출자(Borrowers).
- 프로토콜의 지급 능력을 보장하는 청산인(Liquidators).
아래 그림은 이 프로젝트의 주요 구조입니다:
테스트 체인에서 계약을 연구한 결과, 현재 유동성 제공자는 supply 인터페이스를 통해 HONEY 토큰을 1:1 비율로 예치하여 해당 수량의 AHONEY 토큰을 보상으로 받습니다. 시간이 지남에 따라 이 사용자들이 얻는 AHONEY 토큰의 잔액은 이자의 증가에 따라 증가하며, 이는 대출 풀의 생태계를 유지하는 데 도움을 주고, 대출자가 항상 대출할 수 있는 자금을 보장합니다. 이후 유동성 제공자는 withdraw 인터페이스를 통해 1:1 비율로 AHONEY 토큰을 사용하여 해당 수량의 HONEY 토큰을 인출하여 수익을 실현할 수 있습니다.
대출자는 borrow 인터페이스를 통해 담보를 담보로 제공하여 담보 가치 이하의 HONEY 토큰을 대출받고, 해당 수량의 vdHONEY 즉, 부채 토큰을 얻습니다. vdHONEY 토큰은 HONEY 토큰과 유사하며, 시간이 지남에 따라 수량이 증가하여 대출자가 더 많은 HONEY 토큰을 상환해야 합니다. 그러나 Bera 체인에서는 대출자가 HONEY 토큰을 대출받는 동시에 일정량의 거버넌스 토큰(BGT)을 얻으며, 이는 대출자의 대출 의욕을 자극하고 대출 풀의 생태계를 유지하며 동시에 PoL 합의에 기여합니다.
Bend에서는 누구나 청산인이 될 수 있습니다. 대출자의 건강 계수가 1 미만일 경우, 이는 대출자의 담보 가치가 부채 가치를 충당할 수 없음을 의미하며, 청산인은 청산을 시작할 수 있으며, 담보의 5% 가치를 청산 보상으로 받을 수 있어 청산인을 유도합니다.
4.1 유동성 추가
유동성 제공자가 유동성을 예치할 때, supply 함수는 먼저 현재의 준비금 캐시와 이자율을 업데이트하여 준비금 캐시와 이자율의 건강을 유지하고 최신 준비금 캐시 데이터를 언제든지 얻을 수 있도록 합니다. 그 후 현재의 ATOKEN 토큰이 발행 한도에 도달했는지 검증하여 과도한 ATOKEN 토큰 발행을 방지합니다.
이러한 검사와 업데이트가 모두 통과하면, 유동성 제공자에게 해당 수량의 ATOKEN 토큰이 1:1로 발행됩니다. 유동성 제공자가 유동성을 인출할 때, withdraw 함수는 먼저 현재의 준비금 캐시와 이자율을 업데이트하고, 최신 이자 수량에 따라 사용자가 보유한 최신 ATOKEN 토큰 잔액을 계산하여 1:1 비율로 해당 담보 토큰을 인출합니다.
여기서 유동성 제공자가 대출을 진행한 경우, 대출 인자가 건강한 경우에만 해당 수량의 유동성을 인출할 수 있습니다. 현재 Berachain에서는 HONEY 토큰만 대출 자산으로 대출할 수 있으며, 다른 담보는 대출을 통해 이자를 얻을 수 없습니다.
4.2 대출
대출자가 Bend를 사용하여 대출할 때, 먼저 충분한 수량의 담보를 supply 함수를 통해 풀에 담보로 제공해야 하며, 그 후 borrow 함수를 호출하여 대출을 진행합니다. borrow 함수는 먼저 준비금 캐시를 업데이트하여 최신 준비 정보를 보장하고, validateBorrow 함수를 호출하여 이번 대출의 합법성을 검증합니다. 검증에는 대출 한도, 담보 가치, 사용자 신용 등이 포함됩니다. 이러한 검증이 통과하면, 담보 가치에 따라 해당 수량의 부채 토큰인 vdHONEY 토큰이 발행되어야 HONEY 토큰을 받을 수 있습니다.
대출자가 대출금을 상환해야 할 때, repay 함수 역시 먼저 준비금 캐시와 이자율을 업데이트하고, 준비금 캐시와 대출 이자율에 따라 대출자가 이번에 상환할 HONEY 토큰 수량을 계산합니다. 성공적으로 상환한 후에는 해당 수량의 vdHONEY 토큰이 소각됩니다. 대출자는 성공적으로 충분한 수량의 vdHONEY 토큰을 상환하여 현재 부채가 담보를 인출할 때 여전히 건강한 상태일 때만 withdraw 함수를 사용하여 해당 수량의 담보를 인출할 수 있습니다.
4.3 청산
대출자의 담보 가치가 부족할 경우, 누구나 liquidationCall 함수를 호출하여 청산인으로서 청산을 진행할 수 있습니다. liquidationCall 함수는 먼저 부채 캐시 데이터를 업데이트한 후 validateLiquidationCall 함수를 호출하여 대출자의 건강 계수 및 담보 가용성을 검사합니다. 대출자의 현재 부채 가치가 청산 한도를 초과하면 건강 계수가 너무 낮아집니다. 건강 계수가 1 미만일 경우, 청산인은 청산을 성공적으로 실행할 수 있으며, 대출자의 부채 토큰을 소각하고 담보를 준비금 금고 주소로 전송합니다. 청산인은 이 청산에서 담보의 5% 가치를 청산 보상으로 받을 수 있어 청산인을 유도합니다.
5. PoL과 Berps
Berachain Berps는 탈중앙화된 레버리지 거래 플랫폼으로, 영구 선물 계약 거래를 허용합니다. Berachain의 원주율 스테이블 코인 $HONEY는 모든 거래의 담보, 지출 및 예치의 기본 토큰입니다. 사용자는 $bHONEY 금고에 거래 유동성을 제공하여 수익을 얻을 수 있습니다. 금고 예치자는 Berps에서 발생하는 거래 수수료를 얻고, 거래자의 포지션의 거래 상대방으로 작용합니다. 또한, Berps의 금고는 PoL의 인센티브를 받을 수 있으며, 금고에 자금을 예치하는 사용자는 $BGT를 받을 수 있습니다.
현재 Berps는 테스트넷에上线되어 BTC, ETH, ATOM 및 TIA 네 가지 토큰의 U 본위 영구 계약 거래를 지원합니다.
Berps의 구조는 현재 시장에 있는 탈중앙화 영구 거래 플랫폼과 매우 유사하며, 주요 계약은 다음과 같습니다:
● Entrypoint: 사용자가 거래(청산 포함)를 수행하는 진입점입니다. Entrypoint 계약은 사용자가 시작한 거래가 합법적인지 확인하며, 검증을 통과하면 계약은 사용자에게 해당 거래를 생성합니다.
● FeesAccrued: 대출 수수료를 계산하고 관리합니다.
● FeesMarkets: 모든 거래 쌍 관련 수수료를 계산하고 관리합니다.
● Markets: 모든 거래 쌍의 매개변수와 제한을 관리합니다.
● Orders: 사용자가 제출한 거래 주문을 관리하고 사용자의 자금을 저장합니다.
● Settlement: 거래의 상태 변화를 업데이트합니다.
● Vault: 거래자의 상대방으로서 거래의 유동성을 제공합니다. 사용자는 자금을 Vault에 예치하여 플랫폼 수수료 수익과 PoL의 토큰 인센티브를 얻을 수 있습니다.
6. 요약
종합적으로 볼 때, Berachain은 Cosmos SDK를 기반으로 구축된 EVM 동등 L1 블록체인으로, 독특한 유동성 증명(Proof-of-Liquidity, PoL) 합의 메커니즘을 채택하여 Berachain에 유동성을 제공하는 사용자에게 PoL 메커니즘의 보상을 제공합니다. PoL을 활용하여 Berachain은 체인의 자금 유동성과 안전성을 강화했습니다. 다른 블록체인과 비교할 때, Berachain은 원주율 BEX, Bend 및 Berps 애플리케이션을 통해 사용자에게 토큰 교환, 유동성 채굴, 대출, 영구 거래 등 일련의 DeFi 서비스를 제공하며, PoL과 결합하여 Berachain이 DeFi의 거래 깊이와 사용자 경험에서 뛰어난 성과를 낼 수 있도록 합니다.