μ‹€νŒ¨μ—λ„ λ¬΄λ„ˆμ§€μ§€ μ•ŠλŠ” 결제 μ‹œμŠ€ν…œ (Timeout, Retry, CircuitBreaker, Fallback)
Β·
Spring/Spring
TL;DR비동기 결제 + 콜백, λ™κΈ°ν™”λ‘œ μƒνƒœλ₯Ό ν™•μ •ν•˜κ³ , Retry, μ„œν‚·λΈŒλ ˆμ΄μ»€, νƒ€μž„μ•„μ›ƒμœΌλ‘œ μž₯μ•  확산을 λ§‰λŠ” ꡬ쑰λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. μ™œ 이 글을 μ“°κ²Œ λ˜μ—ˆλŠ”κ°€?μ΄μ»€λ¨ΈμŠ€μ—μ„œ 결제 λ„λ©”μΈμ˜ μ€‘μš”μ„±μ΄μ»€λ¨ΈμŠ€μ—μ„œ κ²°μ œλŠ” λ‹¨μˆœν•œ κΈ°λŠ₯이 μ•„λ‹ˆλΌ 신뒰와 μ§κ²°λ˜λŠ” 핡심 λ„λ©”μΈμž…λ‹ˆλ‹€.λ§Œμ•½ μ‚¬μš©μžκ°€ 결제λ₯Ό μ‹œλ„ν–ˆλŠ”λ° κΈˆμ•‘μ΄ 잘λͺ» λΉ μ Έλ‚˜κ°„λ‹€λ©΄.. μ•„μ£Ό ν”Όκ³€ν•œ 상황이 생길 κ²ƒμž…λ‹ˆλ‹€.그만큼 결제의 μ•ˆμ •μ„±μ΄ λ†’μ„μˆ˜λ‘ μ‚¬μš©μžμ˜ 슀트레슀λ₯Ό 쀄이고, 사업 λ§€μΆœμ—λ„ μ§κ²°λ˜λŠ” μ€‘μš”ν•œ μš”μ†Œκ°€ λ©λ‹ˆλ‹€. μ–΄λ–¨ λ•Œ μ‹œμŠ€ν…œμ—μ„œλŠ” 결제λ₯Ό μ‹€νŒ¨ν–ˆλ‹€κ³  νŒλ‹¨ν• κΉŒ?1. μ™ΈλΆ€ PGλ‘œλΆ€ν„° λͺ…μ‹œμ μΈ μ‹€νŒ¨ 응닡을 받은 κ²½μš°ν•œλ„ 초과, μΉ΄λ“œμ‚¬ 승인 거절, κ³„μ’Œ μž”μ•‘ λΆ€μ‘± λ“±2. Timeout으둜 응닡을 λ°›μ§€ λͺ»ν•œ κ²½μš°λ„€νŠΈμ›Œν¬ μ§€μ—°, PG μ„œλ²„ 응닡 μ§€μ—°μœΌλ‘œ 인..
μŠ€ν”„λ§μ€ μ™œ ν”„λ‘μ‹œ νŒ¨ν„΄μ„ μ‚¬μš©ν• κΉŒ?(AOP, νŠΈλžœμž­μ…˜)
Β·
Spring/Spring
ν”„λ‘μ‹œ, Spring ν”„λ‘μ‹œ νŒ¨ν„΄, AOP, νŠΈλžœμž­μ…˜ μ œλŒ€λ‘œ 이해해보기Spring을 μ“°λ‹€ 보면 λΉ μ§€μ§€ μ•Šκ³  λ“±μž₯ν•˜λŠ” κ°œλ…λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.λ°”λ‘œ ν”„λ‘μ‹œ, AOP, 그리고 @Transactional νŠΈλžœμž­μ…˜ μ²˜λ¦¬μž…λ‹ˆλ‹€.이번 κΈ€μ—μ„œλŠ” 이 ν‚€μ›Œλ“œλ“€μ„ 기반으둜 Spring λ‚΄λΆ€μ—μ„œ μ–΄λ–€ 일이 λ²Œμ–΄μ§€λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.ν”„λ‘μ‹œ(Proxy)λž€?ν”„λ‘μ‹œλŠ” μ§„μ§œ 객체 μ•žμ— μ„œμ„œ λŒ€μ‹  일을 μ²˜λ¦¬ν•˜λŠ” λŒ€λ¦¬ 객체.λͺ©μ : μ ‘κ·Ό μ œμ–΄, μ„±λŠ₯ ν–₯상, λΆ€κ°€κΈ°λŠ₯ 처리 λ“±λΉ„μœ λ‘œ μ΄ν•΄ν•˜κΈ°μ§„μ§œ 객체 = μ˜ν™”κ΄€ν”„λ‘μ‹œ = μž…κ΅¬μ— μžˆλŠ” 직원 (ν‹°μΌ“ ν™•μΈν•˜κ³  μž…μž₯μ‹œν‚΄)→ μš°λ¦¬λŠ” μ˜ν™”κ΄€μ„ λ°”λ‘œ μ΄μš©ν•˜μ§€ μ•Šκ³ , ν”„λ‘μ‹œλ₯Ό κ±°μ³μ„œ κ°„μ ‘μ μœΌλ‘œ μ ‘κ·Όν•˜κ²Œ λœλ‹€.ν”„λ‘μ‹œ νŒ¨ν„΄(Proxy Pattern)μ΄λž€?λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ,μ‹€μ œ 객체에 λŒ€ν•œ 접근을 ν”„λ‘μ‹œ 객체가 ..
컀λ„₯μ…˜μ΄λž€ (컀λ„₯μ…˜ ν’€, 컀λ„₯μ…˜ 고갈)
Β·
Spring/JPA
컀λ„₯μ…˜(Connection)μ΄λž€?DB와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‡λŠ” 'ν†΅λ‘œ'일반적으둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μš”μ²­μ„ λ°›μœΌλ©΄ λ°μ΄ν„°λ² μ΄μŠ€(DB)에 정보λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ λ³€κ²½ν•œ λ’€ κ·Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λ•Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ DB와 λŒ€ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” 연결이 ν•„μš”ν•˜λ‹€. 이 ν†΅λ‘œκ°€ λ°”λ‘œ 컀λ„₯μ…˜(Connection)이닀. μ»€λ„₯μ…˜ μƒμ„±μ—”λŠ” λΉ„μš©μ΄ λ“ λ‹€.컀λ„₯μ…˜μ„ μƒμ„±ν•˜λŠ” λ°μ—λŠ” 생각보닀 λ§Žμ€ λΉ„μš©μ΄ λ“ λ‹€. 예λ₯Ό λ“€μ–΄,λ„€νŠΈμ›Œν¬ μ†ŒμΌ“μ„ 열고인증(μ‚¬μš©μžλͺ…/λΉ„λ°€λ²ˆν˜Έ) 과정을 거치고DB와 ν•Έλ“œμ…°μ΄ν¬(λŒ€ν™” μ€€λΉ„) ν•˜λŠ” 과정등이 ν•„μš”ν•˜λ‹€. 이런 과정을 λ§€ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œ ν•˜λ©΄ λΆˆν•„μš”ν•œ μ‹œκ°„ λ‚­λΉ„κ°€ 컀진닀.컀λ„₯μ…˜ ν’€(Connection Pool)μ΄λž€?미리 컀λ„₯μ…˜μ„ λ§Œλ“€μ–΄λ‘λŠ” μ „λž΅μ»€λ„₯μ…˜μ„ 맀번 μƒˆλ‘œ λ§Œλ“œλŠ” λŒ€μ‹ , 컀λ„₯μ…˜ ν’€(Connection Pool)이..
@Transactional을 μ‚¬μš©ν•˜λŠ” 이유
Β·
Spring/JPA
@Transactional의 κΈ°λ³Έ κ°œλ…μ •μ˜@Transactional은 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, ν•΄λ‹Ή λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€μ—μ„œ μ‹€ν–‰λ˜λŠ” DB μž‘μ—…(INSERT, UPDATE, DELETE λ“±)을 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ λ²”μœ„ μ•ˆμ—μ„œ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 역할을 ν•œλ‹€.κΈ°λŠ₯λͺ¨λ“  DB 연산을 ν•˜λ‚˜μ˜ μ›μžμ  λ‹¨μœ„λ‘œ λ¬Άμ–΄ 성곡 μ‹œ 일괄 컀밋, μ‹€νŒ¨ μ‹œ 일괄 둀백을 톡해 데이터 무결성과 일관성을 보μž₯ν•œλ‹€.@Transactional을 μ‚¬μš©ν•˜λŠ” 이유1. μ›μžμ„±(Atomicity) 보μž₯λ©”μ†Œλ“œ μ‹€ν–‰ 쀑 ν•˜λ‚˜μ˜ μž‘μ—…μ΄λΌλ„ μ‹€νŒ¨ν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œ λ‚΄ λͺ¨λ“  λ³€κ²½ 사항을 λ‘€λ°±ν•œλ‹€. 예λ₯Ό λ“€μ–΄ INSERT ν›„ UPDATEμ—μ„œ μ˜ˆμ™Έ λ°œμƒ μ‹œ, INSERT λ˜ν•œ μ·¨μ†Œλ˜μ–΄ DB μƒνƒœκ°€ μ΄μ „μœΌλ‘œ λ³΅μ›λœλ‹€.2. 일관성(Consistency..