Chromium ๋ณด์•ˆ ๋ฌธ์ œ์˜ 70%๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Chromium ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž ๋ถ„์„ 912๋…„ ์ดํ›„ Chrome์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์—์„œ 2015๊ฐœ์˜ ๊ณ ์œ„ํ—˜ ๋ฐ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ํ™•์ธ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ 70%๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ถˆ์•ˆ์ •(C/C++ ์ฝ”๋“œ์—์„œ ํฌ์ธํ„ฐ ์ž‘์—… ์‹œ ์˜ค๋ฅ˜)์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๊ฒฐ๋ก ์ง€์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ค‘ ์ ˆ๋ฐ˜(36.1%)์€ ๋ฒ„ํผ์™€ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ ํ›„(ํ•ด์ œ ํ›„ ์‚ฌ์šฉ) ๋ฒ„ํผ์— ์•ก์„ธ์Šคํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Chromium ๋ณด์•ˆ ๋ฌธ์ œ์˜ 70%๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Chromium์„ ๋””์ž์ธํ•  ๋•Œ ์ฒ˜์Œ์—๋Š” ๋ˆ„์›Œ, ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํฌ๊ฒŒ ๊ฐ•์กฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ทธ ๋Šฅ๋ ฅ์˜ ํ•œ๊ณ„์— ๋„๋‹ฌํ–ˆ์œผ๋ฉฐ ์ž์› ์†Œ๋น„์˜ ๊ด€์ ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”์šฑ ์„ธ๋ถ„ํ™”ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Google์€ '๋‘˜์˜ ๋ฒ•์น™"์— ๋”ฐ๋ฅด๋ฉด ์ถ”๊ฐ€๋œ ์ฝ”๋“œ๋Š” ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•˜๊ธฐ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(C/C++) ์‚ฌ์šฉํ•˜๊ธฐ, ๋†’์€ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋“ฑ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด ์ค‘ ๋‘ ๊ฐ€์ง€ ์ดํ•˜๋ฅผ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ์œผ๋กœ ์ถ•์†Œ(๊ฒฉ๋ฆฌ)๋˜๊ฑฐ๋‚˜ ๋ณด์•ˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณด์•ˆ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ ์•ˆ์ „ํ•œ ์ž‘๋™์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•˜๋“œ์›จ์–ด ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์˜ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. MTE (Memory Tagged Extension) ๋ฐ ์•ˆ์ „ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ž‘์—…์„ ๋ณด์žฅํ•˜๋Š” ์–ธ์–ด(Java, Kotlin, JavaScript, Rust, Swift)๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…์€ ๋‘ ๊ฐ€์ง€ ์˜์—ญ์— ์ง‘์ค‘๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

  • ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ(์ถ”๊ฐ€ ๊ฒฝ๊ณ„ ๊ฒ€์‚ฌ ๋ฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘)์„ ๋ฐฐ์ œํ•˜์ง€ ์•Š๋Š” C++ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ์›์‹œ ํฌ์ธํ„ฐ ๋Œ€์‹ ์— ๋‹ค์Œ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์ Ptr์ด๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ๋ฐ ์•ˆ์ •์„ฑ์— ๋ˆˆ์— ๋„๋Š” ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ์•…์šฉ ๊ฐ€๋Šฅํ•œ use-after-free ์˜ค๋ฅ˜๋ฅผ ๋ณด์•ˆ ์œ„ํ˜‘์„ ์ œ๊ธฐํ•˜์ง€ ์•Š๋Š” ์ถฉ๋Œ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์‹คํ–‰ ์ค‘ ์ด๋Ÿฌํ•œ ๊ฒ€์‚ฌ์— ๋‚ด์žฌ๋œ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ์–ธ์–ด์˜ ์ฝ”๋“œ์™€ ์ฝ”๋“œ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์ถ”๊ฐ€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. C++).

๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Rust๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด์ง€๋งŒ ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Chromium ๋ณด์•ˆ ๋ฌธ์ œ์˜ 70%๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€