์ ํ๋ฆฌ์ผ์ด์
์ Puppeteer ๊ธฐ๋ฐ ์คํฌ๋ํผ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์ธํด ๊ฐํ์ ์ธ Docker ์ค๋ฅ๋ฅผ ๊ฒช์์ต๋๋ค. ๋์ญํญ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํฌ๋ํผ๋ ์ฐ๊ฒฐํ ์ ์๋ ๋ผ์ฐํฐ ๋๋ฌธ์ ์์ฃผ ์คํจํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค. ์ด๋ฌํ ์คํจ๋ก ์ธํด Azure VM์์ ๊ณผ๋ํ RAM์ ์๋นํ๋ ๊ณ ์ ํฌ๋ก๋ฏธ์ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ํ์ต๋๋ค. ์คํฌ๋ํผ ์ฝ๋ ๋ด์์ ์ ์ ํ ๋ธ๋ผ์ฐ์ ์ข
๋ฃ๊ฐ ๋ถ์กฑํ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ทผ๋ณธ ์์ธ์ด์์ต๋๋ค. ํนํ, `browser.close()` ํจ์๋ ์คํฌ๋ํ ์คํจ ํ ์คํ์ด ๋ณด์ฅ๋์ง ์์์ต๋๋ค. ์ด๋ก ์ธํด ํฌ๋ก๋ฏธ์ ์ธ์คํด์ค๊ฐ ๋์ ๋์ด VM์ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ์ต๋๋ค. ํด๊ฒฐ์ฑ
์ `browser.close()`๊ฐ ํญ์ ์คํ๋๋๋ก `try/catch/finally` ๋ธ๋ก์ ์ฌ์ฉํ๊ณ ํธ์ถ ํจ์์ null ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด์์ต๋๋ค. ์์ ์ฌํญ์ ๊ตฌํํ ๊ฒฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฌ๊ฒ ์ค๊ณ ๊ณ ์ ํ๋ก์ธ์ค๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค. ํต์ฌ์ `try/catch/finally`๋ฅผ ์ฌ์ฉํ์ฌ Puppeteer ๋ธ๋ผ์ฐ์ ์ ๋ฆฌ๋ฅผ ํญ์ ๋ณด์ฅํ๋ ๊ฒ์
๋๋ค. ๊ฐ๋ฐ์๋ ๋ณ๋ ฌ ์คํฌ๋ํ์ ํผํ๊ณ ํฌ๋ก๋ฏธ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์๊ฐ ์ด๊ณผ ๋ฐ null ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๋ฉด ์ฝ๋ ์์ ์ฑ์ด ๋์ฑ ํฅ์๋ฉ๋๋ค. ์ ๊ณต๋ ์ฝ๋์๋ ๊ณ ์ ํฌ๋ก๋ฏธ์ ํ๋ก์ธ์ค๋ฅผ ์ฆ์ ์ง์ฐ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ๋ฐฉ๋ฒ๋ ํฌํจ๋์ด ์์ต๋๋ค.
dev.to
# ๐ How a Missing `finally` Block Was Eating 300MB of RAM Per Failed Scrape
Create attached notes ...
