πŸ”Œ β€˜Connect Wallet’ λ²„νŠΌμ΄ λ‚΄ 전체 인증 μ‹œμŠ€ν…œμ„ λŒ€μ²΄ν–ˆλ‹€

λ°œν–‰: (2026λ…„ 5μ›” 19일 PM 08:13 GMT+9)
7 λΆ„ μ†Œμš”
원문: Dev.to

좜처: Dev.to

μ†”λΌλ‚˜μ—μ„œ κ°œλ°œμ„ μ‹œμž‘ν•˜λ©΄μ„œ μ˜ˆμƒμΉ˜ λͺ»ν–ˆλ˜ 것이 ν•˜λ‚˜ μžˆλ‹€: λ‚˜λŠ” νšŒμ›κ°€μž… 폼을 ν•œ λ²ˆλ„ μž‘μ„±ν•˜μ§€ μ•Šμ•˜λ‹€.

μ‚¬μš©μžλͺ… ν•„λ“œλ„ μ—†κ³ , λΉ„λ°€λ²ˆν˜Έ 검증도 μ—†μœΌλ©°, β€œμ΄λ©”μΌ 확인” 흐름도 μ—†κ³ , β€œλΉ„λ°€λ²ˆν˜Έ 찾기” νŽ˜μ΄μ§€λ„ μ—†λ‹€. μ›Ή2μ—μ„œ μˆ˜μ‹­ λ²ˆμ”© λ§Œλ“€λ˜ λͺ¨λ“  인증 인프라가 μ‚¬λΌμ‘Œλ‹€.

κ·Έ 자리λ₯Ό μ°¨μ§€ν•œ 것은 단 ν•˜λ‚˜μ˜ λ²„νŠΌ. β€œμ§€κ°‘ 연결”.

🧠 지갑이 μ‹€μ œλ‘œ ν•˜λŠ” 일

μ†”λΌλ‚˜κ°€ 처음이라면, 이전 κΈ€μ—μ„œ μ‚¬μš©μžλͺ…μ—μ„œ ν‚€νŽ˜μ–΄λ‘œμ˜ κ°œλ…μ  μ „ν™˜μ— λŒ€ν•΄ λ‹€λ€˜λ‹€.

μš”μ•½ν•˜λ©΄: λ‹Ήμ‹ μ˜ 정체성은 λ°μ΄ν„°λ² μ΄μŠ€ 행이 μ•„λ‹ˆλΌ μ•”ν˜Έν™”λœ ν‚€νŽ˜μ–΄μ΄λ‹€.

인증 κ΄€λ¦¬λŠ” 당신이 ν•˜μ§€ μ•ŠλŠ”λ‹€. 지갑이 λŒ€μ‹ ν•œλ‹€. μ‚¬μš©μžκ°€ Connect Wallet을 ν΄λ¦­ν•˜λ©΄, λΈŒλΌμš°μ € ν™•μž₯(Phantom, Solflare λ“±)이 확인 창을 λ„μš΄λ‹€. μ‚¬μš©μžκ°€ μŠΉμΈν•˜λ©΄, λ‹Ήμ‹ μ˜ 앱은 κ·Έλ“€μ˜ κ³΅κ°œν‚€λ₯Ό λ°›λŠ”λ‹€. 당신은 μ ˆλŒ€ κ°œμΈν‚€λ₯Ό 보지 λͺ»ν•˜κ³ , λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹œλ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μ„Έμ…˜ 토큰을 λ°œν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ˜¨λ³΄λ”© 흐름을 λ§Œλ“€ ν•„μš”λ„ μ—†λ‹€. μ›Ή2μ—μ„œλŠ” νšŒμ›κ°€μž…μ˜ 각 단계가 μ΄νƒˆ 지점(이메일 μž…λ ₯, 인증, ν”„λ‘œν•„ μ„€μ •, μ•½κ΄€ λ™μ˜)이닀. μ†”λΌλ‚˜μ—μ„œλŠ” μ‚¬μš©μžκ°€ 앱을 λ°©λ¬Έν•˜κΈ° μ „λΆ€ν„° 이미 정체성을 κ°€μ§€κ³  μžˆλ‹€. 당신이 ν•  일은 그것을 κ°μ§€ν•˜λŠ” 것뿐이닀.

β€œλ‘œκ·ΈμΈβ€μ€ λ‹¨μˆœνžˆ λ©”μ‹œμ§€μ— μ„œλͺ…ν•˜λŠ” 것이닀. 앱이 λ©”μ‹œμ§€λ₯Ό 보내면, 지갑이 μ„œλͺ…ν•˜κ³ , λ°±μ—”λ“œμ—μ„œ κ·Έ μ„œλͺ…을 κ²€μ¦ν•œλ‹€. μ„Έμ…˜ 쿠킀도, JWT도 μ—†λ‹€. μ„œλͺ…이 λ°”λ‘œ 증λͺ…이닀.

⚠️ μžƒκ²Œ λ˜λŠ” 것

이 방식이 무쑰건 더 쒋은 것은 μ•„λ‹ˆλ‹€. νŠΈλ ˆμ΄λ“œβ€‘μ˜€ν”„κ°€ μ‘΄μž¬ν•œλ‹€:

  • λΉ„λ°€λ²ˆν˜Έ μž¬μ„€μ •μ΄ μ—†λ‹€. μ‚¬μš©μžκ°€ κ°œμΈν‚€λ₯Ό μžƒμ–΄λ²„λ¦¬λ©΄ μ ‘κ·Ό κΆŒν•œμ„ 영영 μžƒλŠ”λ‹€. 계정을 볡ꡬ할 κ΄€λ¦¬μž 도ꡬ가 μ—†λ‹€.
  • 계정 볡ꡬ가 μ—†λ‹€. μ›Ή2μ—μ„œλŠ” μ΄λ©”μΌλ‘œ μž¬μ„€μ • 링크λ₯Ό 보낼 수 μžˆλ‹€. μ†”λΌλ‚˜μ—μ„œλŠ” ν‚€νŽ˜μ–΄κ°€ μœ μΌν•œ 정체성이닀. ν‚€νŽ˜μ–΄λ₯Ό μžƒμœΌλ©΄ ν•΄λ‹Ή μ£Όμ†Œμ™€ μ—°κ²°λœ λͺ¨λ“  토큰, NFT, ν”„λ‘œκ·Έλž¨ μƒνƒœκ°€ μ ‘κ·Ό λΆˆκ°€λŠ₯ν•΄μ§„λ‹€.
  • 점진적인 μ˜¨λ³΄λ”©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€. μ›Ή2μ—μ„œλŠ” 둜그인 μš”κ΅¬ 전에 μ‚¬μš©μžλ₯Ό 자유둭게 νƒμƒ‰ν•˜κ²Œ ν•  수 μžˆλ‹€. μ†”λΌλ‚˜μ—μ„œλŠ” 첫 μƒν˜Έμž‘μš©λΆ€ν„° μ‚¬μš©μžμ˜ μ£Όμ†Œκ°€ 정체성이 λœλ‹€. β€œμ΅λͺ… μ„Έμ…˜β€μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©°, λ‚˜μ€‘μ— λ“±λ‘λœ κ³„μ •μœΌλ‘œ μ „ν™˜λ˜μ§€ μ•ŠλŠ”λ‹€.

ν‚€νŽ˜μ–΄ 생성 및 μ €μž₯에 λŒ€ν•œ 기술적 μ„ΈλΆ€ 사항(μ™œ extractable: trueκ°€ μ€‘μš”ν•œμ§€, PKCS8이 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ λ“±)은 λ‹€λ₯Έ κΈ€μ—μ„œ λ‹€λ£¨μ—ˆμ§€λ§Œ, μ‹€μ œλ‘œ λ‚΄κ°€ λ¨Έλ¦Ώμ†μ—μ„œ λ‹€μ‹œ μ§œμ•Ό ν–ˆλ˜ 것은 개발자 μ›Œν¬ν”Œλ‘œμš°μ˜ μ „ν™˜μ΄μ—ˆλ‹€.

πŸ’» μ½”λ“œ 차이

μ›Ή2 인증

// Signup
app.post("/signup", async (req, res) => {
  const hash = await bcrypt.hash(req.body.password, 10);
  await db.users.create({ email: req.body.email, passwordHash: hash });
  req.session.userId = user.id;
});

// Login
app.post("/login", async (req, res) => {
  const user = await db.users.findByEmail(req.body.email);
  if (!user || !(await bcrypt.compare(req.body.password, user.passwordHash))) {
    return res.status(401).send("Invalid credentials");
  }
  req.session.userId = user.id;
});

μ†”λΌλ‚˜ 인증

// Connect wallet (browser side)
const { accounts } = await wallet.features["standard:connect"].connect();
const userAddress = accounts[0].address;

// That's it. The user is now "authenticated."

λΉ„λ°€λ²ˆν˜Έ 해싱도, μ„Έμ…˜ 관리도, λ°μ΄ν„°λ² μ΄μŠ€ μ‘°νšŒλ„ μ—†λ‹€. 지갑이 μ•”ν˜Έν•™μ  증λͺ…을 λ‹΄λ‹Ήν•˜κ³ , 앱은 κ³΅κ°œν‚€λ₯Ό 읽기만 ν•˜λ©΄ λœλ‹€.

🎯 μ™œ μ€‘μš”ν•œκ°€

Connect Wallet νŒ¨ν„΄μ€ λ‹¨μˆœνžˆ UI νŠΈλ Œλ“œκ°€ μ•„λ‹ˆλ‹€. 정체성 μžμ²΄κ°€ 근본적으둜 λ°”λ€ŒλŠ” 것을 μ˜λ―Έν•œλ‹€.

  • μ›Ή2μ—μ„œλŠ” 인증 λ‘œμ§μ„ μ•± μ•ˆμ— λ§Œλ“ λ‹€.
  • μ†”λΌλ‚˜μ—μ„œλŠ” 인증이 인프라닀 β€” 지갑에 μ‘΄μž¬ν•˜κ³ , μ½”λ“œλ² μ΄μŠ€μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

즉, λΉ„λ°€λ²ˆν˜Έ μ €μž₯, μ„Έμ…˜ νƒˆμ·¨, 이메일 인증 등에 μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†μ–΄μ§€λŠ” 반면, λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ 지원 ν‹°μΌ“μ΄λ‚˜ 계정 볡ꡬ에 μ˜μ‘΄ν•  μˆ˜λ„ μ—†κ²Œ λœλ‹€.

이 νŠΈλ ˆμ΄λ“œβ€‘μ˜€ν”„β€”μ½”λ“œλŠ” μ€„μ–΄λ“€μ§€λ§Œ μ±…μž„μ€ λŠ˜μ–΄λ‚œλ‹€β€”λ₯Ό μ΄ν•΄ν•˜κ³  λ‚˜λ‹ˆ, Connect Wallet λ²„νŠΌμ€ λ‹¨μˆœνžˆ κ°„μ†Œν™”λœ 것이 μ•„λ‹ˆλΌ 정체성에 λŒ€ν•œ μ™„μ „νžˆ λ‹€λ₯Έ μ ‘κ·Ό λ°©μ‹μœΌλ‘œ 보이기 μ‹œμž‘ν–ˆλ‹€.

λ‹€μŒ κΈ€: Transactions aren’t HTTP requests. They’re signed checks β€” and failed ones still cost you.

이 글은 5μ›” 15일~22일 μ§„ν–‰λ˜λŠ” 100 Days of Solana Writing Challenge μ œμΆœλ¬Όμ΄λ‹€.

0 쑰회
Back to Blog

κ΄€λ ¨ κΈ€

더 보기 Β»

κ·Έλ¦° 체크λ₯Ό λ°›μ•˜μ–΄μš”. 그런데 방금 무슨 일이죠?

κ°œμš”: devnetμ—μ„œ 처음으둜 ν™•μΈλœ νŠΈλžœμž­μ…˜μ„ λ°›μ•˜μ„ λ•Œ, λ‚˜λŠ” μ•½ 10초 λ™μ•ˆ 기뢄이 μ’‹μ•˜λ‹€β€”κ·ΈλŸ° λ‹€μŒ μ‹€μ œλ‘œ 무슨 일이 μΌμ–΄λ‚¬λŠ”μ§€ μ „ν˜€ λͺ°λžλ‹€. λ‚˜λŠ” …

Solana Explorerκ°€ λ‚΄ μ½”λ“œκ°€ ν•  수 μ—†μ—ˆλ˜ 것을 κ°€λ₯΄μ³ 쀬닀

μ†Œκ°œ 100DaysOfSolanaλ₯Ό μ‹œμž‘ν•œ μ§€ 4μ£Όκ°€ 된 μ‹œμ μ—, λ‚˜λŠ” λ“œλ””μ–΄ Solana Explorerλ₯Ό β€œκ·Έλƒ₯ ν™•μΈμš©β€μœΌλ‘œλ§Œ μ—¬κΈ°λ˜ νƒœλ„λ₯Ό 버리고 ν•™μŠ΅ λ„κ΅¬λ‘œ ν™œμš©ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€. 이 변화…