μ•ˆλ…•ν•˜μ„Έμš”?

μ˜€λŠ˜μ€ Hyperledger Fabric의 μ„€μ •νŒŒμΌλ“€μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜κ³ μž ν•©λ‹ˆλ‹€.
μ„€μ •νŒŒμΌμ„ μˆ˜μ •ν•΄μ•Όν•˜λŠ” κ²½μš°λŠ” 일반적으둜 λ‹€μŒκ³Ό 같은 μΌ€μ΄μŠ€κ°€ λ κ²ƒμž…λ‹ˆλ‹€.

  • 멀버쉽 μ„œλΉ„μŠ€μ— ν΄λΌμ΄μ–ΈνŠΈ 및 Peer 등둝
  • Validating Peer 및 non-validating Peer μ„€μ •
  • Validating Peer 에 λŒ€ν•œ κΈ°λ³Έ ν™˜κ²½ μ„€μ •(Peer id, network id, root node λ“±)
  • λ³΄μ•ˆ μ„€μ • ( TLS μ„€μ • )
  • ν•©μ˜ μ•Œκ³ λ¦¬μ¦˜ λͺ¨λ“ˆ μ„€μ •

μ„€μ •νŒŒμΌμ„ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” λŒ€μƒ μ„œλΉ„μŠ€λŠ” “멀버쉽 μ„œλΉ„μŠ€”, “블둝체인 μ„œλΉ„μŠ€(Peer)” μž…λ‹ˆλ‹€.
그런데, 이미 μ•žμ„  λΈ”λ‘œκ·Έμ—μ„œ μ‹€μŠ΅μ„ ν•˜λ©΄μ„œ docker λͺ…령에 -e μ˜΅μ…˜μ„ ν†΅ν•΄μ„œ ν™˜κ²½λ³€μˆ˜λ₯Ό 각 λΈ”λ‘μ²΄μΈμ˜ μ„œλΉ„μŠ€μ— 전달을 ν•˜μ—¬ μ‚¬μš©μ„ ν–ˆμŠ΅λ‹ˆλ‹€.
즉, μš°λ¦¬κ°€ 블둝체인 λŸ°νƒ€μž„μ„ κ΅¬μ„±ν•˜λ©΄μ„œ μ„€μ •ν•΄μ•Όν•˜λŠ” νŒŒλΌλ―Έν„°λ“€μ€ 였늘 μ„€λͺ…ν•  λ‚΄μš©μ²˜λŸΌ 직접 μ„€μ •νŒŒμΌμ„ μˆ˜μ •ν•΄μ„œ μ‚¬μš©ν•΄λ„ 되고, μ§€κΈˆκΉŒμ§€ ν•΄μ™”λ˜λ°λ‘œ dockerλͺ…λ Ήμ—μ„œ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•΄μ„œ μ‚¬μš©μ„ν•΄λ„ λ©λ‹ˆλ‹€.

블둝체인 μ„œλΉ„μŠ€λ“€μ˜ μ„€μ •νŒŒμΌμ„ 직접 μˆ˜μ •ν•΄μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„€μ • 파일 μˆ˜μ •μ΄ν›„ docker commit λͺ…령을 ν†΅ν•΄μ„œ μƒˆλ‘œμš΄ μ΄λ―Έμ§€λ‘œ νƒœκΉ…μ„ ν•΄μ•Όν•©λ‹ˆλ‹€.
λ˜ν•œ, 직접 μˆ˜μ •ν–ˆλ‹€κ³  ν•˜λ”λΌκ³  docker λͺ…령에 -e μ˜΅μ…˜μœΌλ‘œ μ „λ‹¬λœ 섀정에 μš°μ„ μˆœμœ„κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, docker λͺ…λ ΉμœΌλ‘œ μ „λ‹¬λœ 섀정이 override ν•˜κ²Œ λ˜λ―€λ‘œ
ν•„μš”μ— 따라 적절히 μ‘°ν•©μœΌλ‘œ μ‚¬μš©ν•˜μ‹œλ©΄ 되며, λŒ€λΆ€λΆ„ κ°€λ³€μ μœΌλ‘œ λ³€ν™”ν•΄μ•Ό ν•  뢀뢄이 λ§Žμ€ 값듀에 λŒ€ν•΄μ„œλŠ” docker λͺ…λ Ήμ˜ μ˜΅μ…˜μœΌλ‘œ μ‚¬μš©ν•˜λŠ”κ²Œ νŽΈν•©λ‹ˆλ‹€. (λŒ€ν‘œμ μΈ 예둜, Logging level )

1. 멀버쉽 μ„œλΉ„μŠ€μ˜ μ„€μ •

멀버쉽 μ„œλΉ„μŠ€λŠ” μ•žμ„œ μ„€λͺ…ν•œ 것과 같이 Peer와 ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ μΈμ¦μ„œ λ°œκΈ‰κΈ°κ΄€μ˜ 역할을 ν•˜λ©° Peer 및 ν΄λΌμ΄μ–ΈνŠΈμ˜ 인증을 λ‹΄λ‹Ήν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.
μ—¬κΈ°μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 섀정을 ν•˜κ²Œ λ©λ‹ˆλ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈ, Peer을 μœ„ν•œ 아이디 μ„€μ •
  • λ³΄μ•ˆ μ„€μ • (TLS μ‚¬μš©μ—¬λΆ€)
  • μ„œλΉ„μŠ€ 포트

멀버쉽 μ„œλΉ„μŠ€μ˜ μ„€μ •νŒŒμΌ μœ„μΉ˜λŠ” λ‹€μŒμ˜ κ²½λ‘œμ— μžˆμŠ΅λ‹ˆλ‹€.

/opt/gopath/src/github.com/hyperledger/fabric/membersrvc/membersrvc.yaml

μ„€μ • νŒŒμΌμ„ μˆ˜μ •ν•˜κΈ° μœ„ν•΄μ„œ ν˜„μž¬ 싀행쀑인 μ»¨ν…Œμ΄λ„ˆ λ˜λŠ” 싀행쀑인 μ»¨ν…Œμ΄λ„ˆκ°€ μ—†λ‹€λ©΄ μƒˆλ‘œ μ‹€ν–‰ν•΄μ„œ μ»¨ν…Œμ΄λ„ˆ μ•ˆμœΌλ‘œ μ ‘μ†ν•©λ‹ˆλ‹€.

  • μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 쀑일 경우
docker exec -it < μ»¨ν…Œμ΄λ„ˆ ID λ˜λŠ” μ»¨ν…Œμ΄λ„ˆ 이름> bash
  • μ»¨ν…Œμ΄λ„ˆ μƒˆλ‘œ μ‹€ν–‰ ν•΄μ•Ό ν•˜λŠ” 경우
docker run -it hyperledger/fabric-membersrvc:x86_64-0.6.1-preview bash

μ ‘μ†ν•˜μ˜€μœΌλ©΄ λ‹€μŒμ˜ κ²½λ‘œμ— μžˆλŠ” μ„€μ • νŒŒμΌμ„ μ—΄μ–΄μ„œ μˆ˜μ •ν•©λ‹ˆλ‹€.

# cd membersrvc
# vi membersrvc.yaml

μ„€μ •νŒŒμΌμ„ μ—΄μ—ˆμœΌλ©΄ μ•žμ„  λΈ”λ‘œκ·Έμ—μ„œλ„ κ°•μ‘°ν•˜μ˜€μ˜€μ§€λ§Œ .yaml, .yamlνŒŒμΌμ€ λͺ¨λ“  곡백은 슀페이슀이며 듀여쓰기도 λ™μΌν•œ μœ„μΉ˜μ—¬μ•Ό ν•œλ‹€λŠ”κ±° λ‹€μ‹œ κΈ°μ–΅ν•˜κ³  μˆ˜μ •ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

일반적인 섀정은 λ‹€μŒμ˜ μ΅œμƒμœ„ ν•­λͺ©μ—μ„œ μˆ˜μ •ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

  • server:
  • security:
  • logging:
  • eca:

였늘 λΈ”λ‘œκ·Έμ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μΆ”κ°€ 및 log level의 μˆ˜μ • μœ„μ£Όλ‘œλ§Œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. ( ν–₯ν›„ λ³΄μ•ˆ 섀정을 μœ„ν•œ λΈ”λ‘œκ·Έμ—μ„œ 멀버쉽 μ„œλΉ„μŠ€μ™€ Validating Peer에 λŒ€ν•œ TLS 섀정에 λŒ€ν•΄μ„œ μ„€λͺ…ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. )
λ¨Όμ € κ°„λ‹¨νžˆ, 둜그 λ ˆλ²¨μ„ μˆ˜μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” logging: ν•˜μœ„ μ„€μ • ν•­λͺ©μ— κ°’λ§Œ μˆ˜μ •νžˆμ‹œλ©΄ λ©λ‹ˆλ‹€. μˆ˜μ • κ°€λŠ₯ν•œ λ‘œκ·Έλ ˆλ²¨μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • CRITICAL | ERROR | WARNING | NOTICE | INFO | DEBUG

μ—¬κΈ°μ—μ„œλŠ” 멀버쉽 μ„œλΉ„μŠ€μ˜ λͺ¨λ“  κΈ°λŠ₯에 λŒ€ν•΄μ„œ DEBUG둜 μ„€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈ μΆ”κ°€λ₯Ό ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ μΆ”κ°€λŠ” eca.users ν•­λͺ©μ—μ„œ μΆ”κ°€ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ 그림은 μˆ˜μ •ν•˜κΈ° μ „ eca.users 에 μ„€μ •λœ λ‚΄μš©μ˜ μΌλΆ€μž…λ‹ˆλ‹€.

μ„€μ •νŒŒμΌμ˜ λ‚΄μš©μ— 영문으둜 μ„€λͺ…λ˜μ–΄ μžˆμ§€λ§Œ eca.usersμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ Peer등을 ꡬ뢄은 숫자둜 κ΅¬λΆ„λ˜μ–΄ 지고 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • 1: client
  • 2: peer
  • 4: validator
  • 8: auditor

κ·ΈλŸ¬λ―€λ‘œ, ν΄λΌμ΄μ–ΈνŠΈ μΆ”κ°€λ₯Ό μœ„ν•œ 값은 1을 μ‚¬μš©ν•˜λ©΄ 되고, Validating peer μΆ”κ°€λ₯Ό μœ„ν•΄μ„œλŠ” 4λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ˜ν•œ, eca.afiliations λŠ” 그룹에 λŒ€ν•œ μ§€μ •μž…λ‹ˆλ‹€.

afiliationsλŠ” μœ μ§€ν•œμ±„ bank_a의 μ†Œμ†μœΌλ‘œ ν΄λΌμ΄μ–΄νŠΈλ₯Ό μœ„ν•œ ID( ID : test_user, PW : password )λ₯Ό μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

μˆ˜μ •λœ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒˆλ‘œμš΄ μ΄λ―Έμ§€λ‘œ μˆ˜μ •ν•˜κΈ° 전에 멀버쉽 μ„œλΉ„μŠ€ ꡬ동 μ‹œ μƒμ„±ν•œ μΈμ¦μ„œ 파일 및 μΊμ‹œ νŒŒμΌλ“€μ„ μ‚­μ œν•˜μ‹œλŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€.

μΈμ¦μ„œ νŒŒμΌμ„ μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒμ˜ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

# rm -rf /var/hyperledger/*

자, 둜그레벨 μˆ˜μ • 및 ν΄λΌμ΄μ–ΈνŠΈ ID μΆ”κ°€λ₯Ό ν•˜μ˜€μœΌλ©΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉ μ Έλ‚˜μ™€ μƒˆλ‘œμš΄ 이미지λ₯Ό μƒμ„±ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‹€μŒ λ¨Όμ € μ‹œμž‘ν•΄ λ³΄λŠ” 블둝체인 05 – 운영 λͺ¨λ“œμ—μ„œ 슀마트 μ»¨νŠΈλž™(μ²΄μΈμ½”λ“œ) 개발의 2번 ν•­λͺ©μ—μ„œλ„ μ»¨ν…Œμ΄λ„ˆμ˜ μƒˆλ‘œμš΄ μ΄λ―Έμ§€λ‘œ commitν•˜λŠ” 방법에 λŒ€ν•΄μ„œ μ°Έμ‘°λ°”λžλ‹ˆλ‹€.

1. 멀버쉽 μ„œλΉ„μŠ€μ— λŒ€ν•œ μ»¨ν…Œμ΄λ„ˆ ID 확인

λ‹€μŒμ˜ λͺ…령을 ν†΅ν•΄μ„œ μ»¨ν…Œμ΄λ„ˆ IDλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.(μ‘°νšŒν•΄μ„œ λ‚˜μ˜€λŠ” 리슀트의 제일 λ§ˆμ§€λ§‰ μ»¬λŸΌμ— μžˆλŠ” μ»¨ν…Œμ΄λ„ˆ 이름을 μ‚¬μš©ν•˜μ—¬λ„ λ¬΄λ°©ν•©λ‹ˆλ‹€.)

docker ps
2. μ»¨ν…Œμ΄λ„ˆ commit

μœ„μ—μ„œ ν™•μΈν•œ μ»¨ν…Œμ΄λ„ˆ ID ν˜Ήμ€ μ»¨ν…Œμ΄λ„ˆ 이름을 μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ μ΄λ―Έμ§€λ‘œ commit을 ν•©λ‹ˆλ‹€.

docker commit λͺ…λ Ήμ˜ λ§ˆμ§€λ§‰ μ•„κ·œλ¨ΌνŠΈλŠ” μƒμ„±ν•˜κ²Œ 될 이미지 λͺ…:νƒœκ·Έ μž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ 이미지 λͺ…을 주어도 되며, ν˜„ μ˜ˆμ œμ—μ„œλŠ” μ›λž˜ 이미지 이름을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€.

docker commit < μ»¨ν…Œμ΄λ„ˆ ID λ˜λŠ” μ»¨ν…Œμ΄λ„ˆ 이름> hyperledger/fabric-membersrvc:latest

3. μ»¨ν…Œμ΄λ„ˆ μž¬μ‹€ν–‰ 및 ν…ŒμŠ€νŠΈ

μƒˆλ‘œ μƒμ„±λœ 멀버쉽 μ„œλΉ„μŠ€ 이미지λ₯Ό docker-compose νŒŒμΌμ— μ μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆ μž¬μ‹€ν–‰ ν•œ λ’€, registrar API ν˜ΈμΆœμ„ ν•΄μ„œ μ‚¬μš©μžκ°€ 정상 λ“±λ‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

peerλ₯Ό μœ„ν•œ ID λ˜ν•œ 같은 λ°©λ²•μœΌλ‘œ μΆ”κ°€ν•©λ‹ˆλ‹€. λ‹€λ§Œ, μž…λ ₯ν•΄μ•Όν•  포맷은 Validating Peer 의 경우 {{id: 4 νŒ¨μŠ€μ›Œλ“œ}} μž…λ‹ˆλ‹€.

2. Peer μ„œλΉ„μŠ€μ˜ μ„€μ •

멀버쉽 μ„œλΉ„μŠ€μ— 이어 Peer μ„œλΉ„μŠ€μ˜ 섀정을 ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. Peer μ„œλΉ„μŠ€μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 ν•­λͺ©λ“€μ΄ 주둜 μ„€μ •λ˜λŠ” κ³³μž…λ‹ˆλ‹€.

  • REST Section
  • Logging Section
  • Peer Section

이 쀑 Peer Section μ—μ„œ μ„œλΉ„μŠ€μ— ν•„μš”ν•œ λŒ€λΆ€λΆ„μ˜ 섀정듀이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
μ„€μ •νŒŒμΌμ˜ μœ„μΉ˜λŠ” μ•„λž˜μ™€ 같은 곳에 μžˆμŠ΅λ‹ˆλ‹€.

/opt/gopath/src/github.com/hyperledger/fabric/peer/core.yaml

멀버쉽 μ„œλΉ„μŠ€μ™€ λ™μΌν•˜κ²Œ μ„€μ • νŒŒμΌμ„ μˆ˜μ •ν•˜κΈ° μœ„ν•΄μ„œ ν˜„μž¬ 싀행쀑인 μ»¨ν…Œμ΄λ„ˆ λ˜λŠ” 싀행쀑인 μ»¨ν…Œμ΄λ„ˆκ°€ μ—†λ‹€λ©΄ μƒˆλ‘œ μ‹€ν–‰ν•΄μ„œ μ»¨ν…Œμ΄λ„ˆ μ•ˆμœΌλ‘œ μ ‘μ†ν•©λ‹ˆλ‹€.

  • μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 쀑일 경우
docker exec -it < μ»¨ν…Œμ΄λ„ˆ ID λ˜λŠ” μ»¨ν…Œμ΄λ„ˆ 이름> bash
  • μ»¨ν…Œμ΄λ„ˆ μƒˆλ‘œ μ‹€ν–‰ ν•΄μ•Ό ν•˜λŠ” 경우
docker run -it hyperledger/fabric-peer:x86_64-0.6.1-preview bash

μ ‘μ†ν•˜μ˜€μœΌλ©΄ λ‹€μŒμ˜ κ²½λ‘œμ— μžˆλŠ” μ„€μ • νŒŒμΌμ„ μ—΄μ–΄μ„œ μˆ˜μ •ν•©λ‹ˆλ‹€.

# cd peer
# vi core.yaml

그럼, 이 μ„€μ •νŒŒμΌμ˜ ν•­λͺ©μ— λŒ€ν•΄μ„œ μ–΄λ–»κ²Œ 읽으면 λ˜λŠ”μ§€ 그리고 docker run λͺ…령에 ν¬ν•¨λ˜λŠ” ν™˜κ²½λ³€μˆ˜μ™€λŠ” μ–΄λ–€ 관계에 μžˆλŠ”μ§€λΆ€ν„° μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.
μ•„λž˜ 운영λͺ¨λ“œμ—μ„œ μ‚¬μš©ν•˜λŠ” docker-compose 파일과 Peer의 μ„€μ •νŒŒμΌμΈ core.yaml νŒŒμΌμ„ λΉ„κ΅ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

vp0의 environment에 μžˆλŠ” ν™˜κ²½λ³€μˆ˜ 쀑 “- CORE_PEER_ID=vp0” λ₯Ό core.yaml 파일과 λΉ„κ΅ν•˜λ©΄ μ•„λž˜ κ·Έλ¦Όμ—μ„œ “peer:” ν•˜μœ„μ— μžˆλŠ” “id:”에 ν•΄λ‹Ήν•˜λŠ” ν•­λͺ©μž…λ‹ˆλ‹€.
core.yamlμ—μ„œλŠ” peer.id 둜 μ½μœΌμ‹œλ©΄ λ©λ‹ˆλ‹€. docker-composeνŒŒμΌμ—μ„œλŠ” ν•΄λ‹Ήν•˜λŠ” ν•­λͺ©μ—μ„œ μ•žμ— “CORE”λ₯Ό λΆ™μ—¬μ„œ ν™˜κ²½λ³€μˆ˜μ˜ 킀값을 λ§Œλ“€λ©΄ λ©λ‹ˆλ‹€.
κ°œλ°œν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜μ‹œλŠ” docker-compose 파일과 core.yamlκ³Ό 비ꡐ해 λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

membersrvc:
  image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
  ports:
    - "7054:7054"
  command: membersrvc
vp0:
  image: hyperledger/peer:1.0
  ports:
    - "7050:7050"
    - "7051:7051"
    - "7053:7053"
  environment:
    - CORE_PEER_ADDRESSAUTODETECT=true
    - CORE_VM_ENDPOINT=https://192.168.99.100:2376
    - CORE_LOGGING_LEVEL=DEBUG
    - CORE_PEER_ID=vp0
    - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
    - CORE_SECURITY_ENABLED=true
    - CORE_SECURITY_ENROLLID=test_vp0
    - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
  links:
    - membersrvc
  command: sh -c "sleep 5; peer node start"

운영λͺ¨λ“œμ™€ 같이 multi nodeν™˜κ²½μ—μ„œ λ°˜λ“œμ‹œ λ…Έλ“œλ³„λ‘œ μ„€μ •ν•΄μ•Ό ν•  ν•­λͺ©μ€ λ‹€μŒμž…λ‹ˆλ‹€.

  • peer.id
  • vm.endpoint

그리고 멀버쉽 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 블둝체인 λ„€νŠΈμ›Œν¬ κ΅¬μ„±μ‹œ λ‹€μŒμ˜ ν•­λͺ©μ„ λ°˜λ“œμ‹œ μ„€μ •ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

  • security.enabled
  • security.enrollid
  • security.enrollsecret
  • peer.pki.eca_paddr
  • peer.pki.tca_paddr
  • peer.pki_tlsca.paddr

μœ„μ˜ 뢀뢄을 μœ λ…ν•΄μ„œ μ„€μ •ν•΄λ³΄μ‹œκΈ° 바라며, μ„€μ • ν•­λͺ© μ™Έ λͺ¨λ“  μ ˆμ°¨λŠ” 멀버쉽 μ„œλΉ„μŠ€ μ„€μ • λ•Œμ™€ λ™μΌν•©λ‹ˆλ‹€.