Nodejs - gksrlfw/study GitHub Wiki

CLS (Continuation local storage)

μŠ€λ ˆλ“œλ₯Ό ν™œμš©ν•œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μ‹€ν–‰λ˜λŠ” μŠ€λ ˆλ“œμ˜ μ»¨ν…μŠ€νŠΈλ‘œ ν•œ μš”μ²­μ— λŒ€ν•œ 곡톡 μŠ€ν† λ¦¬μ§€(TLS)λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹±κΈ€μŠ€λ ˆλ“œμΈ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ‹€ν–‰ν™˜κ²½μΈ Node.js μ—μ„œλŠ” TLS 와 λΉ„μŠ·ν•œ κΈ°λŠ₯을 ν™œμš©ν•˜κΈ° μœ„ν•΄ CLS λΌλŠ” κ°œλ…μ„ λ§Œλ“€μ—ˆκ³ , 이λ₯Ό μ΄μš©ν•˜λ©΄ μš”μ²­μ— λŒ€ν•œ μ»¨ν…μŠ€νŠΈλ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CLS λŠ” Thread local storage 처럼 λ™μž‘ν•˜μ§€λ§Œ μŠ€λ ˆλ“œ λŒ€μ‹  λ…Έλ“œ μŠ€νƒ€μΌμ˜ 콜백 체인을 기반으둜 ν•˜λŠ” μŠ€ν† λ¦¬μ§€μž…λ‹ˆλ‹€. 일반적인 μ‚¬μš©λ°©λ²•μœΌλ‘œλŠ”, cls namespace λ₯Ό μƒμ„±ν•˜κ³  μš”μ²­μ— CLS Context λ₯Ό μƒμ„±ν•˜λ©΄ μ‹€ν–‰λ˜λŠ” 비동기 λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ 일련의 체인을 ν˜•μ„±ν•©λ‹ˆλ‹€. μžμ„Έν•œ 사항은 μ•„λž˜μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

cls-hooked: https://github.com/Jeff-Lewis/cls-hooked logging with cls hooked: https://blog.goncharov.page/nodejs-logging-made-right

CLS λŠ” typeORM, Sequelize 와 같은 ORM μ—μ„œμ˜ transaction propagation, logging request ID μœ μ§€ 등에 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

EventEmitter

cls-rtracer 와 같은 라이브러리λ₯Ό 보면 λ‚΄λΆ€μ—μ„œ 이벀트λ₯Ό bind ν•˜λŠ” 경우λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. request / response 에 μ •μ˜λ˜μ–΄μžˆλŠ” λͺ‡λͺ‡ μ΄λ²€νŠΈλŠ” λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈμ—μ„œ 싀행될 수 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€.

cls-rtracer: https://github.com/puzpuzpuz/cls-rtracer Proposal: https://github.com/nodejs/node/issues/33723

async_hooks

async_hooks λŠ” 비동기 λ¦¬μ†ŒμŠ€λ₯Ό 좔적할 수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. Node.js μ—μ„œ CLS λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것에 μ΄μš©λ©λ‹ˆλ‹€. 아직 Experimental 인 κΈ°λŠ₯μ΄μ§€λ§Œ, Google 의 Tracer λ‚΄λΆ€μ—μ„œ 이λ₯Ό μ΄μš©ν•˜μ—¬ CLS λ₯Ό κ΅¬ν˜„ν•œ 것을 보면 일반적인 κ²½μš°μ—λŠ” μ‚¬μš©ν•΄λ„ 무방할 λ“― ν•©λ‹ˆλ‹€.

nodejs async_hooks: https://nodejs.org/api/async_hooks.html

비동기 λ¦¬μ†ŒμŠ€

비동기 λ¦¬μ†ŒμŠ€λŠ” 비동기 μž‘μ—…μ˜ μΌλΆ€λ‘œ μƒμ„±λ˜λ©°, 비동기 μž‘μ—…μ„ μΆ”μ ν•˜λŠ”κ²ƒμ— μ‚¬μš©λ˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. 비동기 μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ 콜백이 μ‹€ν–‰λ˜λ©° μ™„λ²½νžˆ μ’…λ£Œλ˜λ©΄ κ°€λΉ„μ§€μ»¬λ ‰νŒ… λ©λ‹ˆλ‹€.

https://yceffort.kr/2021/08/async-resources-async-hooks

async_hooks μ„±λŠ₯ 이슈

https://news.ycombinator.com/item?id=19310213

Todo

async_hooks proposal https://docs.google.com/document/d/1g8OrG5lMIUhRn1zbkutgY83MiTSMx-0NHDs8Bf-nXxM/edit#heading=h.6kknmf22ixwc https://docs.google.com/document/d/1y4lF-iQhhuSOgzlPIBbfCT4IUpg-in3az5Q87C7aY3Q/edit#