Spring Boot 의 닀쀑 μœ μ € μš”μ²­ 처리 방법 (Tomcat)

Spring Boot 의 닀쀑 μœ μ € μš”μ²­ 처리 방법 (Tomcat)

1. Thread μŠ€λ ˆλ“œμ˜ κ°œλ…μ€ λ‹€μŒκ³Ό κ°™λ‹€. 싀행쀑인 ν•œ ν”„λ‘œκ·Έλž¨(ν”„λ‘œμ„ΈμŠ€) λ‚΄μ—μ„œ ꡬ뢄지어진 μ‹€ν–‰ λ‹¨μœ„ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λ‹¨μœ„λ‘œ μƒκ°ν•˜λ©΄ λœλ‹€. μ‹€μƒν™œ 예λ₯Ό λ“€λ©΄, 은행은 μ€ν–‰μ΄λΌλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ—¬λŸ¬ 고객의 λ™μ‹œ 거래 μš”μ²­ μž‘μ—…μ„ μ²˜λ¦¬ν•΄μ•Όν•œλ‹€. μ΄λ•Œ 은행이 λ³‘λ ¬μ μœΌλ‘œ λ™μ‹œ 거래 μš”μ²­ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ”λ°, ν•΄λ‹Ή μž‘μ—…μ΄ μ΄λ£¨μ–΄μ§€λŠ” λ‹¨μœ„κ°€ μŠ€λ ˆλ“œμΈ 것이닀. μ»΄ν“¨ν„°μ˜ CPUλŠ” μŠ€λ ˆλ“œ λ‹¨μœ„λ‘œ μž‘μ—…μ„ μ²˜λ¦¬ν•œλ‹€. CPUλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό λ²ˆκ°ˆμ•„κ°€λ©° μ‹€ν–‰ν•΄μ„œ 닀쀑 μž‘μ—…μ„ μ²˜λ¦¬ν•œλ‹€. CPUλ₯Ό μ—„μ²­ 짧은 μ‹œκ°„μœΌλ‘œ μ‹œλΆ„ν• ν•΄μ„œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 우리 λˆˆμ—λŠ” λ™μ‹œμ— μ²˜λ¦¬λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, 사싀은 μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” 것이닀. ❓ Threadκ°€ 많으면 λ§Žμ„μˆ˜λ‘ μ’‹μ„κΉŒ? 1. T..

  • textsms
λ©€ν‹° μ“°λ ˆλ“œ μ‚¬μš© μ‹œ κΌ­ μ•Œμ•„μ•Ό ν•  λ‚΄μš© - Thread-Safe

λ©€ν‹° μ“°λ ˆλ“œ μ‚¬μš© μ‹œ κΌ­ μ•Œμ•„μ•Ό ν•  λ‚΄μš© - Thread-Safe

λ©€ν‹° μ“°λ ˆλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” κ°€μž₯ ν™•μ‹€ν•œ 방법이닀. ν•˜μ§€λ§Œ μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ μžμ›μ„ κ³΅μœ ν•œλ‹€λ©΄ 예기치 μ•Šμ€ 문제λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€. Java에선 μ–΄λ–»κ²Œ Thread-Safeν•˜κ²Œ κ°œλ°œν•  수 μžˆλ„λ‘ 지원을 ν•˜λŠ”μ§€, λ‹€μ–‘ν•œ 방법듀에 λŒ€ν•΄ κ°„λ‹¨ν•œ μ½”λ“œμ™€ ν•¨κ»˜ μ•Œμ•„λ³΄κ³  μ‹€μ œ 개발 μ€‘μ΄λ˜ Thread-UnSafeν•œ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄λ³Ό 것이닀. 1. Thread Safe (μ“°λ ˆλ“œ 세이프) λž€? λ©€ν‹° μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ, μ–΄λ–€ 곡유 μžμ›μ— μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ λ™μ‹œμ— 접근해도, ν”„λ‘œκ·Έλž¨ 싀행에 λ¬Έμ œκ°€ μ—†λŠ” μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€. Race Condition 상황이 λ°œμƒν•΄λ„ 싀행에 λ¬Έμ œκ°€ 생기지 μ•ŠλŠ” 것을 μ˜λ―Έν•œλ‹€. Race Condition μ΄λž€? 경쟁 μƒνƒœλ‘œ, 곡유 μžμ›μ— λŒ€ν•΄ 두 개 μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ½κ±°λ‚˜ μ“°λŠ”..

  • textsms
DTO 관리에 λŒ€ν•œ κ³ λ―Όκ³Ό λ¦¬νŽ™ν† λ§

DTO 관리에 λŒ€ν•œ κ³ λ―Όκ³Ό λ¦¬νŽ™ν† λ§

πŸ€” 1. κ³ λ―Ό.. ν˜„μž¬ λ‚˜λŠ” μ°½μ—… ν”„λ‘œμ νŠΈμ—μ„œ 혼자 λ°±μ—”λ“œ κ°œλ°œμ„ 맑아 μ§„ν–‰ν•˜κ³  μžˆλ‹€. λŒ€ν•™μƒμ΄λ‹ˆ λ‹Ήμ—°νžˆ μ‚¬μˆ˜λ„ μ—†κ³ , 같이 κ³ λ―Όν•˜κ³  ν† λ‘ ν•  λ°±μ—”λ“œ νŒ€μ›λ„ μ—†μœΌλ‹ˆ λ‚΄κ°€ κ²°μ •ν•œ λͺ¨λ“  것이 κ·ΈλŒ€λ‘œ ν”„λ‘œμ νŠΈμ— λ°˜μ˜λ˜μ—ˆλ‹€. λ‚˜μ˜ 잘λͺ»λœ νŒλ‹¨, μŠ΅κ΄€ λ“€λ‘œ ν”„λ‘œμ νŠΈκ°€ 망가지지 μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•΄ λŠμž„μ—†μ΄ λ˜λŒμ•„λ³΄κ³  쑰언을 κ΅¬ν•˜λ©° μ§„ν–‰ν•˜κ³  μžˆλ‹€. ν˜„μž¬ ν”„λ‘œμ νŠΈλŠ” 큰 ν‹€λ‘œ domain, global λ₯Ό λ‚˜λˆ΄κ³ , 도메인 λ³„λ‘œ entity, dtoλ“± μƒμ„±ν•˜κ³  μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀짐에 따라 dto관리λ₯Ό ν•˜κΈ°κ°€ λ„ˆλ¬΄ νž˜λ“€μ—ˆλ‹€. λ‹Ήμž₯ λͺ‡ μ£Ό 전에 κ°œλ°œν–ˆλ˜ μ½”λ“œλ₯Ό λ”± 봀을 λ•Œ 무슨 역할을 ν•˜λŠ” ν΄λž˜μŠ€μΈμ§€ λ°”λ‘œ μ•Œμ•„μ°¨λ¦¬κΈ° νž˜λ“€μ—ˆλ‹€. λ‚˜λ¦„ μ½”λ“œμ— 신경을 많이 μ¨μ„œ 개발 ν•˜λŠ” μŠ€νƒ€μΌμΈλ° 규λͺ¨κ°€ μ»€μ§€λ‹ˆ μ–΄μ§€λŸ¬μ› λ‹€. μ•„λž˜λŠ” ..

  • textsms
[Spring Batch] Paging 기반의 ItemReader μ‚¬μš© μ‹œ λ°œμƒν•˜λŠ” 데이터 κ±΄λ„ˆλ›°κΈ° ν˜„μƒ (ν•΄κ²° 방법 2가지)

[Spring Batch] Paging 기반의 ItemReader μ‚¬μš© μ‹œ λ°œμƒν•˜λŠ” 데이터 κ±΄λ„ˆλ›°κΈ° ν˜„μƒ (ν•΄κ²° 방법 2가지)

1. 문제 상황 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κΈ°μ€€μœΌλ‘œ ItemReader의 κ΅¬ν˜„μ²΄λ₯Ό λ‚˜λˆŒ λ•Œ, Cursor Based ItemReaderκ³Ό Paging Based ItemReader으둜 λ‚˜λˆŒ 수 μžˆλ‹€. Cursor 기반의 ItemReader의 경우, λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ„ μ§€μ†μ μœΌλ‘œ λ…μ μœΌλ‘œ μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λŠ” μ‹œμ κΉŒμ§€ 컀λ„₯μ…˜μ„ 놓아주지 μ•ŠκΈ° λ•Œλ¬Έμ—, κ²½μš°μ— 따라 μ„±λŠ₯상에 영ν–₯을 쀄 수 μžˆλ‹€. λ”°λΌμ„œ Paging 기반의 ItemReaderλ₯Ό μ„ νƒν–ˆκ³  μ΅œκ·Όμ— μŠ€μΌ€μ€„λŸ¬μ™€, 배치 λ‘œμ§μ„ κ°œλ°œν–ˆλ‹€. ν•˜μ§€λ§Œ μ‹€μ œ 둜직 μˆ˜ν–‰ κ²°κ³ΌλŠ” μ›ν•˜λŠ”λ°λ‘œ λ˜μ§€ μ•Šμ•˜κ³ , λͺ‡ 개의 데이터λ₯Ό κ±΄λ„ˆλ›΄μ±„λ‘œ μˆ˜ν–‰λ˜μ—ˆλ‹€. λ‚˜μ˜ 배치 λ‘œμ§μ€ νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λ©΄ PENDING μ€‘μ΄λ˜ Applyλ₯Ό CANCELED둜 λ³€κ²½ν•΄μ£ΌλŠ” 것이닀. μ‚¬μ§„μ—μ„œ work_..

  • textsms
JPA 1μ°¨ 캐싱을 μ΄μš©ν•œ μ„±λŠ₯ νŠœλ‹, 그리고 1μ°¨ 캐싱이 λ˜μ§€ μ•ŠλŠ” κ²½μš°μ™€ μš°νšŒλ²•

JPA 1μ°¨ 캐싱을 μ΄μš©ν•œ μ„±λŠ₯ νŠœλ‹, 그리고 1μ°¨ 캐싱이 λ˜μ§€ μ•ŠλŠ” κ²½μš°μ™€ μš°νšŒλ²•

1. μ„œλ‘  진행쀑인 ν”„λ‘œμ νŠΈμ—μ„œ μ•„λž˜ 사진과 같은 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ²Œ λ˜μ—ˆλ‹€. κΈ°λŠ₯ μ„€λͺ…λΆ€ν„° κ°„λ‹¨νžˆ ν•˜λ©΄ 본인이 올린 곡고글이 있으면 νŠΉμ • λ…Έλ™μžμ—κ²Œ 일자리λ₯Ό μ œμ•ˆν•  수 μžˆλŠ” κΈ°λŠ₯이닀. μ΄λ•Œ λ…Έλ™μžμ˜ μΆœμ—­ κ°€λŠ₯ν•œ λ‚ μ§œμ™€ κ³΅κ³ κΈ€μ˜ μΆœμ—­ λ‚ μ§œλ₯Ό λΉ„κ΅ν•˜μ—¬ μ œμ•ˆν•  수 μžˆλ‹€. 기업은 λ…Έλ™μžμ—κ²Œ 일자리λ₯Ό μ œμ•ˆν•  λ•Œ μ—¬λŸ¬ 개의 곡고글을 μ œμ•ˆν•  수 μžˆλ‹€. λ™μ‹œμ— 각 곡고글은 μ—¬λŸ¬ 날을 μ„ νƒν•˜μ—¬ μ œμ•ˆν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ 1,2,3일을 μΌν•˜λŠ” 곡고글 A와 2,3,4일을 μΌν•˜λŠ” 곡고글 Bκ°€ 있고, CλΌλŠ” λ…Έλ™μžλŠ” 2일날 μΆœμ—­μ΄ ν™•μ •λœ 상황이 μžˆλ‹€κ³  κ°€μ •ν•˜μž. 그럼 기업은 Cλ…Έλ™μžμ—κ²Œ 곡고 A의 1,3일, 곡고 B의 3,4일을 μ œμ•ˆν•  수 μžˆλŠ” 것이닀. μš”μ²­ JSON은 λ‹€μŒκ³Ό κ°™λ‹€. { "resumeId": 1, "offerJ..

  • textsms