
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
Stack vs heap, escape analysis, garbage collector, ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง, pprof, ๋ฉ๋ชจ๋ฆฌ ๋์
1Go์์ stack ํ ๋น๊ณผ heap ํ ๋น์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น?
Go์์ stack ํ ๋น๊ณผ heap ํ ๋น์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ต๋ณ
stack์ ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ ํ ๋น์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค(๋จ์ํ stack pointer ์ด๋). stack์ ๋ณ์๋ ํจ์๊ฐ ๋ฐํ๋ ๋ ์๋์ผ๋ก ํด์ ๋ฉ๋๋ค. heap์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ธฐ ์ํด garbage collector๊ฐ ํ์ํ๋ฉฐ, Go runtime์ด ๊ด์ฌํ๊ธฐ ๋๋ฌธ์ ํ ๋น์ด ๋ ๋๋ฆฝ๋๋ค. ํจ์๋ฅผ ๋์ด ์ด์๋จ๋ ๋ณ์๋ ์ปดํ์ผ ์์ ์ ํฌ๊ธฐ๋ฅผ ์ ์ ์๋ ๋ณ์๋ heap์ผ๋ก ๊ฐ๋๋ค.
2Go์์ escape analysis๋ ๋ฌด์์
๋๊น?
Go์์ escape analysis๋ ๋ฌด์์ ๋๊น?
๋ต๋ณ
escape analysis๋ ๋ณ์๊ฐ stack์ ๋จธ๋ฌด๋ฅผ ์ ์๋์ง ๋๋ heap์ ํ ๋น๋์ด์ผ ํ๋์ง๋ฅผ ํ๋จํ๊ธฐ ์ํด Go ์ปดํ์ผ๋ฌ๊ฐ ์ํํ๋ ์ ์ ๋ถ์์ ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๋ณ์๊ฐ ์์ฑ ํจ์ ์ธ๋ถ์์ ์ฐธ์กฐ๋๋ค๊ณ ๊ฐ์งํ๋ฉด(๋ฐํ๋ ํฌ์ธํฐ, ์ ์ญ ๋ณ์์ ์ ์ฅ ๋ฑ) ๋ณ์๋ 'escape'ํ์ฌ heap์ ํ ๋น๋ฉ๋๋ค. ์ด ๋ถ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
3์ปดํ์ผ ์ escape analysis ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํฉ๋๊น?
์ปดํ์ผ ์ escape analysis ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํฉ๋๊น?
๋ต๋ณ
-gcflags=-m ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด escape analysis ๊ฒฐ์ ์ ํ์ธํ ์ ์์ต๋๋ค. -m=2 ๋๋ -m=3์ ์ฌ์ฉํ๋ฉด ๋ณ์๊ฐ escapeํ๋ ์ด์ ์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด 'go build -gcflags=-m=2'๋ ๋ณ์๊ฐ heap์ผ๋ก ์ด๋๋์์์ ๋ํ๋ด๋ 'moved to heap: x'์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์ค์ํ ์ฝ๋์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ต์ ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์ง์ญ ๋ณ์๊ฐ heap์ผ๋ก escapeํ๋ ๊ฒฝ์ฐ๋ ์ธ์ ์ ๋๊น?
Go์์ garbage collector์ ์ฃผ์ ์ญํ ์ ๋ฌด์์ ๋๊น?
+21 ๋ฉด์ ์ง๋ฌธ
๊ธฐํ Go ๋ฉด์ ์ฃผ์
Go ๊ธฐ์ด
Go ๋ฐ์ดํฐ ๊ตฌ์กฐ
Go ์ธํฐํ์ด์ค
์๋ฌ ์ฒ๋ฆฌ
Goroutine ๊ธฐ์ด
Channels
Go Modules
HTTP ์๋ฒ
HTTP ํด๋ผ์ด์ธํธ
JSON ์ธ์ฝ๋ฉ
Database/SQL
context ํจํค์ง
Testing
๋์์ฑ ํจํด
๋๊ธฐํ ํ๋ฆฌ๋ฏธํฐ๋ธ
Go ์น ํ๋ ์์ํฌ
REST API ์ค๊ณ
gRPC
Reflection
์ฑ๋ฅ ์ต์ ํ
Generics
Go Design Patterns
Microservices
๋ณด์ ๋ฐ ์ธ์ฆ
Docker & Containerization
Kubernetes Basics
๊ณ ๊ธ Go
CLI ๊ฐ๋ฐ
๋ค์ ๋ฉด์ ์ ์ํด Go์ ๋ง์คํฐํ์ธ์
๋ชจ๋ ์ง๋ฌธ, flashcards, ๊ธฐ์ ํ ์คํธ, ์ฝ๋ ๋ฆฌ๋ทฐ ์ฐ์ต, ๋ฉด์ ์๋ฎฌ๋ ์ดํฐ์ ์ ๊ทผํ์ธ์.
๋ฌด๋ฃ๋ก ์์ํ๊ธฐ