μ„œλΉ„μŠ€ ν™•μž₯을 μœ„ν•œ νŠΈλžœμž­μ…˜ 뢄리와 이벀트 기반 섀계
Β·
πŸ’» 개발/πŸ€ Spring
λ“€μ–΄κ°€λ©°λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ—μ„œ νŠΈλžœμž­μ…˜μ˜ λ²”μœ„μ™€ μ„œλΉ„μŠ€ κ°„μ˜ κ²°ν•©λ„λŠ” μ„±λŠ₯κ³Ό ν™•μž₯성에 큰 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. 특히, κΈ°μ‘΄ λ‘œμ§μ— 영ν–₯을 μ£Όμ§€ μ•ŠμœΌλ©΄μ„œ λΆ€κ°€ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜, νŠΈλžœμž­μ…˜ 경계λ₯Ό μ΅œμ ν™”ν•˜λŠ” 것은 μ„œλΉ„μŠ€μ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” μ€‘μš”ν•œ μž‘μ—…μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” ν˜„μž¬ μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ νŠΈλžœμž­μ…˜ λ²”μœ„λ₯Ό λΆ„μ„ν•˜κ³ , μ„œλΉ„μŠ€λ“€μ„ κΈ°λŠ₯λ³„λ‘œ λΆ„λ¦¬ν•˜λ©° 이벀트 기반 섀계λ₯Ό λ„μž…ν•˜λŠ” 과정에 λŒ€ν•΄ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.   ν˜„μž¬ μ½”λ“œμ˜ νŠΈλžœμž­μ…˜ λ²”μœ„ 뢄석 νŠΈλžœμž­μ…˜ λ²”μœ„ν˜„μž¬ μ½”λ“œμ—μ„œ @Transactional이 적용된 핡심 둜직 쀑 μ˜ˆμ•½ 생성과 결제 μ²˜λ¦¬μ— λŒ€ν•œ λ‘œμ§μ— λŒ€ν•΄ νŠΈλžœμž­μ…˜ λ²”μœ„λ₯Ό λΆ„μ„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 두 λ‘œμ§μ€ μ•„λž˜κ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.   μ˜ˆμ•½ 생성@Serviceclass ReservationService( ..
Redis 기반의 캐싱 및 λŒ€κΈ°μ—΄ 관리λ₯Ό ν†΅ν•œ μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€ μ„±λŠ₯ κ°œμ„ 
Β·
πŸ’» 개발/πŸ€ Spring
λ“€μ–΄κ°€λ©°μ΄λ²ˆ μ‹œκ°„μ—λŠ” μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ μ„±λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€μ˜ 쑰회 API 쀑 캐싱을 μ μš©ν•  뢀뢄에 λŒ€ν•΄ κ³ λ―Όν•΄ 보고, κΈ°μ‘΄ RDBμ—μ„œ μž‘λ™λ˜κ³  있던 λŒ€κΈ°μ—΄ λ‘œμ§μ„ Redis둜 μ΄κ΄€ν•˜λŠ” 과정에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 또 캐싱 μ „ν›„ ν…ŒμŠ€νŠΈ κ²°κ³Ό 비ꡐλ₯Ό 톡해 μ–Όλ§ˆλ‚˜ μ„±λŠ₯이 κ°œμ„ λ˜λŠ”μ§€λ„ 체크해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.    μΊμ‹œ 적용 κΈ°μ€€μš°μ„  μΊμ‹œλ₯Ό μ μš©ν•  λ•Œ κ³ λ €ν•΄μ•Ό ν•  기쀀은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 1. 쑰회 λΉ„μš©μ΄ λ†’μ€μ§€λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” λΉ„μš©μ΄ 큰 경우 캐싱을 톡해 μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 2. μ–Όλ§ˆλ‚˜ 자주 μ‘°νšŒλ˜λŠ”μ§€λ°˜λ³΅μ μΈ μš”μ²­μ΄ λ§Žμ€ 경우 μΊμ‹œλ₯Ό ν™œμš©ν•˜μ—¬ νš¨μœ¨μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 3. 데이터 정합성에 μ΄μŠˆκ°€ μ—†λŠ”μ§€μΊμ‹œλ₯Ό μ‚¬μš©ν•  경우, μΊμ‹œλœ 데이터와 원본 데이터 κ°„μ˜ μ •ν•©..
λ™μ‹œμ„± 처리 μ‰½κ²Œ μ΄ν•΄ν•˜κΈ° (synchronized, reentrantLock)
Β·
πŸ’» 개발/πŸ€ Spring
1. λ™μ‹œμ„± μ²˜λ¦¬λŠ” μ™œ ν•˜λŠ”κ±ΈκΉŒ?λ™μ‹œμ„± 처리λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ μœ μ €κ°€ 포인트λ₯Ό λ™μ‹œμ— μΆ©μ „ λ˜λŠ” μ‚¬μš©ν•  λ•Œ 데이터 뢈일치 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 같은 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λ©΄μ„œ λ°œμƒν•˜λŠ” Race Condition(경쟁 μƒνƒœ) ν˜„μƒμ΄λΌ λ³Ό 수 μžˆλŠ”λ°, Race Conditionμ΄λž€ 곡유 μžμ›μ— λŒ€ν•΄ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— 접근을 μ‹œλ„ν•  λ•Œ, μ‹€ν–‰ μˆœμ„œλ‚˜ μ‹œκ°„μ— μ˜ν•΄ κ²°κ³Ό 값에 영ν–₯을 쀄 수 μžˆλŠ” μƒνƒœλ₯Ό λ§ν•©λ‹ˆλ‹€. μ•„λž˜ 그림을 톡해 Race Condition에 λŒ€ν•œ μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.μœ„ κ·Έλ¦Όκ³Ό 같이 2개의 μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λœ 각각의 νƒœμŠ€ν¬κ°€ pointλΌλŠ” λ³€μˆ˜μ— λ™μ‹œμ— μ ‘κ·Όν•˜μ—¬ μ΄ˆκΈ°κ°’ 0을 μ½μ–΄μ™”μŠ΅λ‹ˆλ‹€. 그리고 각각 500을 λ”ν•˜λŠ” 연산을 μˆ˜ν–‰ν•˜κ³ , point에 κ²°κ³Ό 값을 λŒ€μž…ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κΈ°λŒ€μ™€..
Spring Security λ‚΄λΆ€ 흐름 μ΄ν•΄ν•˜κΈ°
Β·
πŸ’» 개발/πŸ€ Spring
맀번 인증, 인가에 λŒ€ν•œ 뢀뢄에 λŒ€ν•΄ μ œλŒ€λ‘œ μˆ™μ§€ν•˜μ§€ μ•Šκ³ , μ½”λ“œλ§Œ κ°€μ Έλ‹€κ°€ μ‚¬μš©ν•œ κ²½μš°κ°€ λ§Žμ•˜λ‹€. νšŒμ‚¬μ—μ„œλ„ 이에 λŒ€ν•΄ λ‹€λ£° 수 μžˆλŠ” κΈ°νšŒκ°€ μ—†λ‹€ λ³΄λ‹ˆ 졜근 토이 ν”„λ‘œμ νŠΈλ‘œ νŒ¨μ…˜ 이컀머슀 ν”Œλž«νΌμ„ κ΅¬ν˜„ν•˜λ©΄μ„œ μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°μ— λŒ€ν•΄ 곡뢀도 해보고, μ–΄λŠ 정도 기본적인 이해λ₯Ό ν•˜λ©° μ μš©ν•˜κ²Œ λ˜μ—ˆλ‹€. 주둜 유데미(Udemy)의 μŠ€ν”„λ§ μ‹œνλ¦¬ν‹° κ°•μ˜λ₯Ό λ“£κ³  μ΄ν•΄ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€κ³ , μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°μ˜ κΈ°λ³Έ λ™μž‘ 흐름에 λŒ€ν•΄ μž‘μ„±ν•˜μ˜€λ‹€. Spring Securityλž€? Spring 곡식 ν™ˆνŽ˜μ΄μ§€(https://spring.io/projects/spring-security)μ—μ„œλŠ” Spring Securityλ₯Ό μ•„λž˜μ™€ 같이 μ†Œκ°œν•˜κ³  μžˆλ‹€. 곡식 ν™ˆνŽ˜μ΄μ§€κ°€ 제일 μ •ν™•ν•˜κ³  μžμ„Έν•˜κ²Œ μ„€λͺ…이 λ˜μ–΄μžˆμœΌλ‹ˆ λ§Œμ•½ 더 μ•Œκ³  μ‹Άλ‹€..
μŠ€ν”„λ§ λΆ€νŠΈμ— OpenAI Whisper API μ μš©ν•˜κΈ°
Β·
πŸ’» 개발/πŸ€ Spring
Whisperκ°€ 뭔데? WhisperλŠ” μš”μ¦˜ ChatGPT둜 ν•«ν•œ OpenAIμ—μ„œ κ°œλ°œν•œ μžλ™ μŒμ„± 인식 λͺ¨λΈμ΄λ‹€. μŒμ„±μ„ ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•˜λŠ” STT(Speech-to-Text) κΈ°μˆ μ„ ν™œμš©ν•˜μ—¬, λŒ€ν™” μŒμ„± νŒŒμΌμ„ ν…μŠ€νŠΈλ‘œ μ €μž₯ν•  수 μžˆλ‹€. OpenAIλŠ” μ˜¬ν•΄ 3μ›” 1일 GPT-3.5-turbo λͺ¨λΈμ„ 기반으둜 ν•œ Whisper APIλ₯Ό μΆœμ‹œν•˜μ˜€λ‹€. APIκ°€ 제곡되기 이전엔 Whisperλ₯Ό μ‚¬μš©ν•˜κΈ°κ°€ λΆˆνŽΈν–ˆμ§€λ§Œ, 이젠 κ³ μ„±λŠ₯ λͺ¨λΈ(Large-v2)을 μ•½κ°„μ˜ κΈˆμ•‘μ„ μ§€λΆˆν•˜κ³  μ΄μš©ν•¨μœΌλ‘œμ¨ κ°œλ°œμžλ“€μ΄ μ‚¬μš©ν•˜κΈ°μ— νŽΈμ˜μ„±μ΄ μ’‹μ•„μ‘Œλ‹€. κ·Έλž˜μ„œ κ°„λ‹¨ν•˜κ²Œ μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό ν™œμš©ν•΄μ„œ Whisper APIλ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² λ‹€. μš°μ„  본격적으둜 λ“€μ–΄κ°€κΈ° 전에, κ°„λ‹¨ν•˜κ²Œ λͺ‡ 개만 짚고 λ„˜μ–΄κ°€ 보자. 보톡 STT κΈ°μˆ μ€ W..