Go

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

Stack vs heap, escape analysis, garbage collector, ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง, pprof, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

24 ๋ฉด์ ‘ ์งˆ๋ฌธยท
Senior
1

Go์—์„œ stack ํ• ๋‹น๊ณผ heap ํ• ๋‹น์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€

stack์€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ ํ• ๋‹น์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค(๋‹จ์ˆœํ•œ stack pointer ์ด๋™). stack์˜ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค. heap์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด garbage collector๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, Go runtime์ด ๊ด€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹น์ด ๋” ๋А๋ฆฝ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ๋„˜์–ด ์‚ด์•„๋‚จ๋Š” ๋ณ€์ˆ˜๋‚˜ ์ปดํŒŒ์ผ ์‹œ์ ์— ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜๋Š” heap์œผ๋กœ ๊ฐ‘๋‹ˆ๋‹ค.

2

Go์—์„œ escape analysis๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€

escape analysis๋Š” ๋ณ€์ˆ˜๊ฐ€ stack์— ๋จธ๋ฌด๋ฅผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋˜๋Š” heap์— ํ• ๋‹น๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด Go ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •์  ๋ถ„์„์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐ๋œ๋‹ค๊ณ  ๊ฐ์ง€ํ•˜๋ฉด(๋ฐ˜ํ™˜๋œ ํฌ์ธํ„ฐ, ์ „์—ญ ๋ณ€์ˆ˜์— ์ €์žฅ ๋“ฑ) ๋ณ€์ˆ˜๋Š” 'escape'ํ•˜์—ฌ heap์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด ๋ถ„์„์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ž๋™์œผ๋กœ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

3

์ปดํŒŒ์ผ ์‹œ escape analysis ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?

๋‹ต๋ณ€

-gcflags=-m ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด escape analysis ๊ฒฐ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -m=2 ๋˜๋Š” -m=3์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜๊ฐ€ escapeํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'go build -gcflags=-m=2'๋Š” ๋ณ€์ˆ˜๊ฐ€ heap์œผ๋กœ ์ด๋™๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” 'moved to heap: x'์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์ค‘์š”ํ•œ ์ฝ”๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

4

์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ heap์œผ๋กœ escapeํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ž…๋‹ˆ๊นŒ?

5

Go์—์„œ garbage collector์˜ ์ฃผ์š” ์—ญํ• ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

+21 ๋ฉด์ ‘ ์งˆ๋ฌธ

๊ธฐํƒ€ Go ๋ฉด์ ‘ ์ฃผ์ œ

Go ๊ธฐ์ดˆ

Junior
25๊ฐœ ์งˆ๋ฌธ

Go ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

Junior
20๊ฐœ ์งˆ๋ฌธ

Go ์ธํ„ฐํŽ˜์ด์Šค

Junior
18๊ฐœ ์งˆ๋ฌธ

์—๋Ÿฌ ์ฒ˜๋ฆฌ

Junior
20๊ฐœ ์งˆ๋ฌธ

Goroutine ๊ธฐ์ดˆ

Junior
20๊ฐœ ์งˆ๋ฌธ

Channels

Junior
22๊ฐœ ์งˆ๋ฌธ

Go Modules

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

HTTP ์„œ๋ฒ„

Mid-Level
24๊ฐœ ์งˆ๋ฌธ

HTTP ํด๋ผ์ด์–ธํŠธ

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

JSON ์ธ์ฝ”๋”ฉ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Database/SQL

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

context ํŒจํ‚ค์ง€

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Testing

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

๋™์‹œ์„ฑ ํŒจํ„ด

Mid-Level
24๊ฐœ ์งˆ๋ฌธ

๋™๊ธฐํ™” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

Go ์›น ํ”„๋ ˆ์ž„์›Œํฌ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

REST API ์„ค๊ณ„

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

gRPC

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

Reflection

Senior
20๊ฐœ ์งˆ๋ฌธ

์„ฑ๋Šฅ ์ตœ์ ํ™”

Senior
22๊ฐœ ์งˆ๋ฌธ

Generics

Senior
20๊ฐœ ์งˆ๋ฌธ

Go Design Patterns

Senior
24๊ฐœ ์งˆ๋ฌธ

Microservices

Senior
24๊ฐœ ์งˆ๋ฌธ

๋ณด์•ˆ ๋ฐ ์ธ์ฆ

Senior
24๊ฐœ ์งˆ๋ฌธ

Docker & Containerization

Senior
20๊ฐœ ์งˆ๋ฌธ

Kubernetes Basics

Senior
22๊ฐœ ์งˆ๋ฌธ

๊ณ ๊ธ‰ Go

Senior
20๊ฐœ ์งˆ๋ฌธ

CLI ๊ฐœ๋ฐœ

Senior
20๊ฐœ ์งˆ๋ฌธ

๋‹ค์Œ ๋ฉด์ ‘์„ ์œ„ํ•ด Go์„ ๋งˆ์Šคํ„ฐํ•˜์„ธ์š”

๋ชจ๋“  ์งˆ๋ฌธ, flashcards, ๊ธฐ์ˆ  ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์—ฐ์Šต, ๋ฉด์ ‘ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์„ธ์š”.

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ