RSS DEV ์ปค๋ฎค๋‹ˆํ‹ฐ

# ๐Ÿ› ๋ˆ„๋ฝ๋œ `finally` ๋ธ”๋ก์ด ์‹คํŒจํ•œ ์Šคํฌ๋ ˆ์ดํ•‘๋‹น 300MB์˜ RAM์„ ์žก์•„๋จน๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Puppeteer ๊ธฐ๋ฐ˜ ์Šคํฌ๋ž˜ํผ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋กœ ์ธํ•ด ๊ฐ„ํ—์ ์ธ Docker ์˜ค๋ฅ˜๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์—ญํญ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์Šคํฌ๋ž˜ํผ๋Š” ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ผ์šฐํ„ฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์‹คํŒจํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํŒจ๋กœ ์ธํ•ด Azure VM์—์„œ ๊ณผ๋„ํ•œ RAM์„ ์†Œ๋น„ํ•˜๋Š” ๊ณ ์•„ ํฌ๋กœ๋ฏธ์›€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜ํผ ์ฝ”๋“œ ๋‚ด์—์„œ ์ ์ ˆํ•œ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒƒ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ๊ทผ๋ณธ ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, `browser.close()` ํ•จ์ˆ˜๋Š” ์Šคํฌ๋ž˜ํ•‘ ์‹คํŒจ ํ›„ ์‹คํ–‰์ด ๋ณด์žฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํฌ๋กœ๋ฏธ์›€ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ˆ„์ ๋˜์–ด VM์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ `browser.close()`๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก `try/catch/finally` ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๊ณ  ํ˜ธ์ถœ ํ•จ์ˆ˜์— null ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•œ ๊ฒฐ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„๊ณ  ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ `try/catch/finally`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Puppeteer ๋ธŒ๋ผ์šฐ์ € ์ •๋ฆฌ๋ฅผ ํ•ญ์ƒ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ณ‘๋ ฌ ์Šคํฌ๋ž˜ํ•‘์„ ํ”ผํ•˜๊ณ  ํฌ๋กœ๋ฏธ์›€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ null ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฝ”๋“œ ์•ˆ์ •์„ฑ์ด ๋”์šฑ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ณต๋œ ์ฝ”๋“œ์—๋Š” ๊ณ ์•„ ํฌ๋กœ๋ฏธ์›€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฆ‰์‹œ ์ง€์šฐ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
favicon
dev.to
# ๐Ÿ› How a Missing `finally` Block Was Eating 300MB of RAM Per Failed Scrape
Create attached notes ...