Aspnetcore: EventSource? DiagnosticSource? ์–‘์ž ๋ชจ๋‘?

์— ๋งŒ๋“  2017๋…„ 12์›” 18์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/aspnetcore

EventSource ์ถ”์  (์˜ˆ : https://github.com/aspnet/Security/issues/1518)๊ณผ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ ์—์„œ

์ตœ๊ทผ์— ์ƒˆ๋กœ์šด Activity DiagnosticSource ์ถ”์ ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ž‘์„ฑ ํ–ˆ์œผ๋ฏ€๋กœ ๋™์ผํ•œ repos๊ฐ€ DiagnosticSource ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋กœ๋ฅผ ์ง€์›ํ•  ์žฅ๊ธฐ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ๊ฐ™์€ ์ผ์„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ Windows์—์„œ๋Š” EventSource ๋Š” ETW์— ์“ฐ๋Š” ๋ฐ˜๋ฉด Linux์—์„œ๋Š” in-proc์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋ชจ๋“  ์ง€์นจ์„ ๋งŽ์ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋น ๋ฅธ ์ƒ๊ฐ์ด์ง€๋งŒ ์™ธ๋ถ€ ์ ์œผ๋กœ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

EventSource

EventSource์˜ ๋ชจ๋“  ์‚ฌ์šฉ์€ LTTNG ๋˜๋Š” ETW์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์™ธ ๋กœ๊น… ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์‚ฌ์šฉ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. EventSource๋Š” ๋‚˜์ค‘์— ๋ณผ ์ถฉ์‹ค๋„๊ฐ€ ๋‚ฎ์€ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ†ต๊ณ„ ๋˜๋Š” ์š”์•ฝ์œผ๋กœ ์ปดํŒŒ์ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ํฐ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. EventSource์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์ด๋ฒคํŠธ๋ฅผ ํŒŒ์ผ (ETW)๋กœ ํŒŒ์ดํ”„ ํ•œ ๋‹ค์Œ ์‚ฌํ›„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ์‹ค๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. PerfView์™€ ๊ฐ™์€ EventSource์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ๋„๊ตฌ๋Š” ์ผ๋ถ€ ์ด๋ฒคํŠธ (JIT, GC)์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ž‘์„ฑํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ผ๋ฐ˜๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜๋ณด๊ธฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์š”์•ฝ / ํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ๋‹จ์ˆœํ•œ ์œ ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํŠน์ˆ˜ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋Š” PerfView์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ง„์ˆ ์€ ๋ถ„๋ช…ํ•ด ๋ณด์ผ ๊ฒƒ์ด์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๋Š” ์ด์œ ๋Š” ๊ณง ๋ถ„๋ช…ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. EventSource๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ํ•ด์„์ด ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋กํ•˜๋ ค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ž‘์„ฑ์ž๊ฐ€ ์ง€์ •ํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฒคํŠธ ์ด๋ฆ„๊ณผ ๊ด€๋ จ๋œ ๊ณ ์ • ๋œ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. EventSource๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "4096 ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ"๋˜๋Š” "5.6ms ๋‚ด์—๋กœ๋“œ ๋œ ํŒŒ์ผ"๊ณผ ๊ฐ™์€ ๋ง์„ ์ž์ฃผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์€ ์‚ฌ์‹ค ์ง„์ˆ ์€ "ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ 150ms ์†Œ์š”"์™€ ๊ฐ™์€ ์š”์•ฝ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜ ํŠน์ด ์น˜์ธ ๊ฒฝ์šฐ ๊ตฌ์ฒด์ ์œผ๋กœ ๋“œ๋ฆด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DiagnosticSource

DiagnosticSource์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ด 'ํ”Œ๋Ÿฌ๊ทธ์ธ'๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ์žˆ๋Š” ๋ฉ์–ด๋ฆฌ๋กœ ์ถ”์ถœ ํ•  ๋‹ค๋ฅธ ๋กœ๊น… ์‹œ์Šคํ…œ์— ์˜ํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. DiagnosticSource๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ ๋ฅผ ๋ฆฌ์Šค๋„ˆ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฒด ํ•ด์„์„ ์ถ”๊ฐ€ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ DiagnosticSource์—๋Š” ๊ธฐ๋ณธ ๋กœ๊น… ํ˜•์‹์ด ์—†์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ดํ•ด๋„ ์—†์Šต๋‹ˆ๋‹ค (์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ์œ ํ˜•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—). ์‚ฌ์šฉ์ž๊ฐ€๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DiagnosticSource ์ด๋ฒคํŠธ๋Š” ๋” ๋ฉ์–ด๋ฆฌ ์ ธ์„œ "์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค."๋˜๋Š” "๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค"์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์‚ฌ์‹ค์˜ ์ง„์ˆ ์ด์ง€๋งŒ ๋ฒ”์œ„๋Š” ํ›จ์”ฌ ๋” ํฝ๋‹ˆ๋‹ค. ๋„๊ตฌ๋Š” ํ’๋ถ€ํ•œ ์ปจํ…์ŠคํŠธ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ์˜๋ฏธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์บก์ฒ˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ Application Insights์™€ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์บก์ฒ˜ ํ•œ ์ •๋ณด ์ง‘ํ•ฉ์€ ASP.NET ํŒ€์—์„œ ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์—๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ๋ชจ๋“  ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜๊ณ  ๊ทธ๋“ค์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ฆฌ์ง€๋ฅผ ํ†ตํ•ด DiagnosticSource ๋ฐ์ดํ„ฐ๋ฅผ EventSource๋กœ ํŒŒ์ดํ”„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ถ€ ์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ์ง„๋‹จ ์ฝ”๋“œ์˜ ์–‘์„ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ์ง€ ์•Š์œผ๋ ค ๊ณ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22 ๋‚˜๋Š” ๋‹น์‹ ์ด DiagnosticSource๋ฅผ ๋ชจ๋“  EventSource์™€ ๋™์ผํ•œ ์žฅ์†Œ. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ™œ์šฉํ•˜๋Š” ์ „๋žต์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ ๋ ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ์ด ์˜์—ญ์€ ๋ช‡ ๋ฒˆ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Glimpse์™€ ํŒŒํŠธ๋„ˆ ๊ด€๊ณ„๋ฅผ ๋งบ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๊ฒฐ๊ตญ Application Insights์™€ ํŒŒํŠธ๋„ˆ ๊ด€๊ณ„๋ฅผ ๋งบ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์ง„๋‹จ ์†Œ์Šค ์œ„์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ๊ตฌ์ถ•๋˜์—ˆ์ง€๋งŒ ํ˜„์žฌ ๋‹ค๋ฅธ ๋„๊ตฌ์˜ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ณ„ํš

EventSource ๋˜๋Š” DiagnosticSource์— ๋Œ€ํ•œ ๋” ํฐ ์ „๋žต์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ํŒ€์ด ์šฐ๋ฆฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ๋ณด๋Š”์ง€ ๋Œ€๋‹ต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EventSource์˜ ๋Œ€์ฒด๋ฌผ๋กœ DiagnosticSource๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋‹ค๋ฅธ ์†Œ๋น„์ž์™€ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์ถ”๊ฐ€ ํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” ๊ณณ์— ์ง„๋‹จ ์†Œ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ด ์ง„๋‹จ์„ ๊ตฌ์ถ• ํ•  ์ˆ˜์žˆ๋Š” ํ™•์žฅ ์„ฑ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ๋จผ ๊ธธ์„๊ฐ‘๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŒ…์—๋Š” 3 ~ 5 ๊ฐœ์˜ ์ง„๋‹จ ์†Œ์Šค ํฌ์ธํŠธ๊ฐ€ ์žˆ๊ณ  MVC๋Š” 10 ๊ฐœ์— ๊ฐ€๊นŒ์›Œ ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ถ”์ ์ค‘์ธ ์žฅ์†Œ๊ฐ€ ๋” ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ง„์ •์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์†Œ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฅ ์ง€์› ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ž˜ โ€‹โ€‹์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ Microsoft ํŒ€์˜ ์„ฑ๋Šฅ ๋ถ„์„์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์„ฑ๋Šฅ ์นด์šดํ„ฐ ๋ถ€์žฌ๋กœ ์ธํ•œ ๊ณต๋ฐฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. .NET ํŒ€์€ EventCounters (EventSource ์œ„์— ๋นŒ๋“œ ๋จ)๋ฅผ ์ ์ ˆํ•œ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ASP.NET ํŒ€์ด EventSource์— ๋” ๋งŽ์€ ํˆฌ์ž๋ฅผํ•˜๋Š” ๊ฒƒ์ด ์ง€์—ฐ๋˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ๋น„ Windows์— ๋Œ€ํ•œ ์ „๋žต์ด ํ•œ๋™์•ˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” EventSource๋Š” * nix์—์„œ ์Šคํฌ๋ฆฝํŠธ ํ”Œ๋žซํผ์„ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ๊ฒฝ์šฐ ๋ฏธ๋ž˜์— ๋‹ค๋ฅธ ์ถ”๊ฐ€์ ์ธ ์ผ์„ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๋„๋กํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ข‹์€ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md#instrumenting -with-diagnosticsourcediagnosticlistener ์ด ๋ถ„์•ผ์˜ ์ „๋žต์„ ์ฑ…์ž„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์„ ์œ„ํ•ด

์Œ, ๋‘˜ ๋‹ค ๋˜๋Š” ๋‘˜ ๋‹ค ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฌด์—‡์„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์กฐ์–ธ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์†Œ๋น„์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹ ์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? (perf) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? (๋””๋ฒ„๊น… ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ) ๋„๊ตฌ ์ž‘์„ฑ์ž๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋„๊ตฌ๊ฐ€ ์‚ฌํ›„ ๋ถ„์„ ๋˜๋Š” ์•ฑ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‘˜์งธ, ๊ณ„์ธก ํ•  ์žฅ์†Œ์˜ ์ˆ˜์™€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค. ์†Œ๋น„์ž๋Š”์ด ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํ•ด์„ํ•ฉ๋‹ˆ๊นŒ? ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๋ชจ๋“  3 ๋Œ“๊ธ€

@rynowak- ์šฐ๋ฆฌ๊ฐ€ ๊ณต์œ  ํ•  ์ˆ˜์žˆ๋Š” ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋น ๋ฅธ ์ƒ๊ฐ์ด์ง€๋งŒ ์™ธ๋ถ€ ์ ์œผ๋กœ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

EventSource

EventSource์˜ ๋ชจ๋“  ์‚ฌ์šฉ์€ LTTNG ๋˜๋Š” ETW์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์™ธ ๋กœ๊น… ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์‚ฌ์šฉ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. EventSource๋Š” ๋‚˜์ค‘์— ๋ณผ ์ถฉ์‹ค๋„๊ฐ€ ๋‚ฎ์€ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ†ต๊ณ„ ๋˜๋Š” ์š”์•ฝ์œผ๋กœ ์ปดํŒŒ์ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ํฐ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. EventSource์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์ด๋ฒคํŠธ๋ฅผ ํŒŒ์ผ (ETW)๋กœ ํŒŒ์ดํ”„ ํ•œ ๋‹ค์Œ ์‚ฌํ›„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ์‹ค๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. PerfView์™€ ๊ฐ™์€ EventSource์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ๋„๊ตฌ๋Š” ์ผ๋ถ€ ์ด๋ฒคํŠธ (JIT, GC)์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ž‘์„ฑํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ผ๋ฐ˜๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜๋ณด๊ธฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์š”์•ฝ / ํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ๋‹จ์ˆœํ•œ ์œ ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํŠน์ˆ˜ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋Š” PerfView์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ง„์ˆ ์€ ๋ถ„๋ช…ํ•ด ๋ณด์ผ ๊ฒƒ์ด์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๋Š” ์ด์œ ๋Š” ๊ณง ๋ถ„๋ช…ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. EventSource๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ํ•ด์„์ด ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋กํ•˜๋ ค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ž‘์„ฑ์ž๊ฐ€ ์ง€์ •ํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฒคํŠธ ์ด๋ฆ„๊ณผ ๊ด€๋ จ๋œ ๊ณ ์ • ๋œ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. EventSource๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "4096 ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ"๋˜๋Š” "5.6ms ๋‚ด์—๋กœ๋“œ ๋œ ํŒŒ์ผ"๊ณผ ๊ฐ™์€ ๋ง์„ ์ž์ฃผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์€ ์‚ฌ์‹ค ์ง„์ˆ ์€ "ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ 150ms ์†Œ์š”"์™€ ๊ฐ™์€ ์š”์•ฝ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜ ํŠน์ด ์น˜์ธ ๊ฒฝ์šฐ ๊ตฌ์ฒด์ ์œผ๋กœ ๋“œ๋ฆด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DiagnosticSource

DiagnosticSource์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ด 'ํ”Œ๋Ÿฌ๊ทธ์ธ'๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ์žˆ๋Š” ๋ฉ์–ด๋ฆฌ๋กœ ์ถ”์ถœ ํ•  ๋‹ค๋ฅธ ๋กœ๊น… ์‹œ์Šคํ…œ์— ์˜ํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. DiagnosticSource๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ ๋ฅผ ๋ฆฌ์Šค๋„ˆ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฒด ํ•ด์„์„ ์ถ”๊ฐ€ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ DiagnosticSource์—๋Š” ๊ธฐ๋ณธ ๋กœ๊น… ํ˜•์‹์ด ์—†์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ดํ•ด๋„ ์—†์Šต๋‹ˆ๋‹ค (์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ์œ ํ˜•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—). ์‚ฌ์šฉ์ž๊ฐ€๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DiagnosticSource ์ด๋ฒคํŠธ๋Š” ๋” ๋ฉ์–ด๋ฆฌ ์ ธ์„œ "์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค."๋˜๋Š” "๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค"์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์‚ฌ์‹ค์˜ ์ง„์ˆ ์ด์ง€๋งŒ ๋ฒ”์œ„๋Š” ํ›จ์”ฌ ๋” ํฝ๋‹ˆ๋‹ค. ๋„๊ตฌ๋Š” ํ’๋ถ€ํ•œ ์ปจํ…์ŠคํŠธ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ์˜๋ฏธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์บก์ฒ˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ Application Insights์™€ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์บก์ฒ˜ ํ•œ ์ •๋ณด ์ง‘ํ•ฉ์€ ASP.NET ํŒ€์—์„œ ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์—๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ๋ชจ๋“  ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜๊ณ  ๊ทธ๋“ค์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ฆฌ์ง€๋ฅผ ํ†ตํ•ด DiagnosticSource ๋ฐ์ดํ„ฐ๋ฅผ EventSource๋กœ ํŒŒ์ดํ”„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ถ€ ์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ์ง„๋‹จ ์ฝ”๋“œ์˜ ์–‘์„ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ์ง€ ์•Š์œผ๋ ค ๊ณ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22 ๋‚˜๋Š” ๋‹น์‹ ์ด DiagnosticSource๋ฅผ ๋ชจ๋“  EventSource์™€ ๋™์ผํ•œ ์žฅ์†Œ. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ™œ์šฉํ•˜๋Š” ์ „๋žต์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ ๋ ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ์ด ์˜์—ญ์€ ๋ช‡ ๋ฒˆ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Glimpse์™€ ํŒŒํŠธ๋„ˆ ๊ด€๊ณ„๋ฅผ ๋งบ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๊ฒฐ๊ตญ Application Insights์™€ ํŒŒํŠธ๋„ˆ ๊ด€๊ณ„๋ฅผ ๋งบ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์ง„๋‹จ ์†Œ์Šค ์œ„์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ๊ตฌ์ถ•๋˜์—ˆ์ง€๋งŒ ํ˜„์žฌ ๋‹ค๋ฅธ ๋„๊ตฌ์˜ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ณ„ํš

EventSource ๋˜๋Š” DiagnosticSource์— ๋Œ€ํ•œ ๋” ํฐ ์ „๋žต์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ํŒ€์ด ์šฐ๋ฆฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ๋ณด๋Š”์ง€ ๋Œ€๋‹ต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EventSource์˜ ๋Œ€์ฒด๋ฌผ๋กœ DiagnosticSource๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋‹ค๋ฅธ ์†Œ๋น„์ž์™€ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์ถ”๊ฐ€ ํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” ๊ณณ์— ์ง„๋‹จ ์†Œ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ด ์ง„๋‹จ์„ ๊ตฌ์ถ• ํ•  ์ˆ˜์žˆ๋Š” ํ™•์žฅ ์„ฑ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ๋จผ ๊ธธ์„๊ฐ‘๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŒ…์—๋Š” 3 ~ 5 ๊ฐœ์˜ ์ง„๋‹จ ์†Œ์Šค ํฌ์ธํŠธ๊ฐ€ ์žˆ๊ณ  MVC๋Š” 10 ๊ฐœ์— ๊ฐ€๊นŒ์›Œ ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ถ”์ ์ค‘์ธ ์žฅ์†Œ๊ฐ€ ๋” ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ง„์ •์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์†Œ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฅ ์ง€์› ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ž˜ โ€‹โ€‹์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ Microsoft ํŒ€์˜ ์„ฑ๋Šฅ ๋ถ„์„์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์„ฑ๋Šฅ ์นด์šดํ„ฐ ๋ถ€์žฌ๋กœ ์ธํ•œ ๊ณต๋ฐฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. .NET ํŒ€์€ EventCounters (EventSource ์œ„์— ๋นŒ๋“œ ๋จ)๋ฅผ ์ ์ ˆํ•œ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ASP.NET ํŒ€์ด EventSource์— ๋” ๋งŽ์€ ํˆฌ์ž๋ฅผํ•˜๋Š” ๊ฒƒ์ด ์ง€์—ฐ๋˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ๋น„ Windows์— ๋Œ€ํ•œ ์ „๋žต์ด ํ•œ๋™์•ˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” EventSource๋Š” * nix์—์„œ ์Šคํฌ๋ฆฝํŠธ ํ”Œ๋žซํผ์„ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ๊ฒฝ์šฐ ๋ฏธ๋ž˜์— ๋‹ค๋ฅธ ์ถ”๊ฐ€์ ์ธ ์ผ์„ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๋„๋กํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ข‹์€ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md#instrumenting -with-diagnosticsourcediagnosticlistener ์ด ๋ถ„์•ผ์˜ ์ „๋žต์„ ์ฑ…์ž„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์„ ์œ„ํ•ด

์Œ, ๋‘˜ ๋‹ค ๋˜๋Š” ๋‘˜ ๋‹ค ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฌด์—‡์„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์กฐ์–ธ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์†Œ๋น„์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹ ์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? (perf) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? (๋””๋ฒ„๊น… ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ) ๋„๊ตฌ ์ž‘์„ฑ์ž๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋„๊ตฌ๊ฐ€ ์‚ฌํ›„ ๋ถ„์„ ๋˜๋Š” ์•ฑ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‘˜์งธ, ๊ณ„์ธก ํ•  ์žฅ์†Œ์˜ ์ˆ˜์™€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค. ์†Œ๋น„์ž๋Š”์ด ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํ•ด์„ํ•ฉ๋‹ˆ๊นŒ? ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์žฅ๊ธฐ๊ฐ„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ 'ํ† ๋ก '์ด์Šˆ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋งˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํŽธ์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ ๋œ ์ •๋ณด๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๊ธฐ๋กํ•ด ์ฃผ์‹œ๋ฉด ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰