๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/Next.js

[Next.js] Next.js์˜ ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ตฌ์กฐ - node.js v8

by DevIseo 2024. 12. 22.

Next.js์˜ ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ตฌ์กฐ

Next.js๋Š” Node.js ๊ธฐ๋ฐ˜์˜ V8 ์—”์ง„์—์„œ ์‹คํ–‰๋œ๋‹ค.
JavaScript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋‹ค. ๋”ฐ๋ผ์„œ V8 ์—ญ์‹œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Context ๋‹น ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹จ, ์„œ๋น„์Šค ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์›Œ์ปค์˜ ๊ฐœ์ˆ˜๋งŒํผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฆ์‹ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์€ V8 ํ”„๋กœ์„ธ์Šค์—์„œ ํ• ๋‹น๋œ ์ผ์ •๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ, ์ด๋ฅผ Resident set์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค.

https://deepu.tech/memory-management-in-v8/

์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํฌ๊ฒŒ ํž™ ๋ฉ”๋ชจ๋ฆฌ์™€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ด€๋ฆฌ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

1๏ธโƒฃ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ

์Šคํƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๊ณ  V8๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์Šคํƒ์„ ๊ฐ€์ง„๋‹ค. ์Šคํƒ์—๋Š” ์ •์ ๋ฐ์ดํ„ฐ(๋ฉ”์„œ๋“œ์™€ ํ•จ์ˆ˜ ํ”„๋ ˆ์ž„, ์›์‹œ ๊ฐ’, ๊ฐ์ฒด ํฌ์ธํ„ฐ)๊ฐ€ ์ €์žฅ๋œ๋‹ค.
V8์˜ ์Šคํƒ ์˜์—ญ์˜ ๊ด€๋ฆฌ๋Š” OS์— ์œ„์ž„ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. (์ž๋™์œผ๋กœ ๊ด€๋ฆฌ)

2๏ธโƒฃ ํž™ ๋ฉ”๋ชจ๋ฆฌ

  • ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ๊ฐ€์žฅ ํฐ ๋ธ”๋ก์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค. ํž™์—๋Š” ๊ฐ์ฒด์™€ ๋™์  ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ ๋œ๋‹ค.
  • ํž™์€ ์Šคํƒ๊ณผ ๋‹ฌ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์•„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํž™์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, **New space(Young generation)**๊ณผ Old space(Old generation) ์˜์—ญ์— ํ•œ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿ“ ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์š” ์˜์—ญ

New space(Young generation)

  • ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด ๊ฐ์ฒด๋“ค์€ ์งง์€ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ์ด ์˜์—ญ์€ ์Šค์บ๋ฒค์ ธ๋ผ๋Š” ์ด๋ฆ„์˜ ๋งˆ์ด๋„ˆ GC๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.
  • New space์˜ ํฌ๊ธฐ๋Š” --min_semi_space_size(์ดˆ๊ธฐ๊ฐ’)์™€ --max_semi_space_size(์ตœ๋Œ€๊ฐ’) V8์—”์ง„์˜ ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Old spcae(Old generation)

  • ์Šค์บ๋ฒค์ ธ(๋งˆ์ด๋„ˆ GC)๊ฐ€ ๋‘ ๋ฒˆ ์ˆœํšŒํ•  ๋™์•ˆ New space์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ด๋™ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
  • ๋ฉ”์ด์ € GC๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋‘ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
    1. Old ํฌ์ธํ„ฐ ์˜์—ญ
      ์Šค์บ๋ฒค์ ธ๋กœ๋ถ€ํ„ฐ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ด ๊ฐ์ฒด๋“ค์€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
    2. Old ๋ฐ์ดํ„ฐ ์˜์—ญ
    • ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง„ ๊ฐ์ฒด(๋‹ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐx)๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ๋ฌธ์ž์—ด, boxing๋œ ์ˆซ์ž, doubled unboxing๋œ ๋ฐฐ์—ด ๋“ฑ์ด ์ด ๊ณณ์— ์œ„์น˜ํ•œ๋‹ค.
  • Old space์˜ ํฌ๊ธฐ๋Š” --min_old_space_size(์ดˆ๊ธฐ๊ฐ’)์™€ --max_old_space_size(์ตœ๋Œ€๊ฐ’) V8์—”์ง„์˜ ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

V8์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ : Garbage Collection

์Šคํƒ์€ ์•Œ์•„์„œ ๊ด€๋ฆฌ๋˜์ง€๋งŒ ํž™ ๊ณต๊ฐ„์€ V8์—”์ง„์ด ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ˆ˜ํ–‰ํ•œ๋‹ค.
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์›Œ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ๋งŒ๋“ ๋‹ค.

โ“ ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋ž€?
๋”์ด์ƒ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์Šคํƒ์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ์†Œ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์ด๋ฉฐ, ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ(reachability)์ด ์—†๋Š” ๊ฐ์ฒด๋ผ๊ณ ๋„ํ•œ๋‹ค.
 

ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํž™์— ํ• ๋‹น๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•œ๋‹ค. ํž™์ด ์ž˜๋ชป ๊ด€๋ฆฌ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ž˜ ๊ด€๋ฆฌ๋ฅผ ํ•˜์—ฌ ์ด๋ฅผ ๋ฐฉ์ง€ ํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“Garbage Collection์˜ ์ฃผ์š” ๊ฐœ๋… - reachability(๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ)

๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด๋‹ค. ๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ด ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•„์š” ์—†๋Š” ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

  • ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด: ๋ฃจํŠธ(root, ์ „์—ญ ๊ฐ์ฒด ๋“ฑ)์—์„œ๋ถ€ํ„ฐ ์ฐธ์กฐ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค. ์ด๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด: ๋ฃจํŠธ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š์•„ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์œผ๋กœ, ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ ์ •๋ฆฌ๋œ๋‹ค.

https://gobae.tistory.com/116#V-%EC%--%--%EC%--%-C%EC%-D%--%--%ED%-E%--%--%EB%A-%--%EB%AA%A-%EB%A-%AC

  • Object3๋Š” ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.

https://gobae.tistory.com/116#V-%EC%--%--%EC%--%-C%EC%-D%--%--%ED%-E%--%--%EB%A-%--%EB%AA%A-%EB%A-%AC

-> Object 1, 3, 4๋Š” ์„œ๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋ฃจํŠธ์—์„œ ์ด ๊ฐ์ฒด๋“ค์— ๋„๋‹ฌํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ Object 1, 3, 4 ๋ชจ๋‘ ๊ฐ€๋น„์ง€์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.


๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ:

๋Œ“๊ธ€