Skip to content

πŸƒ μš΄λ™μ„ μŠ΅κ΄€μœΌλ‘œ, 였늘의 도전을 κΈ°λ‘ν•˜λŠ” oneul

Notifications You must be signed in to change notification settings

today-is-first/oneul

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

hits

πŸ—‚οΈ νŒ€ λ¬Έμ„œ & 자료 링크

πŸ“’ νŒ€ λ…Έμ…˜ Β |Β  πŸ“š 개발 μœ„ν‚€ Β |Β  πŸ“ κ·ΈλΌμš΄λ“œ λ£° Β |Β 



πŸ§‘β€πŸ’» μ—­ν•  및 κΈ°μ—¬

λ‹΄λ‹Ήμž μ£Όμš” μž‘μ—…
이찬 - μ‹€μ‹œκ°„ μ±„νŒ… λ‘œλ”© μ§€μ—° 문제 ν•΄κ²°
- 데이터 캐싱 기반 μš”μ²­ μ΅œμ ν™”
- Presigned-URL 기반 이미지 μ—…λ‘œλ“œ κΈ°λŠ₯
- ν™ˆ 슀트릭/ν”Όλ“œ/톡계 κΈ°λŠ₯ κ΅¬ν˜„ 및 μΊ˜λ¦°λ” 연동
- WebSocket μ‹€μ‹œκ°„ μ±„νŒ… κΈ°λŠ₯
- μ±Œλ¦°μ§€, ν”Όλ“œ, 결제 λ‚΄μ—­ μ‘°νšŒν•˜λŠ” λ§ˆμ΄νŽ˜μ΄μ§€ κ΅¬ν˜„


πŸ‘‹ ν”„λ‘œμ νŠΈ μ†Œκ°œ

πŸ† "였늘의 μš΄λ™μ„ μΈμ¦ν•˜κ³ , λ¦¬μ›Œλ“œλ₯Ό λ°›λŠ” μ±Œλ¦°μ§€ ν”Œλž«νΌ"

oneul은 μ‚¬μš©μžκ°€ μš΄λ™ 인증을 톡해 μ±Œλ¦°μ§€μ— μ°Έμ—¬ν•˜κ³ ,
λͺ©ν‘œ 달성 μ‹œ ν™˜κΈ‰ λ¦¬μ›Œλ“œλ₯Ό 받을 수 μžˆλŠ” μ±Œλ¦°μ§€ 기반 μ›Ή μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

  • μ‚¬μš©μžλŠ” 인증 ν”Όλ“œλ₯Ό μ—…λ‘œλ“œν•˜λ©° 도전 ν˜„ν™©μ„ 기둝할 수 μžˆμ–΄μš”.
  • μ°Έμ—¬μž κ°„μ—λŠ” μ‹€μ‹œκ°„ μ±„νŒ…μœΌλ‘œ μ†Œν†΅ν•˜λ©° 도전을 μ΄μ–΄κ°‘λ‹ˆλ‹€.


🧩 κ³ λ―Όκ³Ό ν•΄κ²° λ°©μ•ˆ

πŸš€ μ‚¬μš©μž κ²½ν—˜κ³Ό μ„±λŠ₯ ν–₯상을 μœ„ν•œ μ„œλΉ„μŠ€ 고도화

μ„œλΉ„μŠ€ ν™•μž₯κ³Ό μ‚¬μš©μž κ²½ν—˜ κ°œμ„ μ„ μœ„ν•΄ μ„Έ κ°€μ§€ κΈ°μˆ μ„ μ μš©ν•΄ 고도화λ₯Ό μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

  1. μΈν”Όλ‹ˆν‹° μŠ€ν¬λ‘€μ„ λ„μž…ν•΄ 졜초 30개 λ°μ΄ν„°λ§Œ λ‘œλ”©ν•˜κ³ , 이후 슀크둀 μ‹œ κ³Όκ±° 데이터λ₯Ό 순차적으둜 λΆˆλŸ¬μ˜€λ„λ‘ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이 λ°©μ‹μœΌλ‘œ 초기 λ‘œλ”© μ‹œκ°„μ„ μ•½ 15% κ°€λŸ‰ μ€„μ˜€κ³ , λ Œλ”λ§ μ„±λŠ₯도 μ•ˆμ •ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  2. React Query 캐싱을 톡해 동일 μš”μ²­ λ°˜λ³΅μ„ λ°©μ§€ν–ˆμŠ΅λ‹ˆλ‹€. Stale Timeκ³Ό μΊμ‹œ μ „λž΅ μ„€μ •μœΌλ‘œ API 호좜 수λ₯Ό μ•½ 35% κ°μ†Œμ‹œμΌœ μ„œλ²„ λΆ€ν•˜λ₯Ό 효과적으둜 μ€„μ˜€μŠ΅λ‹ˆλ‹€.

  3. μž…λ ₯μ°½κ³Ό 슀크둀 이벀트처럼 반볡 호좜이 μž¦μ€ ꡬ간에 Debounce와 Throttle을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ κ²°κ³Ό μ˜λ„μΉ˜ μ•Šμ€ 쀑볡 μš”μ²­μ„ 막을 수 μžˆμ—ˆκ³ , μ‚¬μš©μž μΈν„°λž™μ…˜μ˜ 일관성과 μ„œλ²„ μ•ˆμ •μ„±μ„ λ™μ‹œμ— 확보할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

Wiki둜 μžμ„Ένžˆ 보기

πŸš€ μž„μ‹œ μ£Όλ¬Έμ„œ μ €μž₯ μ „λž΅ 섀계

μž„μ‹œ μ£Όλ¬Έμ„œ 생성은 결제 검증을 μœ„ν•œ ν•„μˆ˜ κ³Όμ •μ΄μ§€λ§Œ, 이 데이터가 적절히 μ‚­μ œλ˜μ§€ μ•ŠμœΌλ©΄ κ³ μ•„ λ°μ΄ν„°λ‘œ λˆ„μ λ˜μ–΄ μŠ€ν† λ¦¬μ§€Β·μΈλ±μŠ€ λΆ€ν•˜ 증가, 쿼리 응닡 μ§€μ—° λ“± μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이런 잠재적 리슀크λ₯Ό 쀄이기 μœ„ν•΄ 순수 RDBMS, μ„œλ²„ μ„Έμ…˜, Redis μ„Έ κ°€μ§€ μ˜΅μ…˜μ„ λΉ„κ΅Β·λΆ„μ„ν–ˆκ³ , Redis에 15λΆ„ TTL을 μ μš©ν•œ ν•˜μ΄λΈŒλ¦¬λ“œ 방식을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.

결제 μ™„λ£Œ μ‹œ MySQL에 영ꡬ μ €μž₯ν•¨μœΌλ‘œμ¨ λΉ λ₯Έ 응닡 속도와 데이터 무결성을 λ™μ‹œμ— ν™•λ³΄ν–ˆμŠ΅λ‹ˆλ‹€.

Wiki둜 μžμ„Ένžˆ 보기


πŸ›‘οΈ 보상 νŠΈλžœμž­μ…˜ μ„€κ³„λ‘œ 무결성 보μž₯

결제 ν”Œλ‘œμš°λŠ” μ™ΈλΆ€ Toss 결제 μ„œλΉ„μŠ€μ™€ λ‚΄λΆ€ MySQL μ €μž₯μ΄λΌλŠ” 두 개의 λΆ„λ¦¬λœ νŠΈλžœμž­μ…˜μœΌλ‘œ κ΅¬μ„±λ˜κΈ° λ•Œλ¬Έμ—, μ™ΈλΆ€ κ²°μ œλŠ” 정상 μ»€λ°‹λμ§€λ§Œ λ‚΄λΆ€ DB νŠΈλžœμž­μ…˜μ΄ 둀백되면 μ›μžμ„±μ΄ κΉ¨μ§€κ³  데이터 λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Saga νŒ¨ν„΄ 기반의 보상 νŠΈλžœμž­μ…˜(compensation transaction) ꡬ쑰λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄λΆ€ DB μ €μž₯이 μ‹€νŒ¨ν•˜λ©΄ κ³§λ°”λ‘œ Toss Cancel APIλ₯Ό ν˜ΈμΆœν•΄ μ™ΈλΆ€ 결제λ₯Ό μ·¨μ†Œν•˜λ©°, μš”μ²­ IDλ₯Ό ν™œμš©ν•΄ 멱등성을 보μž₯ν•©λ‹ˆλ‹€.

μž¬μ‹œλ„ μƒνƒœμ™€ νšŒμ°¨λŠ” Redis에 κΈ°λ‘ν•˜κ³  μ΅œλŒ€ 3νšŒκΉŒμ§€ μžλ™ μž¬μ‹œλ„ν•˜λ©°, μ΄ν›„μ—λŠ” DLQ(Dead Letter Queue)둜 이관해 μš΄μ˜μžκ°€ μˆ˜λ™μœΌλ‘œ ν™˜λΆˆν•˜λ„λ‘ 섀계해 μ•ˆμ •μ„±κ³Ό 운영 νš¨μœ¨μ„ λͺ¨λ‘ ν™•λ³΄ν–ˆμŠ΅λ‹ˆλ‹€.

Wiki둜 μžμ„Ένžˆ 보기




🎯 μ£Όμš” κΈ°λŠ₯ μ†Œκ°œ

πŸ’³ 결제 및 ν™˜κΈ‰ μ‹œμŠ€ν…œ

"λͺ©ν‘œ 달성, κ·Έ μžμ²΄κ°€ λ¦¬μ›Œλ“œ!"

μœ μ €λŠ” Toss 결제 APIλ₯Ό 톡해 μ±Œλ¦°μ§€ μ°Έκ°€λΉ„λ₯Ό κ²°μ œν•˜κ³ ,
λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜λ©΄ μ„œλ²„κ°€ μžλ™μœΌλ‘œ ν™˜κΈ‰ 처리λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
결제 μƒνƒœλŠ” Redis에 μž„μ‹œ μ €μž₯, MySQL에 영ꡬ λ°˜μ˜λ©λ‹ˆλ‹€.

결제 μ‹œμŠ€ν…œ

πŸ’¬ μ‹€μ‹œκ°„ μ±„νŒ…

"μš΄λ™ 인증 λ’€μ—”, 응원과 ν”Όλ“œλ°±μ΄ λ°”λ‘œλ°”λ‘œ!"

μ±„νŒ…μ€ Netty-Socket.io 기반 WebSocket μ„œλ²„μ™€ μ—°κ²°λ˜μ–΄ 있으며,
λ©”μ‹œμ§€λŠ” λ°©λ³„λ‘œ μ‹€μ‹œκ°„ λΈŒλ‘œλ“œμΊμŠ€νŒ… λ©λ‹ˆλ‹€.

μ‹€μ‹œκ°„ μ±„νŒ…

πŸ“Έ 인증 ν”Όλ“œ μ—…λ‘œλ“œ

"ν•˜λ£¨ ν•œ μž₯으둜 λ‹Ήμ‹ μ˜ λ³€ν™”κ°€ μ‹œμž‘λ©λ‹ˆλ‹€."

μ‚¬μš©μžκ°€ 이미지와 λ‚΄μš©μ„ μ—…λ‘œλ“œν•˜λ©΄,
S3둜 이미지 μ—…λ‘œλ“œ, λ©”νƒ€λ°μ΄ν„°λŠ” MySQL에 μ €μž₯λ©λ‹ˆλ‹€.

인증 ν”Όλ“œ

πŸ‘‘ λ°©μž₯ κ²€μˆ˜ κΈ°λŠ₯

"μ§„μ§œ 인증만, μ§„μ§œλ‘œ μΈμ •λ°›λŠ”λ‹€!"

λ°©μž₯은 각 ν”Όλ“œμ— λŒ€ν•΄ 승인/반렀 μƒνƒœλ₯Ό λ³€κ²½ν•  수 있으며,
λ³€κ²½λœ μƒνƒœλŠ” DB에 μ €μž₯, λ¦¬μ›Œλ“œ 쑰건에 λ°˜μ˜λ©λ‹ˆλ‹€.

λ°©μž₯ 승인 κΈ°λŠ₯

🧾 λ§ˆμ΄νŽ˜μ΄μ§€

"λ‚΄ μš΄λ™, λ‚΄ μ±Œλ¦°μ§€, λ‚΄ λ¦¬μ›Œλ“œκΉŒμ§€ ν•œ λˆˆμ—!"

μ±Œλ¦°μ§€, ν”Όλ“œ, 결제 λ‚΄μ—­ 등을 ν•œλˆˆμ— λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ΄νŽ˜μ΄μ§€

βœ… μ„œλΉ„μŠ€ ꡬ쑰도

였늘 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

βš’οΈ Tech Stacks

λΆ„λ₯˜ 기술 μŠ€νƒ
Frontend My Skills
Backend My Skills
DB / Infra My Skills
배포 My Skills
ν˜‘μ—… My Skills


🀼 νŒ€μ› μ†Œκ°œ

이찬 κ°•μ„€λ―Ό μœ μ•„λ¦„
Frontend / Backend Backend Frontend / Backend
@today-is-first @seolminkkang @aoooec

About

πŸƒ μš΄λ™μ„ μŠ΅κ΄€μœΌλ‘œ, 였늘의 도전을 κΈ°λ‘ν•˜λŠ” oneul

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages