ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [κ°œλ…] Blockchain κ°œλ°œν•˜κΈ° :: dapp (νƒˆμ€‘μ•™ν™” μ•±) μ΄λž€? dapp ꡬ쑰, 흐름, 슀마트 μ»¨νŠΈλž™νŠΈ
    SECURITY/Blockchain 2022. 1. 5. 15:35

     

    본격적으둜 blockchain 에 λŒ€ν•΄ 곡뢀해보고 직접 κ΅¬ν˜„ν•΄λ³Ό 수 μžˆλŠ” κΈ°νšŒκ°€ μƒκ²¨μ„œ, κ·Έ λ‚΄μš©μ„ μ•žμœΌλ‘œ 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. κ°œλ… μ •μ˜ -> μ‹€μ œ κ΅¬ν˜„ -> ν…ŒμŠ€νŠΈ 및 배포 κΉŒμ§€ 진행할 μ˜ˆμ •μž…λ‹ˆλ‹€.

     

    * 이더리움 λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•  κ²ƒμ΄λ―€λ‘œ, μ•„λž˜  λ‚΄μš©μ€ 이더리움 λ„€νŠΈμ›Œν¬ 에 κΈ°λ°˜μ„ λ‘‘λ‹ˆλ‹€.


    Dapp (νƒˆμ€‘μ•™ν™” μ•±) μ΄λž€?

    쀑앙화, νƒˆμ€‘μ•™ν™”, λΆ„μ‚°ν™”. 많이 듀어봀을 수 μžˆμ§€λ§Œ ν—·κ°ˆλ¦΄ 수 μžˆλŠ” κ°œλ…μ΄λ―€λ‘œ λ¨Όμ € 짚고 λ„˜μ–΄κ°€κ² μŠ΅λ‹ˆλ‹€.

    • 쀑앙화(centralized) μ• ν”Œλ¦¬μΌ€μ΄μ…˜: λ‹¨μΌν•˜κ±°λ‚˜ μ€‘μ•™ν™”λœ 주체가 μ œμ–΄ν•˜λŠ” μ‹œμŠ€ν…œμ„ 기반으둜 λ§Œλ“€μ–΄μ§„ μ•±. λ”°λΌμ„œ μ‚¬μš©μžκ°€ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 주체λ₯Ό μ‹ λ’°ν•˜λŠ” 것을 μ „μ œλ‘œ μž‘λ™ν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€λ₯Ό μ‹ λ’°ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ‚¬μš©μžλŠ” μ‚¬μš©ν•˜μ§€ μ•Šμ„ 것이고, 그에 따라 μ„œλΉ„μŠ€μ˜ μ£Όμ²΄λŠ” 신뒰성을 λ‚˜λ¦„λŒ€λ‘œμ˜ λ°©μ‹μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ μ–΄ν•„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • νƒˆμ€‘μ•™ν™”(decentralized) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ (Dapp): 이둠적으둜, 각자 λ‹€λ₯Έ 주체가 μ†Œμœ ν•˜κ³  μžˆλŠ” λ…Έλ“œμ—μ„œ λ³΅μ œλ˜μ–΄ μ‹€ν–‰ν•©λ‹ˆλ‹€. 즉, λ…Έλ“œλ₯Ό μ†Œμœ ν•˜λŠ” 주체가 λ‹¨μΌν™”λ˜μ–΄μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ†Œμœ  주체가 λ§Žμ„μˆ˜λ‘ νƒˆμ€‘μ•™ν™”λœ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ―€λ‘œ 전체 λ„€νŠΈμ›Œν¬μ˜ μ‹ λ’°λ„λŠ” μ˜¬λΌκ°‘λ‹ˆλ‹€.
      μ΄λŠ” 거래 μ‹€ν–‰ 및 κ²€μ¦μ˜ 독립성 (λͺ¨λ“  μ°Έμ—¬μžκ°€ 검증 μž‘μ—…μ— λ™μ˜) κ³Ό 투λͺ…μ„± (거래λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ 확인 κ°€λŠ₯)을 μ œκ³΅ν•˜λŠ”, μ›Ή μ• ν”Œλ ˆμΌ€μ΄μ…˜μ˜ μƒˆλ‘œμš΄ λ³€ν™” 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. μ‚¬μš©μžμ™€ κ³΅κΈ‰μž 사이에 μ‹ λ’°κ°€ ν•„μš”ν•œ λͺ¨λ“  μ‹œμŠ€ν…œμ˜ 투λͺ…성을 높이기 μœ„ν•΄ μ‚¬μš©λ˜λ©°, μ΄λŸ¬ν•œ ν•„μš”κ°€ μ—†λŠ” κ³³μ—μ„œλŠ” νƒˆμ€‘μ•™ν™”κ°€ 100% 정닡이 λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
    • λΆ„μ‚° μ• ν”Œλ¦¬μΌ€μ΄μ…˜: ν•˜λ‚˜μ˜ λ„€νŠΈμ›Œν¬ 내에 μžˆλŠ” μ—¬λŸ¬ μ„œλ²„μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€. 즉, μ£Όμ²΄λŠ” ν•˜λ‚˜μ΄λ‚˜ μ—¬λŸ¬ μ„œλ²„λ₯Ό μ‚¬μš©ν•΄μ„œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 일반적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 방식이며, μ›Ή μ„œλ²„, λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ λ“±μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. μ„€λͺ…을 보면 이해가 κ°€λ“― μ΄λŠ” κ²°κ΅­ 쀑앙화 μ•±μ˜ ν˜•νƒœμž…λ‹ˆλ‹€.

     

    Dapp 의 ꡬ쑰

    처음 Dapp 을 μ ‘ν•œλ‹€λ©΄ κ·Έλž˜μ„œ λˆ„κ°€ μ„œλ²„κ³ , λˆ„κ°€ ν΄λΌμ΄μ–ΈνŠΈμΈμ§€ ν—·κ°ˆλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. (λŒ€ν‘œμ : λ‚˜)

    λ”°λΌμ„œ, Dapp 의 ꡬ쑰가 μ–΄λ–»κ²Œ λ˜λŠ”μ§€

    • ν΄λΌμ΄μ–ΈνŠΈ: μ›Ή/μ•±
      일반적으둜, java script κ°€ ν¬ν•¨λœ μ›Ή ν”„λ‘œκ·Έλž¨.
      Web3.js λΌλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리λ₯Ό 톡해 νŠΉμ • μ„œλ²„μ™€ 직접 톡신할 수 μžˆμŠ΅λ‹ˆλ‹€.
      λ³΄ν†΅μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κ°€μ§€λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ 큰 차이가 μ—†μŠ΅λ‹ˆλ‹€.
    • μ„œλ²„: P2P λ„€νŠΈμ›Œν¬
      νƒˆμ€‘μ•™ν™” μ„œλ²„λŠ” P2P λ„€νŠΈμ›Œν¬μž…λ‹ˆλ‹€. 즉, ν•˜λ‚˜μ˜ 단일 주체가 μ€‘μ•™μ—μ„œ μ‘°μ •ν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλΌ 각 λ…Έλ“œκ°€ μ„œλ‘œ ν†΅μ‹ ν•˜λ©° 같은 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  같은 블둝체인 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.
      μ΄λ•Œ, λ…Έλ“œλŠ” λͺ¨λ“  λ…Έλ“œμ— 연결될 ν•„μš”λŠ” μ—†κ³ , 전체λ₯Ό κ΄€μž₯ν•˜λŠ” λ§ˆμŠ€ν„° λ…Έλ“œ λ˜ν•œ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
      λ…Έλ“œ κ°„μ˜ μ—°κ²° 관계λ₯Ό λ– μ˜¬λ €λ³΄λ©΄, λͺ‡ 개의 λ…Έλ“œμ—λ§Œ μ—°κ²°λ˜μ–΄ μžˆμ–΄λ„ μ„œλ‘œμ„œλ‘œ 톡신을 톡해 λΉ λ₯΄κ²Œ 전체 λ„€νŠΈμ›Œν¬μ— 데이터λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
      • 블둝체인 ν”Œλ ›νΌμ„ μ§€μ›ν•˜λŠ” λ‹€μ–‘ν•œ P2P λ„€νŠΈμ›Œν¬: λΉ„νŠΈμ½”μΈ, 이더리움 λ“±

     

    ν‰μ†Œμ— API μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 관계λ₯Ό 잘 μ΄ν•΄ν•˜κ³  μžˆλ‹€λ©΄, Dapp 은 κ²°κ΅­ ν΄λΌμ΄μ–ΈνŠΈκ°€ API κ°€ μ•„λ‹ˆλΌ νŠΉμ • 라이브러리λ₯Ό 톡해 μ„œλ²„μ™€ ν†΅μ‹ ν•˜λŠ” 것이고, μ„œλ²„λŠ” 단일 μ„œλ²„κ°€ μ•„λ‹ˆλΌ μ—¬λŸ¬ λ…Έλ“œ κ°„μ˜ μ—°κ²°λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€κ³  μ΄ν•΄ν•˜λ©΄ μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€.

     

    Dapp 의 흐름

    Dapp 의 κ°„λ‹¨ν•œ μž‘λ™ 흐름을 μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

     

    1) μ‚¬μš©μž μ΄λ²€νŠΈλŠ” μ›Ή νŽ˜μ΄μ§€μ˜ js μ—μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

    2) 이벀트 λ°œμƒ μ‹œ web3.js 라이브러리 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 슀마트 μ»¨νŠΈλž™νŠΈμ™€ μ—°κ²°λœ 이더리움 λ…Έλ“œμ™€ μ—°κ²°ν•˜κ³  μ΄λ²€νŠΈμ— λ§žλŠ” ν•¨μˆ˜ Aλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

    3) μ—°κ²°λœ 둜컬 이더리움 λ…Έλ“œ (ex. 개발자 컴퓨터) λŠ” λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³  κ²€μ¦ν•œ ν›„ ν”Όμ–΄ λ…Έλ“œλ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.

    4) κ±°λž˜λ‚΄μ—­μ΄ 채꡴ λ…Έλ“œλ₯Ό λ§Œλ‚  λ•ŒκΉŒμ§€ μ „νŒŒν•©λ‹ˆλ‹€.

    5) 각 λ…Έλ“œλŠ” μƒˆ block 을 λ°›μœΌλ©΄ ν•΄λ‹Ή block 의 κ°œλ³„ κ±°λž˜λ‚΄μ—­μ΄ 정상적인지 + 전체 block 이 μœ νš¨ν•œμ§€ κ²€μ¦ν•©λ‹ˆλ‹€. 이후 block 에 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  κ±°λž˜λ‚΄μ—­μ„ μ²˜λ¦¬ν•˜λ©° 이 κ³Όμ •μ—μ„œ 계약 μƒνƒœμ˜ μœ νš¨μ„±μ„ μ•”μ‹œμ μœΌλ‘œ ν™•μΈν•©λ‹ˆλ‹€. (ν•©μ˜)

    6) 검증이 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄ Confirmation 이벀트λ₯Ό λ°œμƒμ‹œν‚€κ³ , μ›Ή UI λ₯Ό ν¬ν•¨ν•˜μ—¬ μ—°κ²°λœ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈμ— μ „νŒŒλ©λ‹ˆλ‹€. 이λ₯Ό UI κ°€ 화면에 좜λ ₯ν•©λ‹ˆλ‹€.

     

    μ΄λ•Œ, λŒ€λΆ€λΆ„μ˜ 블둝체인은 '전체 λ…Έλ“œ' 와 '채꡴ λ…Έλ“œ' 둜 κΈ°λŠ₯적으둜 λ…Έλ“œλ₯Ό κ΅¬λΆ„ν•˜λ©° λ‹€μŒμ˜ 차이가 μžˆμŠ΅λ‹ˆλ‹€.

     

      전체 λ…Έλ“œ 채꡴ λ…Έλ“œ
    성격 κ±°λž˜λ‚΄μ—­μ„ μˆ˜λ™μœΌλ‘œ 처리 κ±°λž˜λ‚΄μ—­μ„ 적극적으둜 처리
    μƒˆ 블둝 생성 λΆˆκ°€λŠ₯
    (단, μžμ‹ μ˜ 둜컬 λΈ”λ‘μ²΄μΈμ—λŠ” μΆ”κ°€ κ°€λŠ₯)
    κ°€λŠ₯
    (κ±°λž˜λ‚΄μ—­μ„ λͺ¨μ•„ μƒˆ 블둝을 μƒμ„±ν•˜κ³  κΈ°μ‘΄ 블둝체인에 μΆ”κ°€ν•˜λŠ” 것이 μ£Όμš” λͺ©μ )
    μ •ν™•μ„± 검증 μˆ˜ν–‰ μˆ˜ν–‰
    νŠΉμ§• μ •ν™•μ„± 검증을 μœ„ν•΄μ„œλ§Œ 거래λ₯Ό μ‹€ν–‰.
    블둝체인을 읽을 순 μžˆμ§€λ§Œ μ“Έ μˆ˜λŠ” μ—†λ‹€.
    μ•”ν˜Έν™”νλ₯Ό 지급받기 μœ„ν•΄
    μ—λ„ˆμ§€κ°€ 많이 μ†Œμš”λ˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰.

     

     

    슀마트 μ»¨νŠΈλž™νŠΈ (Samrt Contract)

    슀마트 μ»¨νŠΈλž™νŠΈλž€ 블둝체인 기반으둜 λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 계약을 μ²΄κ²°ν•˜κ³  μ΄ν–‰ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

    이 κ³„μ•½μ—λŠ” 금육, 뢀동산 계약, νˆ¬ν‘œ λ“±μ˜ λ‹€μ–‘ν•œ 계약이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

     

    λΉ„νƒˆλ¦­ λΆ€ν…Œλ¦°μ΄ μ΄λ”λ¦¬μ›€μ΄λΌλŠ” 가상 화폐λ₯Ό λ§Œλ“€κ³  κ΅¬ν˜„ν•œ κ²ƒμœΌλ‘œ, (κΈ°μ‘΄ λΉ„νŠΈμ½”μΈμ— λ„£μœΌλ €λ‹€κ°€ 의견이 μˆ˜μš©λ˜μ§€ μ•Šμž 직접 λ§Œλ“ ..)

    Solidity λΌλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό 톡해 직접 슀마트 μ»¨νŠΈλž™νŠΈ μ½”λ“œ (계약 쑰건, λ‚΄μš© λ“±) λ₯Ό μž‘μ„±ν•  수 있고, 블둝체인 λ„€νŠΈμ›Œν¬μ— λ°°ν¬ν•¨μœΌλ‘œμ„œ μ‚¬μš©μž κ°„μ˜ 계약을 ν•΄λ‹Ή μ½”λ“œλ₯Ό 톡해 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    μ˜ˆμ‹œλ‘œ λ‹€μŒκ³Ό 같은 ν˜•νƒœκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

     

    μœ„ μ½”λ“œλŠ” remix 둜 μž‘μ„±ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ μ½”λ“œμ΄λ©°, 두 μ‚¬μš©μžκ°€ 코인을 μ£Όκ³  λ°›λŠ” '계약'에 λŒ€ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

     

    μ΄λ ‡κ²Œ μ‚¬μš©μž κ°„μ˜ ν•©μ˜κ°€ 이루어져야 ν•˜λŠ” κ³„μ•½μ˜ ν˜•νƒœλ₯Ό κ°€μ§€λŠ” '무언가'에 λŒ€ν•΄ κ·Έ λ‘œμ§μ„ μž‘μ„±ν•˜κ³  μˆ˜ν–‰ν•˜λ„λ‘ ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€κ³  이해해도 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

     


    μ΄μƒμœΌλ‘œ Dapp 에 λŒ€ν•œ κ°œλ…μ μΈ λΆ€λΆ„κ³Ό ꡬ쑰적인 뢀뢄을 μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

    λŒ“κΈ€

Designed by Tistory.