μœˆλ„μš°μ™€ λ¦¬λˆ…μŠ€μ˜ λ©€ν‹°ν”„λ‘œμ„Έμ‹± λ™μž‘ 방식 차이
Β·
πŸ’» 개발/πŸ–₯️ 운영체제
λ“€μ–΄κ°€λ©°μž‘λ…„μ— μ‹€λ¬΄μ—μ„œ νŒŒμ΄μ¬μ„ μ‚¬μš©ν•΄ λ©€ν‹°ν”„λ‘œμ„Έμ‹± μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄μ„œ λ¬Έμ œκ°€ λ°œμƒν•œ 적이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.νŠΉμ • μž‘μ—…μ—μ„œ SQLAlchemy(파이썬 ORM 라이브러리)의 DB 컀λ„₯μ…˜ 풀을 μ‚¬μš©ν•΄ 데이터λ₯Ό INSERTν•˜λŠ” 둜직이 μžˆμ—ˆλŠ”λ°, 둜컬 개발 ν™˜κ²½(μœˆλ„μš°)μ—μ„œλŠ” μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ™μΌν•œ μ½”λ“œλ₯Ό 사내 개발 μ„œλ²„(λ¦¬λˆ…μŠ€)에 λ°°ν¬ν–ˆμ„ λ•Œ λ‹€μŒκ³Ό 같은 μ—λŸ¬ λ‘œκ·Έκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 2024-12-21 17:57:00,471 [ERROR ] [Process-21][Thread-140372676175552]: write_module:76: Error during bulk insert: ORA-01001: invalid cursorORA-03106: fatal two-task communicatio..
ν•­ν•΄ ν”ŒλŸ¬μŠ€ μ΅œμ’… 회고 (+주차별 ν•™μŠ΅λ‚΄μš© 정리)
Β·
🏠 일상/πŸ““ 일상 일기
λ“€μ–΄κ°€λ©°11μ›” 30일, 10μ£Ό κ°„μ˜ ν•­ν•΄ ꡐ윑 과정이 끝났닀.μ—­μ‹œ λŒμ•„λ³΄λ‹ˆ 짧게 λŠκ»΄μ§€λŠ” 건 μ—¬λŠ κ²½ν—˜κ³Όλ„ λΉ„μŠ·ν•œ 감정을 λŠλΌλŠ” 것 κ°™λ‹€. ν•­ν•΄ μˆ˜κ°• μ „, μ»€λ¦¬ν˜λŸΌμ„ λ³΄μ•˜μ„ 땐 이런 생각을 ν–ˆλ‹€.  TDD, Kafka, Redis... λ‹€ μ΅μˆ™ν•œ ν‚€μ›Œλ“œμΈλ°, ν˜Όμžμ„œλ„ 곡뢀할 수 μžˆμ§€ μ•Šμ„κΉŒ? κ³Όμ—° 큰 λˆμ„ λ‚΄λ©΄μ„œκΉŒμ§€ λ°°μšΈλ§Œν•œ κ°€μΉ˜κ°€ μžˆμ„κΉŒ? λ¬Όλ‘  마음만 먹으면 ν˜Όμžμ„œλ„ κ°€λŠ₯ν–ˆμ„μ§€ λͺ¨λ₯Έλ‹€. ν•˜μ§€λ§Œ ν˜Όμžμ„œλŠ” ν•˜μ§€ λͺ»ν•  μ΄μœ κ°€ μžˆμ—ˆλ‹€. 1. 10μ£Όμ•ˆμ— κΈ°μˆ μ„ 읡히고, ν”„λ‘œμ νŠΈμ— 반영2. κ΄‘λ²”μœ„ν•œ μ‚¬μš© 방법 쀑 싀무에 κΌ­ ν•„μš”ν•œ 방법을 캐치3. μ‹œλ‹ˆμ–΄ κ°œλ°œμžλ“€μ˜ νŠΈλŸ¬λΈ”μŠˆνŒ… κ²½ν—˜μœΌλ‘œ μ–»μ–΄λ‚Έ λ…Έν•˜μš° μ΄ μ„Έ κ°€μ§€λŠ” 혼자 κ³΅λΆ€ν•΄μ„œ μ–»μ–΄λ‚΄κΈ°μ—” λ„ˆλ¬΄ 였랜 μ‹œκ°„μ΄ ν•„μš”ν•œ κ²ƒλ“€μ΄μ—ˆλ‹€.그런 μ˜λ―Έμ—μ„œ λ‚˜μ—κ²Œ μ§€λ‚œ 10μ£ΌλŠ” 폭발적..
λΆ€ν•˜ ν…ŒμŠ€νŠΈ: μœ μ € 행동 기반 μ‹œλ‚˜λ¦¬μ˜€λ‘œ μ‹œμŠ€ν…œ ν•œκ³„ μΈ‘μ •κ³Ό SLA, SLO 검증
Β·
πŸ’» 개발/🎸 ETC
λ“€μ–΄κ°€λ©°λΆ€ν•˜ ν…ŒμŠ€νŠΈλŠ” μ‹œμŠ€ν…œμ˜ μ΅œλŒ€ μ²˜λ¦¬λŸ‰(TPS), μ•ˆμ •μ„±, SLA(μ„œλΉ„μŠ€ μˆ˜μ€€ 계약) 및 SLO(μ„œλΉ„μŠ€ μˆ˜μ€€ λͺ©ν‘œ)λ₯Ό κ²€μ¦ν•˜λŠ” μ€‘μš”ν•œ κ³Όμ •μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ—μ„œ μœ μ € 행동을 기반으둜 ν•œ 두 가지 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ€‘μ‹¬μœΌλ‘œ, Docker ν™˜κ²½μ—μ„œ μžμ›μ„ μ‘°μ ˆν•˜λ©° μ„±λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.   1. ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ μ„€κ³„μœ μ €μ˜ 행동을 기반으둜 두 가지 ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€. 각각의 μ‹œλ‚˜λ¦¬μ˜€λŠ” μ‹œμŠ€ν…œμ˜ μ„œλ‘œ λ‹€λ₯Έ μƒνƒœ(μœ μ € λΉ„ν™œμ„±/μœ μ € ν™œμ„±)λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ μ„ μ •ν–ˆμŠ΅λ‹ˆλ‹€. - μ‹œλ‚˜λ¦¬μ˜€ 1 : μœ μ € λŒ€κΈ°μ—΄ λΉ„ν™œμ„±λͺ©ν‘œ: λŒ€κΈ°μ—΄ μ‹œμŠ€ν…œμ—μ„œ 토큰 λ°œκΈ‰ 및 μƒνƒœ 쑰회의 μ²˜λ¦¬λŸ‰ 츑정행동 νλ¦„μœ μ €κ°€ λŒ€κΈ°μ—΄ 토큰 λ°œκΈ‰ μš”μ²­μœ μ €κ°€ 1초 κ°„κ²©μœΌλ‘œ 토큰 μƒνƒœ μ‘°νšŒμ€‘μ λŒ€κΈ°μ—΄ μ‹œμŠ€ν…œμ˜..
μ„œλΉ„μŠ€ ν™•μž₯을 μœ„ν•œ νŠΈλžœμž­μ…˜ 뢄리와 이벀트 기반 섀계
Β·
πŸ’» 개발/πŸ€ Spring
λ“€μ–΄κ°€λ©°λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ—μ„œ νŠΈλžœμž­μ…˜μ˜ λ²”μœ„μ™€ μ„œλΉ„μŠ€ κ°„μ˜ κ²°ν•©λ„λŠ” μ„±λŠ₯κ³Ό ν™•μž₯성에 큰 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. 특히, κΈ°μ‘΄ λ‘œμ§μ— 영ν–₯을 주지 μ•ŠμœΌλ©΄μ„œ λΆ€κ°€ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜, νŠΈλžœμž­μ…˜ 경계λ₯Ό μ΅œμ ν™”ν•˜λŠ” 것은 μ„œλΉ„μŠ€μ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” μ€‘μš”ν•œ μž‘μ—…μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” ν˜„μž¬ μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ νŠΈλžœμž­μ…˜ λ²”μœ„λ₯Ό λΆ„μ„ν•˜κ³ , μ„œλΉ„μŠ€λ“€μ„ κΈ°λŠ₯λ³„λ‘œ λΆ„λ¦¬ν•˜λ©° 이벀트 기반 섀계λ₯Ό λ„μž…ν•˜λŠ” 과정에 λŒ€ν•΄ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.   ν˜„μž¬ μ½”λ“œμ˜ νŠΈλžœμž­μ…˜ λ²”μœ„ 뢄석 νŠΈλžœμž­μ…˜ λ²”μœ„ν˜„μž¬ μ½”λ“œμ—μ„œ @Transactional이 적용된 핡심 둜직 쀑 μ˜ˆμ•½ 생성과 결제 μ²˜λ¦¬μ— λŒ€ν•œ λ‘œμ§μ— λŒ€ν•΄ νŠΈλžœμž­μ…˜ λ²”μœ„λ₯Ό λΆ„μ„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 두 λ‘œμ§μ€ μ•„λž˜κ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.   μ˜ˆμ•½ 생성@Serviceclass ReservationService( ..
μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ 인덱슀 섀계와 μ„±λŠ₯ 비ꡐ
Β·
πŸ’» 개발/πŸ’Ύ Database
λ“€μ–΄κ°€λ©° μ΄λ²ˆ κΈ€μ—μ„œ μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μ‚¬μš©λœ 쿼리λ₯Ό λΆ„μ„ν•˜κ³ , 인덱슀 μΆ”κ°€ μ „ν›„μ˜ μ„±λŠ₯을 비ꡐ해 보며 μ΅œμ ν™” 과정을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. MariaDBλ₯Ό μ‚¬μš©ν•΄ 인덱슀 μΆ”κ°€ μ „ν›„μ˜ μ‹€ν–‰ κ³„νš(EXPLAIN) 및 μˆ˜ν–‰ 속도λ₯Ό λΉ„κ΅ν•œ κ²°κ³Όλ₯Ό 톡해, 쿼리의 μ„±λŠ₯을 μ΅œμ’…μ μœΌλ‘œ μ–΄λ–»κ²Œ κ°œμ„ ν•˜μ˜€λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.   μ‹œλ‚˜λ¦¬μ˜€ λ‚΄ 쿼리먼저 μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ 도메인 별 각 JpaRepositoryμ—μ„œ μ‚¬μš©λ˜λŠ” 쿼리λ₯Ό λͺ¨λ‘ μˆ˜μ§‘ν–ˆμŠ΅λ‹ˆλ‹€. 도메인 별 쿼리λ₯Ό μ•„λž˜ ν‘œλ‘œ μ •λ¦¬ν•΄λ΄€μŠ΅λ‹ˆλ‹€.  도메인 λ©”μ„œλ“œ ConcertfindAllByConcertId()ReservationfindByIdOrNullWithLock(), findAllByExpiresAtBeforeAndStatus()SeatfindByIdOrNu..
Redis 기반의 캐싱 및 λŒ€κΈ°μ—΄ 관리λ₯Ό ν†΅ν•œ μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€ μ„±λŠ₯ κ°œμ„ 
Β·
πŸ’» 개발/πŸ€ Spring
λ“€μ–΄κ°€λ©°μ΄λ²ˆ μ‹œκ°„μ—λŠ” μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ˜ μ„±λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€μ˜ 쑰회 API 쀑 캐싱을 μ μš©ν•  뢀뢄에 λŒ€ν•΄ κ³ λ―Όν•΄ 보고, κΈ°μ‘΄ RDBμ—μ„œ μž‘λ™λ˜κ³  있던 λŒ€κΈ°μ—΄ λ‘œμ§μ„ Redis둜 μ΄κ΄€ν•˜λŠ” 과정에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 또 캐싱 μ „ν›„ ν…ŒμŠ€νŠΈ κ²°κ³Ό 비ꡐλ₯Ό 톡해 μ–Όλ§ˆλ‚˜ μ„±λŠ₯이 κ°œμ„ λ˜λŠ”μ§€λ„ 체크해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.    μΊμ‹œ 적용 κΈ°μ€€μš°μ„  μΊμ‹œλ₯Ό μ μš©ν•  λ•Œ κ³ λ €ν•΄μ•Ό ν•  기쀀은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 1. 쑰회 λΉ„μš©μ΄ λ†’μ€μ§€λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” λΉ„μš©μ΄ 큰 경우 캐싱을 톡해 μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 2. μ–Όλ§ˆλ‚˜ 자주 μ‘°νšŒλ˜λŠ”μ§€λ°˜λ³΅μ μΈ μš”μ²­μ΄ λ§Žμ€ 경우 μΊμ‹œλ₯Ό ν™œμš©ν•˜μ—¬ νš¨μœ¨μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 3. 데이터 정합성에 μ΄μŠˆκ°€ μ—†λŠ”μ§€μΊμ‹œλ₯Ό μ‚¬μš©ν•  경우, μΊμ‹œλœ 데이터와 원본 데이터 κ°„μ˜ μ •ν•©..
μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ—μ„œ Lock μ„±λŠ₯ 비ꡐ해보기 (feat. 낙관적 락, 비관적 락, λΆ„μ‚° 락)
Β·
πŸ’» 개발/🎸 ETC
λ“€μ–΄κ°€λ©°μ½˜μ„œνŠΈ μ˜ˆμ•½ μ„œλΉ„μŠ€μ™€ 같은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” λ™μ‹œμ„± 처리λ₯Ό κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ’Œμ„ 예맀 μ˜€ν”ˆ μ‹œ μ—¬λŸ¬ μ‚¬μš©μžκ°€ λ™μ‹œμ— μ˜ˆμ•½μ„ μ‹œλ„ν•˜λ©΄, μžμ›μ΄ μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬λ˜μ§€ μ•Šμ„ 경우 μ˜ˆμ•½μ΄ μ΄ˆκ³Όλ˜κ±°λ‚˜ 데이터 일관성이 깨질 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이번 μ‹œκ°„μ— μ½”λ“œ 적용 및 ν…ŒμŠ€νŠΈλ₯Ό 톡해 각 λ™μ‹œμ„± 처리 λ°©μ‹μ˜ μž₯단점을 κ²€ν† ν•˜κ³ , μ΅œμ’…μ μœΌλ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— μ ν•©ν•œ λ™μ‹œμ„± 처리 방식을 μ„ μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.  λ™μ‹œμ„± μ΄μŠˆκ°€ λ°œμƒν•  수 μžˆλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ„œλΉ„μŠ€μ—μ„œ λ™μ‹œμ„± μ΄μŠˆκ°€ λ°œμƒν•  수 μžˆλŠ” μ£Όμš” λ‘œμ§μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.μ’Œμ„ μ˜ˆμ•½λ½μ„ κ±Έμ–΄μ•Ό ν•˜λŠ” μžμ›seatν…Œμ΄λΈ”μ˜ statusconcert_scheduleν…Œμ΄λΈ”μ˜ available_seats포인트 μΆ©μ „ 및 κ²°μ œλ½μ„ κ±Έμ–΄μ•Ό ν•˜λŠ” μžμ›userν…Œμ΄λΈ”μ˜ balancereserv..
Chapter 2λ₯Ό λŒμ•„λ³΄λ©° - ν•­ν•΄ ν”ŒλŸ¬μŠ€ 회고 (5μ£Όμ°¨)
Β·
🏠 일상/πŸ““ 일상 일기
λ“€μ–΄κ°€λ©°λ²Œμ¨ ν•­ν•΄λ₯Ό μ‹œμž‘ν•˜κ³  10μ£Ό κ³Όμ •μ˜ 절반 지점에 λ„μ°©ν–ˆλ‹€. λ³Έμ—…κ³Ό ν•¨κ»˜ 강도 높은 과제λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것이 μ‰½μ§€λŠ” μ•Šμ•˜μ§€λ§Œ, 절반이 μ§€λ‚¬λ‹€λŠ” μ μ—μ„œ 남은 μ ˆλ°˜λ„ 금방 잘 ν•΄λ‚Ό 수 μžˆμ„ 것 κ°™λ‹€λŠ” 생각이 λ“ λ‹€. μ§€λ‚œ 5μ£Ό λ™μ•ˆ 우리 νŒ€ 5λͺ… 쀑 3λͺ…이 μ΄νƒˆν–ˆλ‹€. λŒ€λΆ€λΆ„μ΄ λ³Έμ—… λ•Œλ¬Έμ— κ³Όμ œμ— μ§‘μ€‘ν•˜κΈ° μ–΄λ €μ› κΈ° λ•Œλ¬Έμ΄μ—ˆλ‹€. λ‹€ν–‰νžˆ λ‚˜μ˜ 경우 νšŒμ‚¬κ°€ λ°”μœ μ‹œμ¦Œμ΄ μ•„λ‹ˆμ–΄μ„œ (λ¬Όλ‘  λ°”μ˜μ§€ μ•Šμ•„λ„ νž˜λ“€μ§€λ§Œ) μ—¬κΈ°κΉŒμ§€ 버틸 수 μžˆμ—ˆλ‹€.  μ§€λ‚œ 3μ£Ό λ™μ•ˆ 과제λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ λ§Žμ€ 것을 배우고 κ²½ν—˜ν–ˆλ‹€. 일 λλ‚˜κ³  μƒˆλ²½ 2~3μ‹œκΉŒμ§€ 과제λ₯Ό ν•˜λ©° 피곀에 지쳐 μžˆμ—ˆμ§€λ§Œ, 덕뢄에 단기간에 큰 μ„±μž₯을 이룬 것 κ°™λ‹€. 이번 νšŒκ³ μ—μ„œλŠ” ν”„λ‘œμ νŠΈ Chapter 2(3~5μ£Όμ°¨)λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 배운 점듀과, μ—¬μ „νžˆ κ³ λ―Ό 쀑인 뢀뢄듀을 μ •..