2023.05.12
였늘의 λ°λΈŒλ ˆν„°
1. [λ°λΈŒλ…ΈνŠΈ]
19λ…„ μ°¨ κ°œλ°œμžκ°€ 싀무λ₯Ό ν•˜λ©΄μ„œ λ§ˆμ£Όν•œ 기술 μ΄μŠˆλ“€κ³Ό ν•΄κ²° κ²½ν—˜μ„ 가져와 λ΄€μ–΄μš”.

<19λ…„ μ°¨ κ°œλ°œμžκ°€ μ‹€λ¬΄μ—μ„œ 맞λ‹₯뜨린 기술 μ΄μŠˆλ“€>


μ†ŒμΌ“ 라이브러리 μ„±λŠ₯ μ €ν•˜ 이슈

2010λ…„ 즈음 μ†ŒμΌ“ 라이브러리 개발 쀑에 λ°œμƒν•œ μ΄μŠˆμ΄λ‹€. ν•œλ° μΈμ ‘ν•œ 버퍼에 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ•‘μ„ΈμŠ€ ν•  λ•Œ κΈ‰κ²©νžˆ λŠλ €μ§€λŠ” 둜그λ₯Ό λ°œκ²¬ν–ˆλ‹€.

  • μ„±λŠ₯ 츑정을 μœ„ν•œ profiler
  • 자체적인 둜그 λͺ¨λ‘μ—μ„œ 이상 ν˜„μƒμ΄ λ³΄μ˜€λ‹€.

정상적인 μƒν™©μ—μ„œ ms μ΄ν•˜μ˜ μ‹œκ°„μ΄ μ†Œμš”λ˜λŠ”λ° μ΄ˆλ‹¨μœ„ μ΄μƒμ˜ μ‹œκ°„μ΄ μ†Œμš”λ˜λŠ” ν˜„μƒμœΌλ‘œ 인해 latencyκ°€ λ°œμƒν•˜κ³  μžˆμ—ˆκ³ , 이둜 μΈν•œ 간헐적 지연에 μ΅œμš°μ„  λŒ€μ‘ κ³Όμ œκ°€ λ˜μ—ˆλ‹€. κ΄€λ ¨ν•œ 상황에 λŒ€ν•΄μ„œ 사내 μ—¬λŸ¬ κ°œλ°œμžλΆ„λ“€κ»˜ λ¬Όμ–΄λ³΄κ²Œ λ˜μ—ˆμœΌλ©°, λ™λ£ŒλΆ„λ“€κ³Ό μ½”λ“œμ™€ 둜그λ₯Ό 같이 보게 됐닀. 

 

그러던 쀑 ν•œ κ°œλ°œμžλΆ„μ΄ False Sharing μ•„λ‹ˆλƒλ©° 링크λ₯Ό λ˜μ Έμ£Όμ…¨λ‹€.(ν•΄λ‹Ή λΈ”λ‘œκ·ΈλŠ” λ‹Ήμ‹œ λ§ν¬λŠ” μ•„λ‹ˆμ§€λ§Œ 잘 μ„€λͺ…λœ 글이라 κ°€μ Έμ™€λ³΄μ•˜λ‹€.) C++ false sharingμ΄λž€?(거짓 곡유) (tistory.com) 

 

μš”μ•½ν•˜μžλ©΄ μΊμ‹œκ°„ 데이터 곡유λ₯Ό μœ„ν•΄ μ‹œκ°„μ„ μ†Œλͺ¨ν•˜λŠ” 과정이라고 λ³Ό 수 μžˆλ‹€. λ©€ν‹° μŠ€λ ˆλ“œκ°„ 인접 λ©”λͺ¨λ¦¬ 접근이 μ•ˆλ˜κ²Œλ” λ©”λͺ¨λ¦¬ μ˜μ—­μ— νŒ¨λ”©μ„ μ£Όμ–΄ 크게 μž‘μœΌλ‹ˆ ν•΄κ²°λ˜μ—ˆκ³ , 같은 버퍼에 λŒ€ν•΄μ„œ 접근이 μžˆμ„ κ²½μš°μ—λŠ” 순차 μ ‘κ·Όν•˜λ„λ‘ sequencialν•œ λ™μž‘μ΄ μ΄λ€„μ§€κ²Œλ” 큐둜 μ²˜λ¦¬ν–ˆλ‹€. λ‹Ήμ‹œ C++을 μ΄μš©ν–ˆκΈ° λ•Œλ¬Έμ΄κΈ°λ„ ν•˜μ§€λ§Œ, μ†ŒμΌ“ 라이브러리 자체λ₯Ό 직접 κ΅¬ν˜„ν•˜κ²Œ λ˜λ©΄μ„œ 컴퓨터 κ΅¬μ‘°λ‚˜ μš΄μ˜μ²΄μ œμ— λŒ€ν•œ 높은 이해가 ν•„μš”ν–ˆλ‹€.

 

CPU에 λŒ€ν•œ 이해도, 그리고 μΊμ‹œκ°€ μ–΄λ–€ 의미λ₯Ό κ°€μ§€λŠ”μ§€ μ’€ 더 잘 μ•Œμ•˜μ–΄μ•Ό ν–ˆλŠ”λ°, μ΄λŸ¬ν•œ 뢀뢄에 λŒ€ν•œ ν•™μŠ΅μ΄ λΆ€μ‘±ν•΄μ„œ 생긴 이슈라고 λ³Ό 수 μžˆκ² λ‹€.

 

μ΄λ•Œ 컴퓨터 ꡬ쑰와 μš΄μ˜μ²΄μ œμ— λŒ€ν•œ 높은 이해가 low level ν”„λ‘œκ·Έλž˜λ° (μš΄μ˜μ²΄μ œλ‚˜ λ©”λͺ¨λ¦¬λ₯Ό 직접 λ‹€λ£¨λŠ” μͺ½μ— κ·Όμ ‘ν•œ μž‘μ—…)을 ν•˜λŠ” 데에 μ€‘μš”ν•˜λ‹€κ³  느끼고 쑰금 더 ν•™μŠ΅μ— λ§€μ§„ν–ˆλŠ”λ°, μ΄λŸ¬ν•œ 뢀뢄이 high level ν”„λ‘œκ·Έλž˜λ°(이미 개발된 κΈ°μˆ μ„ ν™œμš©ν•˜κ±°λ‚˜, 잘 λ§Œλ“€μ–΄μ§„ νŒ¨ν‚€μ§€λ‚˜ 라이브러리λ₯Ό κ°€μ Έλ‹€κ°€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” 일)을 ν•˜κ²Œ 된 이후에도, 각쒅 μž₯μ•  ν˜„μƒμ΄λ‚˜, λ™μž‘ 원리λ₯Ό μ΄ν•΄ν•˜λŠ” 데에 큰 도움이 λ˜μ—ˆλ‹€.

 

λ‚˜λŠ” low level ν”„λ‘œκ·Έλž˜λ° κ³Όμ •μ—μ„œ λ‹ˆμ¦ˆλ₯Ό λŠκΌˆμ§€λ§Œ, high level ν”„λ‘œκ·Έλž˜λ°μ„ 주둜 ν•œλ‹€κ³  해도 컴퓨터 κ΅¬μ‘°λ‚˜ μš΄μ˜μ²΄μ œμ— λŒ€ν•œ 높은 이해가 큰 도움이 λœλ‹€.


μ†ŒμΌ“ μ„œλ²„ μ•žλ‹¨μ— L4 μŠ€μœ„μΉ˜ λ„μž… μ‹œ μƒκ²Όλ˜ 이야기

System Engineer κ΄€μ μ—μ„œ νŠΈλž˜ν”½ ν­λ°œμ„ λŒ€μ‘ν•˜κ³ μž ν•˜λŠ” μ°¨μ›μ—μ„œ L4 μŠ€μœ„μΉ˜κ°€ 점검 μ‹œκ°„μ— λ„μž…μ΄ 됐닀.

  • λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ μ œμ–΄λŠ” κΈ°μ‘΄ λΌμš°ν„°μ—μ„œ 쀑간 L4 μŠ€μœ„μΉ˜λ₯Ό ν•˜λ‚˜ 더 거치게 됐닀.
  • λΈŒλ‘œλ“œ μΊμŠ€νŒ… λŒ€μƒμ„ 쒁히기 μœ„ν•¨μ΄λΌκ³  μƒκ°ν•˜λ©΄ 그럴 μˆ˜λŠ” μžˆμ„ 것 κ°™μ•˜λ‹€. λ‚˜μ€‘μ—μ•Ό μ•Œκ²Œ 된 μ‚¬μ‹€μ΄μ§€λ§Œ, κ°œλ°œνŒ€ λˆ„κ΅¬λ„ L4 μŠ€μœ„μΉ˜ λ„μž… μ‹œ κ²€ν† ν•΄μ•Ό 될 μ΄μŠˆλ‚˜, μ„€μ •κ°’ κ²€ν† , QA μ„œλ²„μ— μ„  λ„μž…ν•΄ λ³Ό 생각을 ν•˜μ§€ λͺ»ν–ˆκ³ , κ·Έλ ‡κ²Œ μœ„ν—˜μ„ 감지도 λΆˆμ•ˆμ •ν•œ μƒνƒœμ—μ„œ L4λŠ” λ„μž…λλ‹€.
  • λ„μž…λ˜μžλ§ˆμž μ΄μŠˆκ°€ ν„°μ‘Œκ³ , 컀λ„₯μ…˜ μœ μ‹€μ΄ 두 μ’…λ₯˜κ°€ λ°œμƒν–ˆλ‹€.

 

λ””λΉ„ 컀λ„₯μ…˜ μœ μ‹€

ν•˜λ‚˜λŠ” λ””λΉ„ 컀λ„₯μ…˜μ΄ λŠμ–΄μ§€λ©΄μ„œ, λ‚˜μ•½ν•˜κ²Œ μ§œμ—¬ 있던 ODBC둜 μž‘μ„±λœ μ½”λ“œ 쀑 컀λ„₯μ…˜ μœ μ‹€ μ‹œ μž¬μ ‘μ† ν•˜λŠ” μ½”λ“œμ—μ„œ λ¬΄ν•œλ£¨ν”„κ°€ 돈 것이닀. μž₯μ• κ°€ λ‚˜κ³  λ‚˜μ„œμ•Ό 덀프λ₯Ό λ– μ„œ ν™•μΈν•˜κ³ , μ²˜λ¦¬ν–ˆλ‹€.

컀λ„₯μ…˜μ΄ μœ μ‹€ 된 μ΄μœ λŠ” 컀λ„₯μ…˜ν’€μ„ μ΄μš©ν•˜κ³  μžˆμ—ˆλŠ”λ° ν•΄λ‹Ή ν’€μ—μ„œ κΊΌλ‚΄ μ‚¬μš©ν•˜λŠ” 방식이 졜근 λ°˜ν™˜λλ˜ 컀λ„₯μ…˜ μœ„μ£Όλ‘œ 재 μ‚¬μš©λ˜λŠ” νκ΅¬μ‘°μ˜€κ³  κ·Έλ ‡λ‹€ λ³΄λ‹ˆ νŠΈλž˜ν”½μ΄ 지속 μœ μž…λ˜κ³  DB 쿼리λ₯Ό μˆ˜ν–‰ν–ˆμŒμ—λ„ 큐 끝 μͺ½μ— μžˆλŠ” μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 상황이 λ²Œμ–΄μ‘Œλ‹€.

이둜 인해 ν•΄λ‹Ή  컀λ„₯μ…˜μ΄ alive checkμ—κ±Έλ¦¬λ©΄μ„œ L4κ°€ μœ νš¨ν•˜μ§€ μ•Šμ€ 컀λ„₯μ…˜μœΌλ‘œ νŒλ³„ν•΄ 연결을 ν•΄μ œ ν•œ 것이닀.

이둜 인해 λ‹Ήμ‹œ ODBC λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ²”μš©μ΄ μ•„λ‹Œ μ‚¬λ‚΄μ—μ„œ μž‘μ„±λœ μ½”λ“œμ˜€λŠ”λ° ODBC의 μž¬μ ‘μ† μ‹œλ„ μ²˜λ¦¬μ— λŒ€ν•œ λ‘œμ§μ—μ„œ while 문의 μ’…λ£Œ 쑰건이 잘λͺ»λ˜μ–΄μ„œ λ‹€μ‹œ 연결에 μ„±κ³΅ν–ˆμŒμ—λ„ 루프λ₯Ό λΉ μ Έλ‚˜μ˜€μ§€ λͺ»ν•˜κ³  λ¬΄ν•œ 루프가 λ°œμƒν•΄, μ‹œμŠ€ν…œ μž₯μ• λ‘œ μ΄μ–΄μ§€κ²Œ λ˜μ—ˆλ‹€.

 

μ‚¬μš©μžμ™€μ˜ 컀λ„₯μ…˜ μœ μ‹€

L4 μŠ€μœ„μΉ˜ μžμ²΄μ—μ„œ 일정 μ‹œκ°„ 이상 μ§€λ‚œ 컀λ„₯μ…˜μ„ μžλ™μœΌλ‘œ μ œκ±°ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. 제거 원인은 배포된 ν΄λΌμ΄μ–ΈνŠΈλ‚˜ μ„œλ²„μ—μ„œ μ§€μ •λœ KeepAlive νŒ¨ν‚·μ„ μ£Όκ³ λ°›λŠ” 주기보닀 L4 μŠ€μœ„μΉ˜μ—μ„œμ˜ KeepAlive μœ νš¨μ„± νŒλ‹¨ μ£ΌκΈ°κ°€ 짧아 λ°œμƒν–ˆλ‹€.

 

발견이 쑰금 λŠ¦μ€ μ΄μŠˆμ˜€λŠ”λ°, μ‚¬μš©μžκ°€ μ•‘ν‹°λΈŒν•œ λ™μž‘μ„ ν•˜μ§€ μ•ŠμœΌλ©΄ Alive Check νŒ¨ν‚·λ§Œ μ£Όκ³ λ°›κ²Œ λ˜λŠ”λ°, 이 κ²½μš°μ—λ§Œ 컀λ„₯μ…˜μ΄ λŠμ–΄μ‘Œκ³ , 이둜 μΈν•œ μ‚¬μš©μž 뢈편으둜 μΈν•œ μ΄μŠˆκ°€ λ°œμƒν–ˆλ‹€. κ·Έλ‚˜λ§ˆ 닀행인 것은 μœ„ μ΄μŠˆμ™€λŠ” λ‹€λ₯΄κ²Œ ν•΄λ‹Ή μ΄μŠˆλŠ” μž₯μ• λ‘œ μ΄μ–΄μ§€μ§€λŠ” μ•Šμ•˜μœΌλ©°, μ„œλΉ„μŠ€λ₯Ό μ§€μ†μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” μœ μ €μ—κ²ŒλŠ” λ°œμƒν•˜μ§€ μ•ŠλŠ” μ΄μŠˆμ˜€λ‹€λŠ” 점이닀.

 

L4 μŠ€μœ„μΉ˜μ˜ KeepAlive μœ νš¨μ„± νŒλ‹¨μ— λŒ€ν•œ 섀정값을 늘림으둜써 μž„μ‹œμ μœΌλ‘œ ν•΄κ²°λμ§€λ§Œ, κ³Όμ—° 이 L4 λ„μž… μ΄μŠˆκ°€ μ†ŒμΌ“ μ„œλ²„μ˜ κ²½μš°μ—λ„ μ μ ˆν–ˆλŠ”κ°€μ— λŒ€ν•œ 생각을 λ–¨μΉ  수 μ—†μ—ˆλ‹€. λ¬Όλ‘  ν˜„μž¬λŠ” μ˜¨ν”„λΌλ―ΈμŠ€λ‘œ κ΅¬μΆ•λœ μ„œλΉ„μŠ€λ₯Ό 잘 ν•˜μ§€ μ•Šκ³ , 심지어 이것이 λ ˆκ±°μ‹œ ν™˜κ²½μ΄λΌκ³  λΆˆλ¦¬κΈ°λ„ ν•œλ‹€. μ™œλƒλ©΄ νŠΈλž˜ν”½ ν­λ°œμ— μœ μ—°ν•œ λŒ€μ‘μ΄ 잘 μ•ˆλ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

ν•˜μ§€λ§Œ 이 μ΄μŠˆμ™€ 같은 μΌ€μ΄μŠ€λŠ” L7 ν˜Ήμ€ ALB, NLB라고 해도 상황은 달라지지 μ•ŠλŠ”λ‹€. 그리고 μ€‘μš”ν•œ 것은, κΈ°μ‘΄ ν™˜κ²½μ—μ„œ λ³€ν™”κ°€ 일어날 λ•Œ μ–΄λ– ν•œ 영ν–₯이 μžˆμ„μ§€ μΆ©λΆ„νžˆ 검증이 λ˜μ§€ μ•Šμ•˜λ‹€λŠ” 점이닀. λŒ€λΆ€λΆ„ κΈ°λ³Έ μ˜΅μ…˜μœΌλ‘œ λ„μž…λ˜μ—ˆκ³ , 사내에 λ‹€λ₯Έ μ„œλΉ„μŠ€μ— λ„μž…λœ μž₯비라고 해도 μΆ©λΆ„ν•œ 검토와 검증을 거쳐야 λœλ‹€λŠ” 점, 그리고 μ†ŒμΌ“ μ„œλ²„μ˜ νŠΉμˆ˜μ„±μ„ μ΄ν•΄ν•˜λŠ” 것, μ›Ή μ„œλ²„κ°€ 자체적으둜 ν•΄μ£ΌλŠ” μž‘μ—… (Keep Alive), Stateless 기반의 ν™˜κ²½μ˜ μœ μ—°ν•¨ 등이 μ£ΌλŠ” 차이도 μ²΄ν¬ν–ˆμ–΄μ•Ό ν–ˆλ‹€.


DB 처리 속도 급감 이슈, 배포 μžλ™ν™” μ‹œμŠ€ν…œ 였λ₯˜ λ“±

더 λ§Žμ€ 기술 μ΄μŠˆμ™€ ν•΄κ²° 과정이 κΆκΈˆν•˜λ‹€λ©΄? πŸ‘‡πŸ»

F-Lab & Company | info@f-lab.kr
μ„œμšΈνŠΉλ³„μ‹œ 강남ꡬ κ°•λ‚¨λŒ€λ‘œ98κΈΈ 20, ν”ŒλΌνƒ€λ„ˆμŠ€ 5μΈ΅ | 0507-1315-4710
μˆ˜μ‹ κ±°λΆ€ Unsubscribe