์๊ฐ
๋๋ ์ด ๋ณด๊ณ ์๋ฅผ ๋ชจ์คํฌ๋ฐ์์ ์ด๋ฆฐ GopherCon Russia 2019 ์ปจํผ๋ฐ์ค์์ ์์ด๋ก, ๋์ฆ๋ ๋
ธ๋ธ๊ณ ๋ก๋์์ ์ด๋ฆฐ ๋ชจ์์์ ๋ฌ์์์ด๋ก ์ ๊ณตํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋นํธ๋งต ์ธ๋ฑ์ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. B-ํธ๋ฆฌ๋ณด๋ค ๋ ์ผ๋ฐ์ ์ด์ง๋ง ๋ ํฅ๋ฏธ๋กญ์ง๋ ์์ต๋๋ค. ๋๋๋
๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง, ์ธ์ ๋ ์ข๊ณ , ์ธ์ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ณด๋ค ๋์ ์ง, ์ด๋ค ๊ฒฝ์ฐ์๋ ๋นํธ๋งต ์ธ๋ฑ์ค๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ค ์ธ๊ธฐ ์๋ DBMS์ ์ด๋ฏธ ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. Go์์ ์ง์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ "๋์ ํธ"๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๊ธฐ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๋ฆฌ๋ง์ ์ด๊ณ ์ ์ ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ๊ฒ์ ๋๋ค.
๋ด ์ํ์ด ์ฌ๋ฌ๋ถ์๊ฒ ์ ์ฉํ๊ณ ํฅ๋ฏธ๋ก์ธ ์ ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค. ๊ฐ๋ค!
์๊ฐ
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ! ์ ๋ XNUMX์์ธ๋ฐ ์ฐ๋ฆฌ ๋ชจ๋ ๋๋ฌด ํผ๊ณคํด์. ์ง๋ฃจํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ์ด๋ก ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ์ ์ข์ ์๊ฐ์ด์ฃ ? ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ์ฌ๊ธฐ์ ๊ธฐ์ ๋ช ์ค์ ์์ค ์ฝ๋๊ฐ ์์ ๊ฒ์ ๋๋ค. ๐
๋๋ด์ ์ ์ณ๋๊ณ , ๋ณด๊ณ ์๋ ์ ๋ณด๋ก ๊ฐ๋ ์ฐจ ์์ด์ ์๊ฐ์ด ๋ณ๋ก ์์ต๋๋ค. ๊ทธ๋ผ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
์ค๋์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
- ์ธ๋ฑ์ค๋ ๋ฌด์์ ๋๊น?
- ๋นํธ๋งต ์ธ๋ฑ์ค๋ ๋ฌด์์ ๋๊น?
- ์ฌ์ฉ๋๋ ๊ณณ๊ณผ ์ฌ์ฉ๋์ง ์๋ ๊ณณ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์
- Go์์์ ๊ฐ๋จํ ๊ตฌํ๊ณผ ์ปดํ์ผ๋ฌ์์ ์ฝ๊ฐ์ ์ด๋ ค์;
- Go ์ด์ ๋ธ๋ฌ์์๋ ์ฝ๊ฐ ๋ ๋จ์ํ์ง๋ง ํจ์ฌ ๋ ์์ฐ์ ์ธ ๊ตฌํ์ ๋๋ค.
- ๋นํธ๋งต ์ธ๋ฑ์ค์ "๋ฌธ์ ";
- ๊ธฐ์กด ๊ตฌํ.
๊ทธ๋ ๋ค๋ฉด ์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ?
์ธ๋ฑ์ค๋ ์ฃผ์ ๋ฐ์ดํฐ ์ธ์ ๋น์ฌ๊ฐ ์ ์ง ๊ด๋ฆฌํ๊ณ ์
๋ฐ์ดํธํ๋ ๋ณ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์
๋๋ค. ๊ฒ์ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๊ฒ์์ ์ํํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๊ฒ์ํด์ผ ํ๋ฉฐ(์ ์ฒด ์ค์บ์ด๋ผ๋ ํ๋ก์ธ์ค) ์ด ํ๋ก์ธ์ค๋ ์ ํ ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ํ ๋ณต์ก์ฑ์ด ๋๋ฌด ๋๋ฆฝ๋๋ค. ์ด์์ ์ผ๋ก๋ ๋ก๊ทธ ๋๋ ์์ ๊ฐ์ ์ป์ต๋๋ค.
์ด๋ ๋ฏธ๋ฌํจ๊ณผ ์ฅ๋จ์ ์ผ๋ก ๊ฐ๋ ์ฐฌ ๋งค์ฐ ๋ณต์กํ ์ฃผ์ ์ ๋๋ค. ํ์ง๋ง ์์ญ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ฐ ๋ฐ ์ฐ๊ตฌ๋ฅผ ์ดํด๋ณธ ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ์์ฑ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ๊ทผ ๋ฐฉ์์ด ๋ช ๊ฐ์ง ๋ฐ์ ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ๊ฒ์ ๊ณต๊ฐ์ ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๊ฒ์ ๊ณต๊ฐ์ ๊ณ์ธต์ ์ผ๋ก ์ค์ด๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ์ ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ท์ฅ์ ์ฌ๋ฌ ์ฃผ์ ๋ก ๋๋์ด์ง ์์ ์๋ฃ ์์๊ฐ ๋ค์ด ์๋ ํฐ ์๋ฃ ์์๊ฐ ์์ต๋๋ค. ์๋ฃ๊ฐ ํ์ํ์ ๋ถ๋ค์ ์๋ง๋ '์ฟ ํค'๋ผ๊ณ ์ ํ ์์๋ณด๋ค๋ '์ฌ๋ฃ'๋ผ๊ณ ์ ํ ์์์์ ์ฐพ์ผ์๊ฒ ์ฃ ?
๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ์ํ๋ ์์ ๋๋ ์์ ๊ทธ๋ฃน์ ์ฆ์ ์ ํํ๋ ๊ฒ์
๋๋ค. ํด์ ๋งต์ด๋ ์ญ๋ฐฉํฅ ์ธ๋ฑ์ค์์ ์ด๋ฅผ ์ํํฉ๋๋ค. ํด์ ๋งต์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด์ ์์ ๋งค์ฐ ์ ์ฌํ์ง๋ง ์์ ์์ ๋์ ์ท์ฅ์ ์ต์ข
ํญ๋ชฉ์ด ๋ด๊ธด ์์ ์์๊ฐ ๋ง์ด ์์ต๋๋ค.
์ธ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ๊ฒ์์ ํ์์ฑ์ ์์ ๋ ๊ฒ์
๋๋ค. Bloom ํํฐ๋ Cuckoo ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ํํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ต๋ณ์ ์ฆ์ ๋ต๋ณ์ ์ ๊ณตํ๋ฏ๋ก ๊ฒ์ํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง ์ ๊ทผ ๋ฐฉ์์ ์ต์ ํ๋์จ์ด๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋นํธ๋งต ์ธ๋ฑ์ค์์ ์ํํ๋ ์์
์
๋๋ค. ์, ์ด๋ฅผ ์ฌ์ฉํ ๋ ๋๋๋ก ์ ์ฒด ์์ธ์ ์ดํด๋ด์ผ ํ์ง๋ง ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ํํฉ๋๋ค.
์์ ๋งํ๋ฏ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ผ๋ ์ฃผ์ ๋ ๋ฐฉ๋ํ๊ณ ํํ์ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค. ์ด๋ ๋๋๋ก ์ฌ๋ฌ ์ ๊ทผ ๋ฐฉ์์ ๋์์ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฒ์ ์๋๋ฅผ ๋์ฑ ๋์ฌ์ผ ํ๊ฑฐ๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ ์ ํ์ ํฌ๊ดํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ค๋์ ๋นํธ๋งต ์ธ๋ฑ์ค ์ค ๊ฐ์ฅ ์ ์๋ ค์ง์ง ์์ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
์ด ์ฃผ์ ์ ๊ดํด ๋๋ ๋๊ตฌ์๊ฒ ๋งํด์ผ ํฉ๋๊น?
์ ๋ Badoo์์ ํ์ฅ์ผ๋ก ์ผํ๊ณ ์์ต๋๋ค(์๋ง๋ ์ฌ๋ฌ๋ถ์ ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ ํ์ธ Bumble์ ๋ ์ต์ํ์ค ๊ฒ์
๋๋ค). ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ ์ธ๊ณ์ ์ผ๋ก 400์ต ๋ช
์ด์์ ์ฌ์ฉ์๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ๊ทธ๋ค์๊ฒ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ๋ ๋ง์ ๊ธฐ๋ฅ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ํฌํจํ ๋ง์ถคํ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ํํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋นํธ๋งต ์ธ๋ฑ์ค๋ ๋ฌด์์ผ๊น์?
๋นํธ๋งต ์ธ๋ฑ์ค๋ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ๋นํธ๋งต ๋๋ ๋นํธ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํฉ๋๋ค. ์กฐ๊ฐ๋์์ ๋ณผ ๋ ์ด ์ธ๋ฑ์ค๋ ๋ชจ๋ ์ํฐํฐ(์: ์ฌ๋)์ ํด๋น ์์ฑ ๋๋ ๋งค๊ฐ๋ณ์(๋์ด, ๋ ์๊น ๋ฑ)๋ฅผ ๋ํ๋ด๋ ํ๋ ์ด์์ ๋นํธ๋งต๊ณผ ๋นํธ ์ฐ์ฐ(AND, OR, NOT์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ)์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ) ๊ฒ์์ด์ ๋ตํฉ๋๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค๋ ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์ฌ๋ฌ ์ด์ ๊ฑธ์ณ ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํ๋ ๊ฒ์์ด ์๋ ๊ฒฝ์ฐ("๋ ์๊น" ๋๋ "๊ฒฐํผ ์ํ"์ "๋์ฌ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ" ๋ฑ์ ๋น๊ต)์ ๊ฐ์ฅ ์ ํฉํ๊ณ ์ฑ๋ฅ์ด ๋งค์ฐ ๋๋ค๊ณ ๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ค์ ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ด์๋ ์ ์๋ํ๋ค๋ ๊ฒ์ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค์ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ด์ง ์์ฑ์ ๊ฐ์ง ๋ชจ์คํฌ๋ฐ ๋ ์คํ ๋ ๋ชฉ๋ก์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ์งํ์ฒ ๊ทผ์ฒ;
- ์ ์ฉ ์ฃผ์ฐจ์ฅ์ด ์์ต๋๋ค.
- ๋ฒ ๋๋ค(ํ ๋ผ์ค๊ฐ ์์)๊ฐ ์์ต๋๋ค.
- ํ ์ด๋ธ์ ์์ฝํ ์ ์์ต๋๋ค(์์ฝ ๊ฐ๋ฅ).
- ์ฑ์์ฃผ์์์๊ฒ ์ ํฉ(์์ ์ฑ์์ฃผ์์ ์นํ์ )
- ๋น์ธ๋ค(๋น์ธ๋ค).
๊ฐ ๋ ์คํ ๋์ 0๋ถํฐ ์์ํ๋ ์ํ์ค ๋ฒํธ๋ฅผ ๋ถ์ฌํ๊ณ 6๊ฐ์ ๋นํธ๋งต(๊ฐ ํน์ฑ์ ๋ํด ํ๋์ฉ)์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ ์คํ ๋์ ์ด ์์ฑ์ด ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ด๋ฌํ ๋นํธ๋งต์ ์ฑ์๋๋ค. ๋ ์คํ ๋ 4์ ๋ฒ ๋๋ค๊ฐ ์์ผ๋ฉด "๋ฒ ๋๋ค ์์" ๋นํธ๋งต์ 4๋ฒ ๋นํธ๊ฐ 1๋ก ์ค์ ๋ฉ๋๋ค(๋ฒ ๋๋ค๊ฐ ์์ผ๋ฉด 0์ผ๋ก ์ค์ ๋ฉ๋๋ค).
์ด์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ฐ๋จํ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ฒ ๋์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ์ ์๋ตํ ์ ์์ต๋๋ค.
- โ์ฑ์์ฃผ์์ ์นํ์ ์ธ ๋ ์คํ ๋์ ๋ณด์ฌ์ฃผ์ธ์โ;
- โํ ์ด๋ธ์ ์์ฝํ ์ ์๋ ๋ฒ ๋๋ค๊ฐ ์๊ณ ์ ๋ ดํ ๋ ์คํ ๋์ ๋ณด์ฌ์ฃผ์ธ์.โ
์ด๋ป๊ฒ? ํ๋ฒ ์ดํด๋ณด์. ์ฒซ ๋ฒ์งธ ์์ฒญ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํด์ผ ํ ์ผ์ "์ฑ์์ฃผ์์ ์นํ์ ์ธ" ๋นํธ๋งต์ ๊ฐ์ ธ์์ ๋นํธ๊ฐ ๋
ธ์ถ๋ ๋ ์คํ ๋ ๋ชฉ๋ก์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค.
๋ ๋ฒ์งธ ์์ฒญ์ ์ข ๋ ๋ณต์กํฉ๋๋ค. ์ ๋ ดํ ๋ ์คํ ๋ ๋ชฉ๋ก์ ์ป์ผ๋ ค๋ฉด "๋น์ผ" ๋นํธ๋งต์์ NOT ๋นํธ๋งต์ ์ฌ์ฉํ ๋ค์ "ํ
์ด๋ธ์ ์์ฝํ ์ ์๋์?" ๋นํธ๋งต๊ณผ AND ๊ฒฐ๊ณผ๋ฅผ "๋ฒ ๋๋ค๊ฐ ์์ต๋๋ค" ๋นํธ๋งต๊ณผ AND ๊ฒฐ๊ณผ๋ก ์ป์ด์ผ โโํฉ๋๋ค. ๊ฒฐ๊ณผ ๋นํธ๋งต์๋ ๋ชจ๋ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ์์ค ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค. ์ด ์์์๋ Yunost ๋ ์คํ ๋๋ง ํด๋น๋ฉ๋๋ค.
๊ด๋ จ๋ ๋ง์ ์ด๋ก ์ด ์์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ๊ณง ์ฝ๋๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์
๋๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค๋ ์ด๋์ ์ฌ์ฉ๋๋์?
Google ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ๋ฉด ๋ต๋ณ์ 90%๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ Oracle DB์ ๊ด๋ จ์ด ์์ ๊ฒ์
๋๋ค. ํ์ง๋ง ๋ค๋ฅธ DBMS๋ ์๋ง ์ด๋ฐ ๋ฉ์ง ๊ธฐ๋ฅ์ ์ง์ํ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ฃ ? ์ค๋ง.
์ฃผ์ ์ฉ์์ ๋ช
๋จ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
MySQL์ ์์ง ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ง์ํ์ง ์์ง๋ง ์ด ์ต์
์ ์ถ๊ฐํ์๋ ์ ์์ด ์์ต๋๋ค(
PostgreSQL์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ง์ํ์ง ์์ง๋ง ๊ฐ๋จํ ๋นํธ๋งต๊ณผ ๋นํธ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ค๋ฅธ ์ธ๋ฑ์ค์ ๊ฑธ์ณ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
Tarantool์๋ ๋นํธ ์ธํธ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉฐ ์ด์ ๋ํ ๊ฐ๋จํ ๊ฒ์์ ์ง์ํฉ๋๋ค.
Redis์๋ ๊ฐ๋จํ ๋นํธ ํ๋๊ฐ ์์ต๋๋ค.
MongoDB๋ ์์ง ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ง์ํ์ง ์์ง๋ง ์ด ์ต์
์ ์ถ๊ฐํ์๋ ์ ์๋ ์์ต๋๋ค.
Elasticsearch๋ ๋ด๋ถ์ ์ผ๋ก ๋นํธ๋งต์ ์ฌ์ฉํฉ๋๋ค.
- ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ ์ง์ ์๋ก์ด ์ด์์ด ๋ํ๋ฌ์ต๋๋ค. ๋ฐ๋ก ํ๋ก์ฌ์ ๋๋ค. ์ด๊ฒ์ Go๋ก ์์ฑ๋ ์๋ก์ด ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋นํธ๋งต ์ธ๋ฑ์ค๋ง ํฌํจ๋์ด ์์ผ๋ฉฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ์ด๋ฃจ์ด์ง๋๋ค. ๊ทธ๊ฒ์ ๋ํด์๋ ์กฐ๊ธ ๋์ค์ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
Go๋ก ๊ตฌํ
๊ทธ๋ฐ๋ฐ ์ ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๊ฑธ๊น์? ์ด ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ ์ Go์์ ๋งค์ฐ ๊ฐ๋จํ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๋นํธ๋งต์ ๋ณธ์ง์ ์ผ๋ก ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ ๋ฟ์
๋๋ค. Go์์๋ ์ด๋ฅผ ์ํด ๋ฐ์ดํธ ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
ํ๋์ ๋ ์คํ ๋ ํน์ฑ์ ๋ํด ํ๋์ ๋นํธ๋งต์ด ์์ผ๋ฉฐ, ๋นํธ๋งต์ ๊ฐ ๋นํธ๋ ํน์ ๋ ์คํ ๋์ ์ด ์์ฑ์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค.
๋ ๊ฐ์ง ๋์ฐ๋ฏธ ํจ์๊ฐ ํ์ํฉ๋๋ค. ํ๋๋ ๋นํธ๋งต์ ์์์ ๋ฐ์ดํฐ๋ก ์ฑ์ฐ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌด์์์ด์ง๋ง ๋ ์คํ ๋์ ๊ฐ ์์ฑ์ด ์์ ํ๋ฅ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ์คํฌ๋ฐ์๋ ํ
์ด๋ธ์ ์์ฝํ ์ ์๋ ๋ ์คํ ๋์ด ๊ฑฐ์ ์๋ค๊ณ ์๊ฐํ๋ฉฐ, ๊ทธ ์๋น ์ค ์ฝ 20%๊ฐ ์ฑ์์ฃผ์์์๊ฒ ์ ํฉํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๋ฒ์งธ ํจ์๋ ๋นํธ๋งต์ ๋ ์คํ ๋ ๋ชฉ๋ก์ผ๋ก ๋ณํํฉ๋๋ค.
"ํํฐ์ค๊ฐ ์๊ณ ์์ฝํ ์ ์๋ ์ ๋ ดํ ๋ ์คํ ๋์ ๋ณด์ฌ์ฃผ์ธ์"๋ผ๋ ์ง๋ฌธ์ ๋๋ตํ๋ ค๋ฉด NOT๊ณผ AND๋ผ๋ ๋ ๊ฐ์ง ๋นํธ ์ฐ์ฐ์ด ํ์ํฉ๋๋ค.
๋ ๋ณต์กํ AND NOT ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์กฐ๊ธ ๋จ์ํํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฐ ์์
์ ๋ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ ๋ค ์ฌ๋ผ์ด์ค๋ฅผ ํต๊ณผํ๊ณ , ๊ฐ๊ฐ์์ ํด๋น ์์๋ฅผ ๊ฐ์ ธ์์ ๋นํธ ์ฐ์ฐ์ผ๋ก ๊ฒฐํฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ๊ณผ ์ฌ๋ผ์ด์ค์ ๋ฃ์ต๋๋ค.
์ด์ ๋นํธ๋งต๊ณผ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ฟผ๋ฆฌ์ ์๋ตํ ์ ์์ต๋๋ค.
ํจ์๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์๋ก์ด ๊ฒฐ๊ณผ ์กฐ๊ฐ์ ๋ฐํํ์ง ์์์ผ๋ก์จ ๋ง์ ๋น์ฉ์ ์ ์ฝํ์์๋ ๋ถ๊ตฌํ๊ณ ์ฑ๋ฅ์ ๊ทธ๋ค์ง ๋์ง ์์ต๋๋ค.
pprof๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฐ์ ํ๋กํ์ผ๋ง์ ์ํํ ํ Go ์ปดํ์ผ๋ฌ์ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ๋งค์ฐ ์ค์ํ ์ต์ ํ์ธ ํจ์ ์ธ๋ผ์ธ์ด ๋๋ฝ๋์ด ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ฌ์ค Go ์ปดํ์ผ๋ฌ๋ ์ฌ๋ผ์ด์ค๋ฅผ ํต๊ณผํ๋ ๋ฃจํ๋ฅผ ๋งค์ฐ ๋๋ ค์ํ๋ฉฐ ๊ทธ๋ฌํ ๋ฃจํ๊ฐ ํฌํจ๋ ํจ์๋ฅผ ์ธ๋ผ์ธํ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ๊ฑฐ๋ถํฉ๋๋ค.
ํ์ง๋ง ๋๋ ๋๋ ต์ง ์์ผ๋ฉฐ ์๋ ์ฒ๋ผ ๋ฃจํ ๋์ goto๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ๋ฅผ ์์ผ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณด์๋ค์ํผ ์ด์ ์ปดํ์ผ๋ฌ๋ ํจ์๋ฅผ ํ๋ณตํ๊ฒ ์ธ๋ผ์ธํ ๊ฒ์
๋๋ค! ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ 2๋ง์ดํฌ๋ก์ด๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค. ๋์์ง ์๋ค!
๋ ๋ฒ์งธ ๋ณ๋ชฉ ํ์์ ์ด์
๋ธ๋ฆฌ ์ถ๋ ฅ์ ์์ธํ ๋ณด๋ฉด ์ฝ๊ฒ ์ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฃจํ ๋ด๋ถ์ ์ฌ๋ผ์ด์ค ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ฌ์ค Go๋ ์์ ํ ์ธ์ด์ด๋ฏ๋ก ์ปดํ์ผ๋ฌ๋ ๋ด ์ธ ์ธ์(์ธ ์กฐ๊ฐ)์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅผ๊น ๋ด ๋๋ ค์ํฉ๋๋ค. ๊ฒฐ๊ตญ ์์ ๋ฒํผ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ ์ด๋ก ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋ผ์ด์ค์ ํฌ๊ธฐ๊ฐ ๋์ผํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค์ผ๋ก์จ ์ปดํ์ผ๋ฌ๋ฅผ ์์ฌ์ํค๊ฒ ์ต๋๋ค. ํจ์ ์์ ๋ถ๋ถ์ ๊ฐ๋จํ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ด๋ฅผ ๋ณด๊ณ ์ปดํ์ผ๋ฌ๋ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ๊ณ ๊ฒฐ๊ตญ 500๋๋
ธ์ด๋ฅผ ๋ ์ ์ฝํ๊ฒ ๋ฉ๋๋ค.
ํฐ ๋ถ์น๋ค
์ข์์, ์ฐ๋ฆฌ๋ ๊ฐ๋จํ ๊ตฌํ์ผ๋ก ์ผ๋ถ ์ฑ๋ฅ์ ์ง๋ผ ์ ์์์ง๋ง ์ด ๊ฒฐ๊ณผ๋ ์ค์ ๋ก ํ์ฌ ํ๋์จ์ด์์ ๊ฐ๋ฅํ ๊ฒ๋ณด๋ค ํจ์ฌ ๋์ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์ ๊ธฐ๋ณธ์ ์ธ ๋นํธ ์ฐ์ฐ๋ฟ์ด๋ฉฐ, ์ฐ๋ฆฌ ํ๋ก์ธ์๋ ์ด๋ฅผ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ถํํ๊ฒ๋ ์ฐ๋ฆฌ๋ ๋งค์ฐ ์์ ์์ ์ ํ๋ก์ธ์์ "๊ณต๊ธ"ํฉ๋๋ค. ์ฐ๋ฆฌ์ ํจ์๋ ๋ฐ์ดํธ ๋จ์๋ก ์์ ์ ์ํํฉ๋๋ค. UInt8 ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด 64๋ฐ์ดํธ ์ฒญํฌ๋ก ์์ ํ๋๋ก ์ฝ๋๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค.
๋ณด์๋ค์ํผ, ์ด ์์ ๋ณํ๋ก ์ธํด ๋ฐฐ์น ํฌ๊ธฐ๊ฐ XNUMX๋ฐฐ ์ฆ๊ฐํ์ฌ ํ๋ก๊ทธ๋จ ์๋๊ฐ XNUMX๋ฐฐ ํฅ์๋์์ต๋๋ค. ์ด๋์ ์ ํ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฌ๋ก ๊ตฌํ
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ๋์ด ์๋๋๋ค. ์ฐ๋ฆฌ ํ๋ก์ธ์๋ 16, 32, ์ฌ์ง์ด 64๋ฐ์ดํธ ๋จ์๋ก ์์
ํ ์ ์์ต๋๋ค. ์ด๋ฌํ "๊ด๋ฒ์ํ" ์ฐ์ฐ์ ๋จ์ผ ๋ช
๋ น์ด ๋ค์ค ๋ฐ์ดํฐ(SIMD; ํ๋์ ๋ช
๋ น์ด, ๋ง์ ๋ฐ์ดํฐ)๋ผ๊ณ ํ๋ฉฐ, ์ด๋ฌํ ์ฐ์ฐ์ ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ๋ณํํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฒกํฐํ๋ผ๊ณ ํฉ๋๋ค.
๋ถํํ๊ฒ๋ Go ์ปดํ์ผ๋ฌ๋ ๋ฒกํฐํ์ ์์ด์๋ ๊ฒฐ์ฝ ํ์ํ์ง ์์ต๋๋ค. ํ์ฌ Go ์ฝ๋๋ฅผ ๋ฒกํฐํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ Go ์ด์ ๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ด๋ฌํ ์์ ์ ์ํํ๊ณ ๋ฐฐ์นํ๋ ๊ฒ์ ๋๋ค.
Go ์ด์
๋ธ๋ฌ๋ ์ด์ํ ์ง์น์
๋๋ค. ์ฌ๋ฌ๋ถ์ ์ด์
๋ธ๋ฆฌ ์ธ์ด๊ฐ ์ฌ๋ฌ๋ถ์ด ์์ฑํ๋ ์ปดํจํฐ์ ์ํคํ
์ฒ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ Go์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. Go ์ด์
๋ธ๋ฌ๋ IRL(์ค๊ฐ ํํ ์ธ์ด) ๋๋ ์ค๊ฐ ์ธ์ด์ ๋น์ทํฉ๋๋ค. ์ฆ, ์ค์ง์ ์ผ๋ก ํ๋ซํผ ๋
๋ฆฝ์ ์
๋๋ค. Rob Pike๊ฐ ํ๋ฅญํ ์ฐ๊ธฐ๋ฅผ ํผ์ณค์ต๋๋ค.
๋ํ Go๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ๋๋ AT&T ๋ฐ Intel ํ์๊ณผ ๋ค๋ฅธ ํน์ดํ Plan 9 ํ์์ ์ฌ์ฉํฉ๋๋ค.
Go ์ด์
๋ธ๋ฌ๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ๋ฏธ์๋ ๊ฒ์ ์๋๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋๋ค.
ํ์ง๋ง ๋คํ์ค๋ฝ๊ฒ๋ Go ์ด์
๋ธ๋ฌ๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋ ๋ ๊ฐ์ง ๊ณ ๊ธ ๋๊ตฌ์ธ PeachPy์ avo๊ฐ ์ด๋ฏธ ์์ต๋๋ค. ๋ ์ ํธ๋ฆฌํฐ ๋ชจ๋ ๊ฐ๊ฐ Python๊ณผ Go๋ก ์์ฑ๋ ์์ ์์ค ์ฝ๋์์ Go ์ด์
๋ธ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ฌํ ์ ํธ๋ฆฌํฐ๋ ๋ ์ง์คํฐ ํ ๋น, ๋ฃจํ ์์ฑ๊ณผ ๊ฐ์ ์์
์ ๋จ์ํํ๊ณ ์ผ๋ฐ์ ์ผ๋ก Go์์ ์ด์
๋ธ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ก ๋ค์ด๊ฐ๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค.
์ฐ๋ฆฌ๋ avo๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ์ฐ๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ๊ฑฐ์ ์ผ๋ฐ์ ์ธ Go ํ๋ก๊ทธ๋จ์ด ๋ ๊ฒ์
๋๋ค.
์ด๊ฒ์ด avo ํ๋ก๊ทธ๋จ์ ๊ฐ์ฅ ๊ฐ๋จํ ์์
๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ์ซ์๋ฅผ ๋ํ๋ ๊ฒ์ ์๋ฏธํ๋ Add() ํจ์๋ฅผ ์ ์ํ๋ main() ํจ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฆ์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ ํฉํ ๋ฌด๋ฃ ํ๋ก์ธ์ ๋ ์ง์คํฐ ์ค ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ฐ๋ฏธ ํจ์๊ฐ ์์ต๋๋ค. ADDQ์์ ๋ณผ ์ ์๋ฏ์ด ๊ฐ ํ๋ก์ธ์ ์์
์๋ avo์ ํด๋น ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๊ฒฐ๊ณผ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋์ฐ๋ฏธ ํจ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
go generate๋ฅผ ํธ์ถํ๋ฉด avo์์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๊ฐ์ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
- Go ์ด์ ๋ธ๋ฌ์ ๊ฒฐ๊ณผ ์ฝ๋๋ก add.s;
- stub.go์๋ Go์ ์ด์ ๋ธ๋ฌ๋ผ๋ ๋ ์ธ๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ํจ์ ํค๋๊ฐ ์์ต๋๋ค.
์ด์ avo๊ฐ ์ํํ๋ ์์
๊ณผ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ผ๋ฏ๋ก ๊ธฐ๋ฅ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ๋ ํจ์์ ์ค์นผ๋ผ ๋ฒ์ ๊ณผ ๋ฒกํฐ(SIMD) ๋ฒ์ ์ ๋ชจ๋ ๊ตฌํํ์ต๋๋ค.
๋จผ์ ์ค์นผ๋ผ ๋ฒ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด์ ์์์์ ๊ฐ์ด ๋ฌด๋ฃ์ด๊ณ ์ ํจํ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ฅผ ์์ฒญํ๋ฏ๋ก ์ธ์์ ๋ํ ์คํ์
๊ณผ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ํ์๊ฐ ์์ต๋๋ค. avo๋ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ด ๋ชจ๋ ์์
์ ์ํํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฑ๋ฅ์ ํฅ์ํ๊ณ Go ์ปดํ์ผ๋ฌ๋ฅผ ์์ด๊ธฐ ์ํด ๋ ์ด๋ธ๊ณผ goto(๋๋ ์ ํ)๋ฅผ ์ฌ์ฉํ์ง๋ง ์ด์ ๋ ์ฒ์๋ถํฐ ์ด๋ฅผ ์ํํ๊ณ ์์ต๋๋ค. ์์ ์ ์ฌ์ดํด์ด ๋ ๋์ ์์ค์ ๊ฐ๋
์ด๋ผ๋ ๊ฒ์
๋๋ค. ์ด์
๋ธ๋ฌ์๋ ๋ ์ด๋ธ๊ณผ ์ ํ๋ง ์์ต๋๋ค.
๋๋จธ์ง ์ฝ๋๋ ์ด๋ฏธ ์ต์ํ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ๋ ์ด๋ธ๊ณผ ์ ํ๊ฐ ํฌํจ๋ ๋ฃจํ๋ฅผ ์๋ฎฌ๋ ์ดํธํ๊ณ , ๋ ์ฌ๋ผ์ด์ค์์ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๊ฐ์ ธ์์ ๋นํธ ์ฐ์ฐ์ผ๋ก ๊ฒฐํฉํ ๋ค์(์ด ๊ฒฝ์ฐ์๋ ์๋) ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ๊ณผ ์ฌ๋ผ์ด์ค์ ๋ฃ์ต๋๋ค. ๋ชจ๋.
์ด๊ฒ์ด ์ต์ข
์ด์
๋ธ๋ฌ ์ฝ๋์ ๋ชจ์ต์
๋๋ค. ์คํ์
๊ณผ ํฌ๊ธฐ(๋
น์์ผ๋ก ๊ฐ์กฐ ํ์)๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ ์ฌ์ฉ๋ ๋ ์ง์คํฐ(๋นจ๊ฐ์์ผ๋ก ๊ฐ์กฐ ํ์)๋ฅผ ์ถ์ ํ ํ์๊ฐ ์์์ต๋๋ค.
์ด์
๋ธ๋ฆฌ ์ธ์ด ๊ตฌํ์ ์ฑ๋ฅ๊ณผ Go์์ ์ต์์ ๊ตฌํ ์ฑ๋ฅ์ ๋น๊ตํด ๋ณด๋ฉด ๋์ผํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์์๋ฉ๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ํน๋ณํ ์ผ์ ํ์ง ์์์ต๋๋ค. Go ์ปดํ์ผ๋ฌ๊ฐ ์ํํ๋ ์์
์ ์ฌํํ์ ๋ฟ์
๋๋ค.
์ํ๊น๊ฒ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ก ์์ฑ๋ ํจ์๋ฅผ ์ธ๋ผ์ธํ๋๋ก ๊ฐ์ ํ ์๋ ์์ต๋๋ค. Go ์ปดํ์ผ๋ฌ์๋ ํ์ฌ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ด ์์ง๋ง ๊ฝค ์ค๋ซ๋์ ์ถ๊ฐํด ๋ฌ๋ผ๋ ์์ฒญ์ด ์์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ด์ ๋ธ๋ฆฌ ์ธ์ด์ ์์ ํจ์๋ก ์ด๋ค ์ด์ ๋ ์ป์ ์ ์๋ ์ด์ ์ ๋๋ค. ๋๊ท๋ชจ ํจ์๋ฅผ ์์ฑํ๊ฑฐ๋, ์๋ก์ด math/bits ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ์ด์ ๋ธ๋ฌ ์ธ์ด๋ฅผ ์ฐํํด์ผ ํฉ๋๋ค.
์ด์ ํจ์์ ๋ฒกํฐ ๋ฒ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด ์์์๋ AVX2๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ผ๋ฏ๋ก 32๋ฐ์ดํธ ์ฒญํฌ์์ ์๋ํ๋ ์์
์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ์ฝ๋์ ๊ตฌ์กฐ๋ ๋งค๊ฐ๋ณ์ ๋ก๋, ๋ฌด๋ฃ ๊ณต์ ๋ ์ง์คํฐ ์์ฒญ ๋ฑ ์ค์นผ๋ผ ๋ฒ์ ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
ํ ๊ฐ์ง ํ์ ์ ๋ ๋์ ๋ฒกํฐ ์ฐ์ฐ์ด ํน๋ณํ ์์ด๋ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. 32๋ฐ์ดํธ ์ฒญํฌ์ ๊ฒฝ์ฐ ๋ ์ง์คํฐ ์์ Y๊ฐ ๋ถ์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฝ๋์ YMM() ํจ์๊ฐ ๋ณด์ด๋ ์ด์ ์
๋๋ค. 512๋นํธ ์ฒญํฌ์ ํจ๊ป AVX-64๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ๋์ฌ๋ Z์
๋๋ค.
๋ ๋ฒ์งธ ํ์ ์ ๋ฃจํ ์ธ๋กค๋ง(loop unrolling)์ด๋ผ๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒ์
๋๋ค. ์ด๋ ๋ฃจํ ์์์ผ๋ก ์ ํํ๊ธฐ ์ ์ ์๋์ผ๋ก XNUMX๊ฐ์ ๋ฃจํ ์์
์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ์ต์ ํ๋ ์ฝ๋์ ๋ถ๊ธฐ ์๋ฅผ ์ค์ด๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌด๋ฃ ๋ ์ง์คํฐ ์์ ๋ฐ๋ผ ์ ํ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฑ๋ฅ์ ์ด๋ป์ต๋๊น? ๊ทธ๋
๋ ์๋ฆ๋ต๋ค! ์ฐ๋ฆฌ๋ ์ต๊ณ ์ Go ์๋ฃจ์
์ ๋นํด ์ฝ XNUMX๋ฐฐ์ ์๋ ํฅ์์ ๋ฌ์ฑํ์ต๋๋ค. ์ธ์์ ์ด์ฃ ?
๊ทธ๋ฌ๋ ์ด ๊ตฌํ์กฐ์ฐจ๋ AVX-512, ํ๋ฆฌํจ์น ๋๋ ์ฟผ๋ฆฌ ์ค์ผ์ค๋ฌ์ฉ JIT(Just-In-Time ์ปดํ์ผ๋ฌ)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ผ๋ก ๊ฐ์ํ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ํ์คํ ๋ณ๋์ ๋ณด๊ณ ์ ์ฃผ์ ์
๋๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค ๋ฌธ์
์ด์ ์ฐ๋ฆฌ๋ Go์์ ๋นํธ๋งต ์ธ๋ฑ์ค์ ๊ฐ๋จํ ๊ตฌํ๊ณผ ์ด์
๋ธ๋ฆฌ ์ธ์ด์์ ํจ์ฌ ๋ ์์ฐ์ ์ธ ๊ตฌํ์ ์ด๋ฏธ ์ดํด๋ณด์์ผ๋ฏ๋ก ๋ง์ง๋ง์ผ๋ก ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ์ด์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
์ด์ ๋
ผ๋ฌธ์์๋ ๋นํธ๋งต ์ธ๋ฑ์ค์ ๊ด๋ จ๋ ์ธ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ธ๊ธํ์ง๋ง ์ต์ ๋
ผ๋ฌธ๊ณผ ๋๋ ์ด๊ฒ์ด ๋ ์ด์ ๊ด๋ จ์ด ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ๊ฐ์ ๊น์ด ๋ค๋ฃจ์ง๋ ์๊ณ ํผ์์ ์ผ๋ก ์ดํด๋ณผ ๊ฒ์
๋๋ค.
๋์ ์นด๋๋๋ฆฌํฐ์ ๋ฌธ์
๋ฐ๋ผ์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ํ๋, ์ฆ ๊ฐ์ด ๊ฑฐ์ ์๋ ํ๋(์: ์ฑ๋ณ ๋๋ ๋ ์๊น)์๋ง ์ ํฉํ๋ค๊ณ ๋ค์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ด๋ฌํ ํ๋์ ์ผ๋ฐ์ ์ธ ํํ(ํ๋ ๊ฐ๋น ๋นํธ) ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ๊ฒฝ์ฐ ๋๋ฌด ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ฉฐ ๋์ฑ์ด ์ด๋ฌํ ๋นํธ๋งต ์ธ๋ฑ์ค๋ ์ ๋๋ก ์ฑ์์ง์ง ์์ต๋๋ค(๋๋ฌผ๊ฒ).
๋๋ก๋ ์ซ์๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ์ค ํํ๊ณผ ๊ฐ์ ๋ค๋ฅธ ํํ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฒ์ ๋ณํ์ํจ ๊ฒ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ถํ์ด์์ต๋๋ค. ์ง๋ ์์ญ ๋
๋์ ๊ณผํ์์ ์ฐ๊ตฌ์๋ค์ ๋นํธ๋งต์ ๋ํ ์๋ง์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด ๋์ต๋๋ค. ์ฃผ์ ์ฅ์ ์ ๋นํธ ์์
์ ์ํํ๊ธฐ ์ํด ๋นํธ๋งต์ ์์ถ์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ์์ถ๋ ๋นํธ๋งต์์ ์ง์ ๋นํธ ์์
์ ์ํํ ์ ์์ต๋๋ค.
์ต๊ทผ์๋ ๋นํธ๋งต๊ณผ ๊ฐ์ ํ์ด๋ธ๋ฆฌ๋ ๋ฐฉ์์ด ๋ฑ์ฅํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ค์ ๋นํธ๋งต์ ๋ํด ์ธ ๊ฐ์ง ๋ค๋ฅธ ํํ(๋นํธ๋งต ์์ฒด, ๋ฐฐ์ด ๋ฐ ์์ ๋นํธ ์คํ)์ ๋์์ ์ฌ์ฉํ๊ณ ์ด๋ค ๊ฐ์ ๊ท ํ์ ์ ์งํ์ฌ ์ฑ๋ฅ์ ์ต๋ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ต์ํํฉ๋๋ค.
๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ํ๋ฐํ ๋นํธ๋งต์ ์ฐพ์ ์ ์์ต๋๋ค. Go์ ๋ํ ์ธ ๊ฐ์ง ์ด์์ ๊ตฌํ์ ํฌํจํ์ฌ ์ด๋ฏธ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์๋ง์ ๊ตฌํ์ด ์์ต๋๋ค.
๋์ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋น๋(binning)์
๋๋ค. ์ฌ๋์ ํค๋ฅผ ๋ํ๋ด๋ ํ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์ธ์. ๋์ด๋ ๋ถ๋ ์์์ ์ซ์์ด์ง๋ง ์ฐ๋ฆฌ ์ธ๊ฐ์ ๊ทธ๋ฐ ์์ผ๋ก ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ํค 185,2cm์ 185,3cm ์ฌ์ด์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์ ์ฌํ ๊ฐ์ 1cm ์ด๋ด์ ๊ทธ๋ฃน์ผ๋ก ๊ทธ๋ฃนํํ ์ ์์์ด ๋ฐํ์ก์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํค๊ฐ 50cm๋ณด๋ค ์๊ณ ํค๊ฐ 250cm๋ณด๋ค ํฐ ์ฌ๋์ด ๊ฑฐ์ ์๋ค๋ ์ฌ์ค๋ ์๊ณ ์๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌดํ ์นด๋๋๋ฆฌํฐ๊ฐ ์๋ ํ๋๋ฅผ ์ฝ 200๊ฐ ๊ฐ์ ์นด๋๋๋ฆฌํฐ๊ฐ ์๋ ํ๋๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
๋ฌผ๋ก ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ์ถ๊ฐ ํํฐ๋ง์ ์ํํ ์๋ ์์ต๋๋ค.
๊ณ ๋์ญํญ ๋ฌธ์
๋นํธ๋งต ์ธ๋ฑ์ค์ ๋ค์ ๋ฌธ์ ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐ ๋น์ฉ์ด ๋งค์ฐ ๋ง์ด ๋ ๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์ฌ์ ์ผ๋ก ์๋ฐฑ ๊ฐ์ ๋ค๋ฅธ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ด์ผ ํฉ๋๋ค. ๋์ ๋ฐ์ดํฐ ์ก์ธ์ค ๋๋ ๊ธฐํ ๊ณต์ ๋ฌธ์ ๋ก ์ธํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ ๊ธ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ํฐ ์ ๊ธ์ด ์๋ ๊ณณ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฆ, ์ด ์ ๊ธ์ด ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ฉด ์ ๊ธ ๊ฒฝํฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ค๋ฉ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฒ์ ์ด ์ง์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๊ฑฐ๋ ํํผํ ์ ์์ต๋๋ค.
์ค๋ฉ์ ๊ฐ๋จํ๊ณ ์ ์๋ ค์ง ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ค๋ฉํ ์ ์์ต๋๋ค. ํ๋์ ํฐ ์ ๊ธ ๋์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ ๊ธ์ ํ๋ณดํ์ฌ ์ ๊ธ ๊ฒฝํฉ์ ์ ๊ฑฐํฉ๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฒ์ ์ด ์ง์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฒ์ ๋๋ ์ฝ๊ธฐ์ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค ๋ณต์ฌ๋ณธ ํ๋์ ์ฐ๊ธฐ ๋๋ ์ ๋ฐ์ดํธ์ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค ๋ณต์ฌ๋ณธ ํ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน์ ๊ธฐ๊ฐ(์: 100ms ๋๋ 500ms๋ง๋ค ํ ๋ฒ์ฉ)์ ํ ๋ฒ ๋ณต์ ํ๊ณ ๊ตํํฉ๋๋ค. ๋ฌผ๋ก ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฝ๊ฐ ์ง์ฐ๋๋ ๊ฒ์ ์์ธ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, ์ค๋ฉ๋ ๋ฒ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๋ณต์กํ ์ฟผ๋ฆฌ
๋นํธ๋งต ์ธ๋ฑ์ค์ ๋ง์ง๋ง ๋ฌธ์ ๋ ๋ฒ์ ์ฟผ๋ฆฌ์ ๊ฐ์ ๋ ๋ณต์กํ ์ ํ์ ์ฟผ๋ฆฌ์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค.
์ค์ ๋ก ์๊ฐํด ๋ณด๋ฉด AND, OR ๋ฑ๊ณผ ๊ฐ์ ๋นํธ ์ฐ์ฐ์ "200๋ฐ๋น ๊ฐ์ค ์๊ธ์ด 300~XNUMX๋ฌ๋ฌ์ธ ํธํ
์ ๋ณด์ฌ์ฃผ์ธ์"๋ผ๋ ์ฟผ๋ฆฌ์๋ ๊ทธ๋ค์ง ์ ํฉํ์ง ์์ต๋๋ค.
์์งํ๊ณ ๋งค์ฐ ํ๋ช
ํ์ง ๋ชปํ ํด๊ฒฐ์ฑ
์ ๊ฐ ๋ฌ๋ฌ ๊ฐ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ ์ด๋ฅผ ๋นํธ๋ณ OR ์ฐ์ฐ๊ณผ ๊ฒฐํฉํ๋ ๊ฒ์
๋๋ค.
์ฝ๊ฐ ๋ ๋์ ํด๊ฒฐ์ฑ
์ ๊ทธ๋ฃนํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด 50๋ฌ๋ฌ ๊ทธ๋ฃน์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ก์ธ์ค ์๋๊ฐ 50๋ฐฐ ๋นจ๋ผ์ง๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ํ์ ์์ฒญ์ ์ํด ํน๋ณํ ์์ฑ๋ ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์ฝ๊ฒ ํด๊ฒฐ๋ฉ๋๋ค. ๊ณผํ ๋
ผ๋ฌธ์์๋ ์ด๋ฅผ ๋ฒ์ ์ธ์ฝ๋ฉ ๋นํธ๋งต์ด๋ผ๊ณ ํฉ๋๋ค.
์ด ํํ์์๋ ์ผ๋ถ ๊ฐ(์: 200)์ ๋ํด 200๋นํธ๋ง ์ค์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ด ๊ฐ๊ณผ ๋ชจ๋ ๊ฐ์ ๋ ๋๊ฒ ์ค์ ํฉ๋๋ค. 300 ์ด์. 300:XNUMX ์ด์์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ฑ๋ฑ.
์ด ํํ์ ์ฌ์ฉํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ๋ ๋ฒ๋ง ์ํํ์ฌ ์ด๋ฌํ ์ข
๋ฅ์ ๊ฒ์ ์ฟผ๋ฆฌ์ ๋ตํ ์ ์์ต๋๋ค. ๋จผ์ , ๊ฐ์ค ๋น์ฉ์ด $300 ์ดํ์ธ ํธํ
๋ชฉ๋ก์ ๊ฐ์ ธ์จ ๋ค์, ๊ฐ์ค ๋น์ฉ์ด $199 ์ดํ์ธ ํธํ
์ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค. ์ค๋น๊ฐ ๋.
๋๋ผ์๊ฒ ์ง๋ง ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ง๋ฆฌ ์ฟผ๋ฆฌ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋น๊ฒฐ์ ์ขํ๋ฅผ ๊ธฐํํ์ ๋ํ์ผ๋ก ๋๋ฌ์ธ๋ ๊ธฐํํ์ ํํ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด Google์ S2์
๋๋ค. ๋ํ์ ๋ฒํธ๋ฅผ ๋งค๊ธธ ์ ์๋ XNUMX๊ฐ ์ด์์ ๊ต์ฐจ์ ํํ๋ก ํํ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ฐ๋ฆฌ๋ ์ง๋ฆฌ ์ฟผ๋ฆฌ๋ฅผ "๊ฐ๊ฒฉ์ ๋ฐ๋ผ"(๋ฒํธ๊ฐ ๋งค๊ฒจ์ง ์ค์ ๋ฐ๋ผ) ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
Ready ์๋ฃจ์
์ ๊ฐ ์ฌ๋ฌ๋ถ์๊ฒ ์ฝ๊ฐ์ ๊ด์ฌ์ ๊ฐ์ก๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์ด์ ์ฌ๋ฌ๋ถ์ ๋ฌด๊ธฐ๊ณ ์ ๋ ๋ค๋ฅธ ์ ์ฉํ ๋๊ตฌ๊ฐ ์๊ฒผ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด์ ๊ฐ์ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋ด์ผ ํ ์ง ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์ฌ๋์ด ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋ง๋ค ์ ์๋ ์๊ฐ, ์ธ๋ด์ฌ ๋๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด SIMD๋ฅผ ์ฌ์ฉํ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํนํ ๊ทธ๋ ์ต๋๋ค.
๋คํํ๋ ๋์์ด ๋ ์ ์๋ ๋ช ๊ฐ์ง ๊ธฐ์ฑ ์๋ฃจ์
์ด ์์ต๋๋ค.
์์๊ฑฐ๋ฆฌ๋ ๋นํธ๋งต
์ฒซ์งธ, ์ ๊ฐ ์ด๋ฏธ ์ด์ผ๊ธฐํ ๊ฒ๊ณผ ๋์ผํ ๊ฐ๋ ฅํ ๋นํธ๋งต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ณธ๊ฒฉ์ ์ธ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ปจํ
์ด๋์ ๋นํธ ์์
์ด ํฌํจ๋์ด ์์ต๋๋ค.
๋ถํํ๋ ํ์ฌ Go ๊ตฌํ ์ค SIMD๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ต๋๋ค. ์ด๋ ์๋ฅผ ๋ค์ด Go ๊ตฌํ์ด C ๊ตฌํ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฎ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํ๋ก์ฌ
๋์์ด ๋ ์ ์๋ ๋ ๋ค๋ฅธ ์ ํ์ ์ค์ ๋ก ๋นํธ๋งต ์ธ๋ฑ์ค๋ง ์๋ Pilosa DBMS์
๋๋ค. ์ด๋ ๋น๊ต์ ์๋ก์ด ์๋ฃจ์
์ด์ง๋ง ๋น ๋ฅธ ์๋๋ก ๋ง์์ ์ฌ๋ก์ก๊ณ ์์ต๋๋ค.
Pilosa๋ ๋ด๋ถ์ ์ผ๋ก ํ๋ฐํ ๋นํธ๋งต์ ์ฌ์ฉํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์์์ ์ค๋ช
ํ ๋ชจ๋ ํญ๋ชฉ(๊ทธ๋ฃนํ, ๋ฒ์ ์ธ์ฝ๋ฉ ๋นํธ๋งต, ํ๋ ๊ฐ๋
๋ฑ)์ ๋จ์ํํ๊ณ ์ค๋ช
ํฉ๋๋ค.
์ด๋ฏธ ์ต์ํ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด Pilosa๋ฅผ ์ฌ์ฉํ๋ ์๋ฅผ ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด ์๋ ์ด์ ์ ๋ณธ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. Pilosa ์๋ฒ์ ๋ํ ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ๊ณ ์ธ๋ฑ์ค์ ํ์ ํ๋๋ฅผ ์์ฑํ ๋ค์ ํ๋ฅ ์ด ์๋ ์์์ ๋ฐ์ดํฐ๋ก ํ๋๋ฅผ ์ฑ์ฐ๊ณ ๋ง์ง๋ง์ผ๋ก ์ต์ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ "๋น์ผ" ํ๋์ NOT์ ์ฌ์ฉํ ๋ค์ ๊ฒฐ๊ณผ(๋๋ AND)๋ฅผ "ํ
๋ผ์ค" ํ๋ ๋ฐ "์์ฝ" ํ๋์ ๊ต์ฐจํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์นจ๋ด ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค.
๊ฐ๊น์ด ๋ฏธ๋์ ์ด ์๋ก์ด ์ ํ์ ์ธ๋ฑ์ค๊ฐ MySQL ๋ฐ PostgreSQL๊ณผ ๊ฐ์ DBMS(๋นํธ๋งต ์ธ๋ฑ์ค)์๋ ๋ํ๋๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
๊ฒฐ๋ก
์์ง ์ ๋ค์ง ์์ผ์
จ๋ค๋ฉด, ๊ฐ์ฌํฉ๋๋ค. ์๊ฐ์ด ๋ถ์กฑํ์ฌ ๋ง์ ์ฃผ์ ๋ฅผ ๊ฐ๋ตํ ๋ค๋ฃจ์ด์ผ ํ์ง๋ง, ๊ทธ ๊ฐ์ฐ์ด ์ ์ตํ๊ณ ๋๊ธฐ๋ถ์ฌ๊ฐ ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค๋ ์ง๊ธ ๋น์ฅ ํ์ํ์ง ์๋๋ผ๋ ์์๋๋ฉด ์ข์ต๋๋ค. ๋๊ตฌ ์์์ ๋ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ๋๋๋ก ํ์ญ์์ค.
์ฐ๋ฆฌ๋ Go์ ๋ํ ๋ค์ํ ์ฑ๋ฅ ์๋ น๊ณผ Go ์ปดํ์ผ๋ฌ๊ฐ ์์ง ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒ๋ค์ ์ดํด๋ณด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ชจ๋ Go ํ๋ก๊ทธ๋๋จธ๊ฐ ์์์ผ ํ ์ ๋์ ์ผ๋ก ์ ์ฉํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ๋น์ ์๊ฒ ๋งํ๊ณ ์ถ์ ์ ๋ถ์
๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์ถ์ฒ : habr.com