๐น 12. System design & Scalability
09. ์์คํ ์ค๊ณ ๋ฐ ๊ท๋ชจ ํ์ฅ์ฑ
[ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ]
์ํตํ๋ผ
: ์์คํ ์ค๊ณ ๋ฌธ์ ๋ฅผ ์ถ์ ํ๋ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์์ฌ์ํต ๋ฅ๋ ฅ์ ํ๊ฐํ๊ธฐ ์ํจ์ด๋ค. ๋ฉด์ ๊ด๊ณผ ๋์์์ด ์์ฌ์ํตํ๋ผ. ๋ฉด์ ๊ด์๊ฒ ์ง๋ฌธ์ ๋์ง๊ณ , ์์คํ ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ์ด๋ฆฐ ๋ง์์ผ๋ก ๋ฐ์๋ค์ด๋ผ.
์ฒ์์๋ ํฌ๊ด์ ์ผ๋ก ์ ๊ทผํ๋ผ
: ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ๋ก ๋ฐ์ด๋ค์ง ๋ง๊ณ ํน์ ๋ถ๋ถ์ ๊ณผ๋ํ๊ฒ ํ๊ณ ๋ค์ง ๋ง๋ผ
ํ์ดํธ๋ณด๋๋ฅผ ์ฌ์ฉํ๋ผ
: ํ์ดํธ๋ณด๋๋ ์ฐ๋ฆฌ๊ฐ ์ ์ํ๋ ์ค๊ณ๋ฅผ ๋ฉด์ ๊ด์ด ์ดํดํ๊ฒ๋ ๋์์ ์ค๋ค. ๋ฌธ์ ๋ฅผ ๋ฐ์๋ง์ ํ์ดํธ๋ณด๋์ ์ฐ๋ฆฌ๊ฐ ์ ์ํ๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ฉฐ ์ค๋ช ํ๋ผ.
๋ฉด์ ๊ด์ด ์ฐ๋ คํ๋ ๋ถ๋ถ์ ์ธ์ ํ๋ผ
: ๋ฉด์ ๊ด์ ์๋ง๋ ์ฐ๋ ค๋๋ ๋ถ๋ถ์ ํ๊ณ ๋ค๋ ค ํ ๊ฒ์ด๋ค. ๊ทธ๊ฒ์ ๋ฌด์ํ์ง ๋ง๋ผ. ๋ฉด์ ๊ด์ ์ฐ๋ ค๋ฅผ ์ธ์ ํด๋ผ. ๋ฉด์ ๊ด์ด ์ง์ ๋ฌธ์ ์ ์ ์ธ์ ํ๊ณ ์ ์ ํ๊ฒ ์์ ํ๋ผ.
๊ฐ์ ์ ํ ๋ ์ฃผ์ํ๋ผ
: ์๋ชป๋ ๊ฐ์ ์ ๋ฌธ์ ๋ฅผ ์์ ํ ๋ค๋ฅด๊ฒ ๋ฐ๊ฟ ๋ฒ๋ฆด ์ ์๋ค. ์ผ๋ก๋ก ๋ฐ์ดํฐ ํต๊ณ/๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ์์คํ ์ด ์์ ๋, ์ด ์์คํ ์ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์ธ์ ๋ ์ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์ผ ํ๋์ง ์๋์ง์ ๋ฐ๋ผ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
์ฌ๋ฌ๋ถ์ด ์๊ฐํ๋ ๊ฐ์ ์ ๋ช ํํ ์ธ๊ธํ๋ผ
: ๊ฐ์ ์ ํ ๋ ๊ทธ๊ฒ์ ๋ฉด์ ๊ด์๊ฒ ์๋ ค ์ค์ผ ํ๋ค. ๊ทธ๋์ผ ์ค์ํ์ ๋ ๋ฉด์ ๊ด์ด ๋ฐ๋ก์ก์ ์ค ์ ์๊ณ , ์ ์ด๋ ํ์ฌ ์ด๋ค ๊ฐ์ ์ ํ๊ณ ์๋์ง ๋ฉด์ ๊ด์ด ์ ์ ์๋ค.
ํ์ํ๋ค๋ฉด ์ด๋ฆผ์ก์ ๋ณด๋ผ
: ๋ง์ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์น ํฌ๋กค๋ฌ(web crawler)๋ฅผ ์ค๊ณํ๋ค๊ณ ํ ๋, ๋ชจ๋ URL์ ์ ์ฅํ๋ ๋ฐ ํ์ํ ๊ณต๊ฐ์ด ์ผ๋ง๋ ๋๋์ง ์ด๋ฆผ์ก์ ๋ณผ ํ์๊ฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ์ด ํฌ๊ธฐ๋ฅผ ์ด๋ฆผ์ก์ ๋ณผ ์ ์๋ค.
๋ฐ์ด๋ค๋ผ
: ์ง์์๋ก์ ๋ฌธ์ ๋ฅผ ์ฑ ์์ ธ์ผ ํ๋ค. ๊ทธ๋ ๋ค๊ณ ์กฐ์ฉํ ์์ผ๋ฉด ์ ๋๋ค. ๋ฐ๋์ ๋ฉด์ ๊ด๊ณผ ์ด์ผ๊ธฐ๋ฅผ ํด์ผ ํ๋ค. ํ์ง๋ง ๊ทธ์ ๋์์ ๋ฌธ์ ๋ ํ์ด๋ด์ผ ํ๋ค. ์ฅ๋จ์ ์ ์ด๋ฆฐ ๋ง์์ผ๋ก ๋ฐ์๋ค์ฌ๋ผ. ๊ณ์ํด์ ๊น์ด ํ๊ณ ๋ค์ด๋ผ. ๊ณ์ํด์ ํฅ์์์ผ ๋๊ฐ๋ผ.
์ด๋ฐ ๋ฌธ์ ๋ค์ ์ต๊ณ ์ ์ค๊ณ๋ฅผ ํด๋ด๋ ๊ฒ๋ณด๋ค ๋๊ฒ ๊ทธ ๊ณผ์ ์ ์ค์ํ๊ฒ ๋ณธ๋ค.
[ ์์คํ ์ค๊ณ: ๋จ๊ณ๋ณ ์ ๊ทผ๋ฒ ]
์ค์ ์ค๊ณ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ง์ ์ง๋ฌธ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ฉด์ ์์๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ์ ์ ๊ทผํด์ผ ํ๋ค.
1๋จ๊ณ: ๋ฌธ์ ์ ๋ฒ์๋ฅผ ํ์ ํ๋ผ
๋ง๋ค๊ณ ์ ํ๋ ์์คํ ๊ณผ ๋ฉด์ ๊ด์ด ์ํ๋ ๊ฒ์ด ๊ฐ์์ง ํ์คํ ํ ์ ์๋ค๋ ์ ์์ ๋ฌธ์ ์ ๋ฒ์๋ฅผ ํ์ ํ๋ ์์ ์ ์ค์ํ๋ค.
TinyURL ์ค๊ณ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ ๋, ์ ํํ ๋ฌด์์ ๊ตฌํํด์ผ ํ๋์ง ์๊ณ ์ถ์ ๊ฒ์ด๋ค.
- ๊ฐ๊ฐ์ธ์ด ์ํ๋ ๋๋ก ์ถ์ฝ๋ URL์ ๋ง๋ค ์ ์๋๊ฐ?
- ์ถ์ฝ๋ URL์ด ํญ์ ์๋์ผ๋ก ์์ฑ๋๋๊ฐ?
- ํด๋ฆญ์ ๊ดํ ํต๊ณ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ ํ์๊ฐ ์๋๊ฐ?
- ํ ๋ฒ ์ค์ ๋ URL์ ์์ํ ์์ด์ง์ง ์๋๊ฐ, ์๋๋ฉด ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์ญ์ ๋๋๊ฐ?
์ด ์ง๋ฌธ๋ค์ ์์คํ ์ค๊ณ์ ์์ ๋ฐ๋์ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๊ฒ๋ค์ด๋ค.
์ฃผ์ํ ํน์ง์ด๋ ์ฌ์ฉ๋๋ ์ฌ๋ก๋ฅผ ๋์ดํด๋ณด์. ์๋ฅผ ๋ค์ด TinyURL์ ์๋ง๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ ๊ฒ์ด๋ค.
- URL์ TinyURL๋ก ์ถ์ฝ
- URL์ ๋ถ์
- TinyURL๊ณผ ์ฐ๊ฒฐ๋ URL์ ๊ฒ์
- ์ฌ์ฉ์ ๊ณ์ ๋ฐ ๋งํฌ ๊ด๋ฆฌ
2๋จ๊ณ: ํฉ๋ฆฌ์ ์ธ ๊ฐ์ ์ ๋ง๋ค๋ผ
ํ์ํ๋ค๋ฉด ๊ฐ์ ์ ์ธ์ฐ๋ ๊ฒ๋ ๊ด์ฐฎ์ง๋ง, ํฉ๋นํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ์์คํ ์ด ํ๋ฃจ์ 100๋ช ์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ ์๋ง ์์ผ๋ฉด ๋๋ค๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฝ์ด ์๋ค๊ฑฐ๋ ํ๋ ๊ฐ์ ์ ํฉ๋นํ์ง ์๋ค.
ํ์ง๋ง ํ๋ฃจ์ ์ต๋ ๋ฐฑ๋ง ๊ฐ์ URL์ ์์ฑํ๋ ์์คํ ์ ๊ฐ์ ํ๋ ๊ฒ์ ํฉ๋นํ๋ค. ์ด๋ฐ ๊ฐ์ ์ ํตํด ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋์ง ๊ณ์ฐํด๋ณผ ์ ์๋ค.
์ด๋ค ๊ฐ์ ์ ์ธ์ฐ๋ ค๋ฉด โ์ ํ์ ๋ํ ๊ฐโ์ด ์์ด์ผ ํ ์๋ ์๋ค
์๋ฅผ ๋ค์ด, ์ต๊ทผ ๋ฐ์ดํฐ์ ๋นํด ์ต๋ 10๋ถ ์ ๋ ์ค์ฐจ๊ฐ ์์ด๋ ๊ด์ฐฎ์๊ฐ? ์ด๋ฐ ๊ฑด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋ฐฉ๊ธ ์ถ๊ฐํ URL์ด ์ ๋๋ก ๋์ํ๊ธฐ๊น์ง 10๋ถ์ด ๊ฑธ๋ฆฐ๋ค๋ฉด ๊ทธ ์ ํ์ ์๋ฌด๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ค. ์ฌ๋๋ค์ ๋๋ถ๋ถ URL์ ์ถ๊ฐํ ๋ค ๊ณง๋ฐ๋ก ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ค. ๊ทธ๋ ์ง๋ง, ํต๊ณ์ ์ผ๋ก ๋ดค์ ๋ ๋ฐ์ดํฐ๊ฐ 10๋ถ ์ ๋ ์ค๋๋ ๊ฑด ๊ด์ฐฎ๋ค.
3๋จ๊ณ: ์ค์ํ ๋ถ๋ถ์ ๋จผ์ ๊ทธ๋ฆฌ๋ผ
์์คํ ์ ์ฃผ์ํ ๋ถ๋ถ์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๊ทธ๋ฆฌ๋ผ. ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ๊ฐ์ ํ๋ก ํธ์๋ ์๋ฒ๊ฐ ๋ฐฑ์๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ค๋ ์์คํ ์ผ ์๋ ์๊ณ , ํ ์๋ฒ๊ตฐ์ ์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ๊ธ์ด ์ค๊ณ ๋ค๋ฅธ ์๋ฒ๊ตฐ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ์์ ์ ํ๋ ์์คํ ์ผ ์๋ ์๋ค. ๊ทธ ์์คํ ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ฆฌ๋ผ.
์์คํ ์ ์ฒ์๋ถํฐ ๋ง์ง๋ง๊น์ง ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ทธ ํ๋ฆ์ ๋ณด์ฌ๋ผ. ์ฌ์ฉ์๊ฐ ์๋ก์ด URL์ ์ ๋ ฅํ๋ค๋ฉด ๊ทธ ๋ค์์๋ ์ด๋ป๊ฒ ๋๊ฒ ๋๊ฐ?
ํ์ฌ ๋จ๊ณ์์ ๊ท๋ชจ ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ๋ฌด์ํด๋ ๋๋ค. ๊ทธ๋ฅ ๋จ์ํ๊ณ ๋ช ๋ฐฑํ๊ฒ ๋์ํ๋ค๊ณ ์ ๊ทผํด๋ ๊ด์ฐฎ๋ค.
4๋จ๊ณ: ํต์ฌ ๋ฌธ์ ์ ์ ์ฐพ์๋ผ
๋ง์์์์ ๊ธฐ๋ณธ์ ์ธ ์ค๊ณ๋ฅผ ๋ง์น ๋ค์๋ ๋ฐ์ํ ์ ์๋ ํต์ฌ ๋ฌธ์ ์ ์ง์คํด์ผ ํ๋ค. ์ด๋ ๋ถ๋ถ์ด ๋ณ๋ชฉ์ง์ ์ผ๊น? ์ด ์์คํ ์ด ํ์ด์ผ ํ ์ฃผ๋ ๋ฌธ์ ๋ ๋ฌด์์ธ๊ฐ?
ex) TinyURL ์ค๊ณ
์ด๋ค URL์ ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด ํน์ URL์ ์ฌ์ฉ๋์ด ๊ฐ์๊ธฐ ์น์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด ๋ ์์คํ ์ด ๋๊น์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ์ด์ค๊ธธ ์ํ์ง๋ ์์ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ์์ ์๋ง๋ ๋ฉด์ ๊ด์ด ์ด๋ ์ ๋ ๊ฐ์ด๋๋ฅผ ํด์ค ๊ฒ์ด๋ค. ๊ทธ๋ด ๋ ๊ทธ ์กฐ์ธ์ ๋ฐ์๋ค์ด๊ณ ์์คํ ์ ์ ์ฉํ๋ผ
5๋จ๊ณ: ํต์ฌ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋๋ก ๋ค์ ์ค๊ณํ๋ผ
ํต์ฌ ๋ฌธ์ ์ ๋ง๋๋ก ์ค๊ณ๋ฅผ ์์ ํด์ผ ํ๋ค.
์์คํ ์ ์ฒด๋ฅผ ๊ฐ์ ์๊ฑฐ๋, ๋ช ๊ฐ์ง ์์ํ ๋ถ๋ถ๋ง ์์ (์บ์ ์ฌ์ฉ) ํด๊ฒฐํ ์ ์๋ค. ๋ณธ์ธ์ด ์๊ฐํ๊ณ ์๋ ์ ์ฝ์ฌํญ๋ค์ ๋ฉด์ ๊ด๊ณผ ์ด์ผ๊ธฐํ๋ ๊ฒ ๋ํ ์ค์ํ๋ค.
[ ๊ท๋ชจ ํ์ฅ์ ์ํ ์๊ณ ๋ฆฌ์ฆ: ๋จ๊ณ๋ณ ์ ๊ทผ๋ฒ ]
๋จ์ํ ์์คํ ์ ํ ๋ถ๋ถ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํด ๋ณด๋ผ๋ ์์ฒญ์ ๋ฐ์ ์๋ ์๋๋ฐ, ๋ฐ๋์ ๊ท๋ชจ ํ์ฅ์ฑ์ ์ ๊ฒฝ ์จ์ผ ํ๋ค.
1๋จ๊ณ: ์ง๋ฌธํ๋ผ
๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ดํดํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ง๋ฌธํด์ผ ํ๋ค. ๋ฉด์ ๊ด์ด ์ธ๊ธํ์ง ์์ ์ธ๋ถ์ฌํญ์ด ์์ ์ ์๋ค.
2๋จ๊ณ: ํ์ค์ ์ ์ฝ์ ๋ฌด์ํ๋ผ
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ด ์๊ณ , ์ปดํจํฐ ํ ๋์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค ์ฒ๋ฆฌํ ์ ์๋ค ๊ฐ์ ํ์ ๋ ์ด์ ๋ํ ๋๋ต์ด ์ค์ ์ ๋ต์ ๋ํ ์ค๊ณฝ์ ๊ทธ๋ฆฌ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
3๋จ๊ณ: ํ์ค๋ก ๋์์ค๋ผ
์๋ ๋ฌธ์ ๋ก ๋์์ ์ปดํจํฐ ํ ๋์ ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ ์ผ๋ง๋ ๋๋์ง, ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ์ชผ๊ฐฐ์ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ง ์๊ฐํด ๋ด๋ผ.
์ฌ๊ธฐ์ ๋ฐ์ํ ์ ์๋ ํํ ๋ฌธ์ ๋
- ์ด๋ค ๋ ผ๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋ ๊ฒ์ธ๊ฐ
- ํน์ ์ปดํจํฐ๊ฐ ์ด๋ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์ฌ์ฉํ๋์ง ์ด๋ป๊ฒ ์ ์ ์์ ๊ฒ์ธ๊ฐ
๋ฑ์ด ์๋ค.
4๋จ๊ณ: ๋ฌธ์ ๋ฅผ ํ์ด๋ผ
๋ฐ๊ฒฌํ ๋ฌธ์ ์ ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ์๊ฐํด ๋ด์ผ ํ๋ค. ์ํฉ์ ๋ฐ๋ผ ๋ฌธ์ ์ ์์ฒด๋ฅผ ์์ ํ ํด๊ฒฐํ ์๋ ์๊ณ , ๊ทธ ์์ค์ ์ํ์ํค๋ ๋ฐ ๊ทธ์น ์๋ ์๋ค.
์ํ์ ์ ๊ทผ๋ฒ(iterative approach)์ด ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉํ ์ ๊ทผ๋ฒ์ด๋ค. 3๋จ๊ณ์์ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ๊ทธ๋ฌ๋ฉด ๊ทธ ๋ฌธ์ ๋ฅผ ๋ค์ ํด๊ฒฐํด ๋๊ฐ๊ณ ์ด๋ฅผ ๋ฐ๋ณตํ๋ ์์ ์ ๋ปํ๋ค.
๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ ํ ์ ์๋ ๋ฅ๋ ฅ์ ์ ์ฆํ๋ ค๋ ๋ชฉ์ ์ด๋ค. ๋ต์์์ ์๋ก์ด ๋ฌธ์ ์ ์ ๋ง๋ค์ด ๋ด๋ ๋ฐฉ๋ฒ์ด ๊ทธ ๋ฅ๋ ฅ์ ์ ์ฆํ ์ ์๋ ๊ต์ฅํ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
[ ์์คํ ์ค๊ณ์ ํต์ฌ ๊ฐ๋ ]
์ํ์ (horizontal) vs ์์ง์ (vertical) ๊ท๋ชจ ํ์ฅ
์์ง์ ๊ท๋ชจ ํ์ฅ(vertical scaling)
: ํน์ ๋ ธ๋์ ์์(resource)์ ์์ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ.
ex) ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ฌ ์๋ฒ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํฅ์์ํด
์์ง์ ๊ท๋ชจ ํ์ฅ(horizontal scaling)
: ๋ ธ๋์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ
ex) ์๋ฒ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์๋ฒ ํ ๋๊ฐ ๋ค๋ค์ผ ํ๋ ๋ถํ(load)๋ฅผ ์ค์ผ ์ ์์
์์ง์ ๊ท๋ชจ ํ์ฅ์ด ์ผ๋ฐ์ ์ผ๋ก ์ํ์ ๊ท๋ชจ ํ์ฅ๋ณด๋ค ์ฝ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ํน์ ๋์คํฌ์ ๊ฐ์ ๊ฒ๋ง ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก ์ ํ์ ์ด๋ค.
์๋ฒ ๋ถํ ๋ถ์ฐ ์ฅ์น(load balancer)
์ผ๋ฐ์ ์ผ๋ก ๊ท๋ชจ ํ์ฅ์ฑ์ด ์๋ ์น์ฌ์ดํธ์ ํ๋ก ํธ์๋ ๋ถ๋ถ์ ์๋ฒ ๋ถํ ๋ถ์ฐ ์ฅ์น(load balancer)๋ฅผ ํตํด ์ ๊ณต๋๋ค.
์๋ฒ์ ๊ฑธ๋ฆฌ๋ ๋ถํ๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๊ท ์ผํ๊ฒ ๋ถ์ฐ์ํฌ ์ ์๊ณ ์๋ฒ ํ ๋ ๋๋ฌธ์ ์ ์ฒด ์์คํ ์ด ์ฃฝ๊ฑฐ๋ ๋ค์ด๋๋ ์ํฉ์ ๋ฐฉ์งํ ์ ์๋ค.
์ด๋ ๊ฒ ํ๊ธฐ ์ํด์ ์๋ฒ ์ฌ๋ฌ ๋๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋๊ฐ์ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ๋คํธ์ํฌ๋ฅผ ๊ตฌํํด๋์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์ ๊ทํ(denormalization)์ NoSQL
์กฐ์ธ ์ฐ์ฐ์ ์์คํ ์ด ์ปค์ง์๋ก ๊ต์ฅํ ๋๋ ค์ง๋ค.
- ์ญ์ ๊ทํ(denormalization)
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ถ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํด์ ์ฝ๊ธฐ ์ฐ์ฐ ์๋๋ฅผ ํฅ์์ํจ ๊ฒ
ex) ํ ํ๋ก์ ํธ๊ฐ ์ฌ๋ฌ ๊ณผ์ ๋ฅผ ์ํํ๋๋ก ์ค๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ๊ณผ์ ์ ๋ณด๋ฅผ ํจ๊ป ์๊ณ ์ถ์ ๊ฒฝ์ฐ์ ๋ ํ ์ด๋ธ์ ์กฐ์ธํ๊ธฐ๋ณด๋จ ์ ์ด์ ๊ณผ์ ํ ์ด๋ธ์ ํ๋ก์ ํธ ์ด๋ฆ ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ์ ์ฅํด ๋์ผ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์์ ์ ์ํํ ์ ์๋ค.
NoSQL
์กฐ์ธ ์ฐ์ฐ ์์ฒด๋ฅผ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ์๋ฃ๋ฅผ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด ๋๋๋ฐ, ์ด ๋ฐฉ์์ด ๊ท๋ชจ ํ์ฅ์ฑ์ ์ข๋๋ก ์ค๊ณ๋์ด ์๋ค.
[ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ (์ค๋ฉ) ]
- ์ค๋ฉ(sharding)
๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ปดํจํฐ์ ๋๋ ์ ์ฅํ๋ ๋์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ปดํจํฐ์ ์ ์ฅ๋์ด ์๋์ง ์ ์ ์๋ ๋ฐฉ์
์์ง์ ๋ถํ (vertical partitioning)
: ์๋ฃ์ ํน์ฑ๋ณ๋ก ๋ถํ ํ๋ ๋ฐฉ์
ex) ์์ ๋คํธ์ํฌ๋ฅผ ๋ง๋ค ๋, ๊ฐ์ธ ์ ๋ณด์ ๊ด๋ จ๋ ํน์ ๋ฉ์์ง์ ๊ด๋ จ๋ ๋ถ๋ถ๊ณผ ๊ฐ์ด ๊ทธ ํน์ฑ์ ๋ฐ๋ผ ์๋ฃ ๋ถํ
- ๋จ์
- ํน์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์ผ์ ์์ค ์ด์์ผ๋ก ์ปค์ง๋ฉด, (๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํด์) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ถํ ํด์ผ ํ ์๋ ์๋ค
ํค ํน์ ํด์ ๊ธฐ๋ฐ ๋ถํ
: mod(key, n)์ ๊ฐ์ ์ด์ฉํด์ N๊ฐ์ ์๋ฒ์ ๋ถํ ์ ์ฅ
- ๋ฌธ์ ์
- ์๋ฒ์ ๊ฐ์๊ฐ ๊ณ ์ ๋์ด ์์ด์ผ ํ๋ค. ์๋ฒ๋ฅผ ์๋ก ์ถ๊ฐํ ๋๋ง๋ค ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฌ๋ถ๋ฐฐ ํด์ผํ๋๋ฐ, ๊ต์ฅํ ๋น์ฉ์ด ํฐ ์์ ์ด๋ค.
๋๋ ํฐ๋ฆฌ ๊ธฐ๋ฐ ๋ถํ
๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ ์กฐํ ํ ์ด๋ธ์ ์ ์งํ๋ ๋ฐฉ๋ฒ
- ์ฅ์
- ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค
- ๋จ์
- ์กฐํ ํ ์ด๋ธ์ด ๋จ์ผ ์ฅ์ ์ง์ ์ด ๋ ์ ์์
- ์ง์์ ์ผ๋ก ํ ์ด๋ธ์ ์ฝ๋ ํ์๊ฐ ์ ์ฒด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์
์บ์ฑ(caching)
์ธ๋ฉ๋ชจ๋ฆฌ(in-memory) ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๊ต์ฅํ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์
ํค-๊ฐ(key-value)์ ์์ผ๋ก ๊ฐ๋ ๊ฐ๋จํ ๊ตฌ์กฐ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ด์ ์๋ฆฌ์ก๊ณ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฃ๋ฅผ ์์ฒญํ๋ฉด ์บ์ ๋จผ์ ํ์ธ
- ์บ์๊ฐ ํด๋น ํค ๊ฐ์ ๊ฐ๊ณ ์์ง ์์ผ๋ฉด ๊ทธ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ดํ
์บ์ํ ๋
- ์ฟผ๋ฆฌ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑ
- ํน์ ๊ฐ์ฒด๋ฅผ ์บ์์ ์ ์ฅ
ex) ์น ํ์ด์ง์ ์ด๋ค ๋ถ๋ถ์ ๋ ๋๋งํ ๊ฒฐ๊ณผ๋ ํน์ ๋ธ๋ก๊ทธ์ ์ฌ๋ผ์จ ์ต๊ทผ ํฌ์คํ ๋ฆฌ์คํธ
๋น๋๊ธฐ์ ์ฒ๋ฆฌ & ํ
์๋๊ฐ ๋๋ฆฐ ์ฐ์ฐ์ ๋น๋๊ธฐ์(asynchronous)๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ์ฐ์ฐ์ด ๋๋๊ธฐ๊น์ง ํ์ผ์์ด ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ด ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ํด ๋์ ์๋ ์๋ค.
ex) ๊ณง ๊ฐฑ์ ํด์ผ ํ ์น์ฌ์ดํธ์ ๊ฐ ๋ถ๋ถ๋ค์ด ํ์ ๋ค์ด์๋ค.
์ด ์น์ฌ์ดํธ๊ฐ ์ด๋ค ํฌ๋ผ์ด๋ผ๊ณ ํ์ ๋, ํ์ ๋ค์ด ์๋ ์์ ์ค ํ๋๋ ์๋ง๋ ๊ฐ์ฅ ์ต๊ทผ์ ๊ธ๋ค๊ณผ ๋ช ๊ฐ์ง ์ฝ๋ฉํธ๋ฅผ ๋ณด์ฌ ์ฃผ๋ ํ์ด์ง๋ฅผ ๋ค์ ๋ง๋ค์ด ์ฃผ๋ ์ผ์ด๋ค. ์ด ๊ฒฝ์ฐ ์ต๊ทผ ๊ธ ๋ฆฌ์คํธ๊ฐ ์ฝ๊ฐ ์ค๋๋์ด ๋ ์ ํํ๋๋ผ๋ ๊ด์ฐฎ๋ค.
โ ์๋ก์ด ์ฝ๋ฉํธ ํ๋ ๋๋ฌธ์ ์บ์ ๋ฏธ์ค(cache miss)๊ฐ ๋๊ณ , ๊ทธ๋์ ์น์ฌ์ดํธ๋ฅผ ์๋ก ๋ถ๋ฌ์ค๋๋ผ ์๋๊ฐ ๋๋ ค์ง๋ ๊ฒ๋ณด๋ค๋ ๊ฒฐ๊ณผ๊ฐ ๋ ์ ํํ ๊ฒ์ด ๋ซ๋ค.
๋คํธ์ํฌ ์ฑ๋ฅ ์ฒ๋
๋คํธ์ํฌ์ ์ฑ๋ฅ์ ์ธก์ ํ ๋ ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฒ๋(metric)์ ๋ค์๊ณผ ๊ฐ๋ค.
๋์ญํญ(bandwidth)
: ๋จ์ ์๊ฐ์ ์ ์กํ ์ ์๋ ๋ฐ์ดํฐ์ ์ต๋์น
- ๋ณดํต ์ด๋น ๋ช ๋นํธ(bit)๋ฅผ ๋ณด๋ผ ์ ์๋์ง๋ก ๊ณ์ฐ
- ํน์ ์ด๋น ๋ช ๊ธฐ๊ฐ๋ฐ์ดํธ(gigabyte)๋ฅผ ๋ณด๋ผ ์ ์๋์ง๋ก ๊ณ์ฐ
์ฒ๋ฆฌ๋(throughput)
: ๋จ์ ์๊ฐ์ ์ค์ ๋ก ์ ์ก๋ ๋ฐ์ดํฐ์ ์
์ง์ฐ์๋(latency)
: ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ
์ฆ, ๋ฐ์ก์(sender)๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ์์ ๋ถํฐ ์์ ์(receiver)๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์์ ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ
ex) ๊ณต์ฅ์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ๋ฌผํ ์ด๋
โ ์ง์ฐ์๋: ๋ฌผํ ํ๋๊ฐ ํ ์ง์ ์์ ๋ค๋ฅธ ์ง์ ๊น์ง ์ฎ๊ฒจ์ง๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ
โ ์ฒ๋ฆฌ๋: ๋จ์ ์๊ฐ์ ์ฎ๊ฒจ์ง ๋ฌผํ์ ๊ฐ์
์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ํญ์ ๋ํ๋ค๊ณ ์ง์ฐ ์๋๊ฐ ๋ฌ๋ผ์ง์ง ์๋๋ค. ํ์ง๋ง ์ฒ๋ฆฌ๋๊ณผ ๋์ญํญ์ ๋ฐ๊พผ๋ค๋ฉด ๋ฌ๋ผ์ง ์ ์๋ค.
โ ๋ ๋ง์ ๋ฌผํ์ ๋ฒจํธ ์์ ์ฌ๋ ค๋์ผ๋ฉด ์ฃผ์ด์ง ๋จ์ ์๊ฐ์ ๋ ๋ง์ ๋ฌผํ์ ์ฒ๋ฆฌํ ๊ฒ์ด๋ค.
- ๋ฒจํธ์ ๊ธธ์ด๋ฅผ ์ค์ด๋ฉด ์ง์ฐ ์๋ ๋ํ ์ค์ด๋ค ๊ฒ์ด๋ค. ํ์ง๋ง ๋์ญํญ์ด๋ ์ฒ๋ฆฌ๋์ด ๋ฌ๋ผ์ง์ง ์๋๋ค.
์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค๋ฉด ์ธ ๊ฐ์ง ์ฒ๋ ๋ชจ๋ ๋ฐ๊ฟ ์ ์๋ค.
๊ณต์ฅ์์ ๋ฌผํ ์ฎ๊ธฐ๋ ์๋๊ฐ ์ค์ด๋ค ๊ฒ์ด๊ณ , ๋จ์ ์๊ฐ์ ์ฎ๊ธธ ์ ์๋ ๋ฌผํ์ ๊ฐ์ ๋ํ ๋์ด๋ ๊ฒ์ด๋ค.
๋์ญํญ = ์ต์์ ์กฐ๊ฑด์์ ๋จ์ ์๊ฐ์ ์ ์กํ ์ ์๋ ๋ฌผํ์ ๊ฐ์
์ฒ๋ฆฌ๋ = ์ค์ ์ํฉ์์(๊ธฐ๊ณ๊ฐ ์ ๋์ ์ํ๋ ๊ฒฝ์ฐ์๋) ๋จ์ ์๊ฐ์ ์ ์ก๋ ๋ฌผํ์ ๊ฐ์
์ง์ฐ์๊ฐ์ ๋ฌด์๋๊ธฐ ์ฝ์ง๋ง ํน์ ์ํฉ์์ ๊ต์ฅํ ์ค์ํ ์ญํ ์ ํ๋ค
ex) ์จ๋ผ์ธ ๊ฒ์
์จ๋ผ์ธ ์คํฌ์ธ ๊ฒ์์ ํ๊ณ ์์ ๋ ์๋๋ฐฉ์ ์์ง์์ ๋ฐ๋ก๋ฐ๋ก ๋ณผ ์ ์๋ค๋ฉด ๊ฒ์์ ์ด๋ป๊ฒ ์งํํ ์ ์๊ฒ ๋๊ฐ?
์ฒ๋ฆฌ๋์ ์์ถ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ป๊ฒ๋ ํฅ์์ํฌ ์ ์์ง๋ง, ์ง์ฐ ์๊ฐ์ ๋จ์ถ์ํค๊ธฐ ์ํด ํ ์ ์๋ ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ง ์๋ค.
MapReduce
โ ๊ตฌ๊ธ๊ณผ ๊ด๋ จ ์๋๋ฐ, ํ์ฌ๋ ๊ตฌ๊ธ์ ๊ตญํ๋์ง ์๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค.
MapReduce ํ๋ก๊ทธ๋จ์ ๋ณดํต ๊ต์ฅํ ์ปค๋ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋งต(Map) ๋จ๊ณ์ ๋ฆฌ๋์ค(Reduce) ๋จ๊ณ๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ๋๋จธ์ง ๋ถ๋ถ์ ์์คํ ์ด ์์์ ์ฒ๋ฆฌํ ๊ฒ์ด๋ค.
- Map์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ค <key, value>์์ ๋ฐํํ๋ค.
- Reduce๋ ํค(key), ๊ทธ๋ฆฌ๊ณ ํค์ ๊ด๋ จ๋ ๊ฐ(value)๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ค ๋๋ฆ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น ํ ์๋ก์ด ํค์ ๊ฐ์ ๋ฐํํ๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ ๋ค๋ฅธ Reduce ํ๋ก๊ทธ๋จ์ ๋๊ธธ ์๋ ์๋ค.
MapReduce๋ ๋ง์ ๊ณผ์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์ปค๋ค๋ ๋ฐ์ดํฐ์ ๋ํด์๋ ๊ท๋ชจ ํ์ฅ์ด ์ฌ์์ง๋ค.
[ ์์คํ ์ค๊ณ ์ ๊ณ ๋ คํ ์ ]
์คํจ(Failures)
: ์์คํ ์ ์ด๋ค ๋ถ๋ถ์ด๋ ์คํจ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ๊ฐ ๋ถ๋ถ์ด ์คํจํ์ ๋๋ฅผ ๋๋นํ ๋๋น์ฑ ์ ์ค๋นํด์ผ ํ๋ค.
๊ฐ์ฉ์ฑ(availability) ๋ฐ ์ ๋ขฐ์ฑ(relliability)
: ๊ฐ์ฉ์ฑ - ์ฌ์ฉ ๊ฐ๋ฅํ ์์คํ ์ ์๊ฐ์ ๋ฐฑ๋ถ์จ๋ก ๋ํ๋ธ ๊ฒ ์ ๋ขฐ์ฑ - ํน์ ๋จ์ ์๊ฐ์ ์์คํ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ฅ
์ฝ๊ธฐ ์ค์ฌ vs ์ฐ๊ธฐ ์ค์ฌ
: ์ฝ๋ ์ฐ์ฐ์ด ๋ง์์ง ์๋๋ฉด ์ฐ๋ ์ฐ์ฐ์ด ๋ง์์ง์ ๋ฐ๋ผ ์ค๊ณ ๋ฐฉ์์ด ๋ฌ๋ผ์ง ์ ์๋ค. โ ์ฐ๋ ์ฐ์ฐ์ด ๋ง๋ค๋ฉด ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์๊ฐ โ ์ฝ๋ ์ฐ์ฐ์ด ๋ง๋ค๋ฉด ์บ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์๊ฐ
๋ณด์(security)
: ๋ณด์ ์ํ์ ์์คํ ์ ์์ฒญ๋ ํด๋ฅผ ๊ฐํ ์ ์๋ค. ํด๋น ์์คํ ์ด ์ง๋ฉดํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ํด ์๊ฐํด๋ณด๊ณ ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ป๊ฒ ์์คํ ์ ์ค๊ณํ ์ง ์๊ฐํด์ผ ํ๋ค.
[ โ์๋ฒฝํโ ์์คํ ์ ์๋ค ]
TinyURL, ๊ตฌ๊ธ ๋งต์ค, ๋ค๋ฅธ ์ด๋ค ์์คํ ์ ๋ํด์๋ ์๋ฒฝํ๊ฒ ๋์ํ๋ ์์คํ ์ค๊ณ๋ ์กด์ฌํ์ง ์๋๋ค. ๋ชจ๋ ์์คํ ์ ์ฅ๋จ์ ์ด ์กด์ฌํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐ์์ ๋
- ์ฌ๋ก๋ฅผ ์ ์ดํดํ๊ณ
- ๋ฌธ์ ์ ๋ฒ์๋ฅผ ์ค์ ํ๊ณ
- ํฉ๋ฆฌ์ ์ธ ๊ฐ์ ์ ์ธ์ด ๋ค
๋ช ํํ๊ฒ ์ค๊ณํ ์์คํ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
[ ์ฐ์ต ๋ฌธ์ ]
์๋ฐฑ๋ง ๊ฐ์ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋, ํน์ ๋จ์ด ๋ฆฌ์คํธ๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ๋ค.
๋จ์ด๊ฐ ๋ฑ์ฅํ๋ ์์๋ ์ค์ํ์ง ์์ง๋ง, ํด๋น ๋จ์ด๊ฐ ์๋ฒฝํ๊ฒ ๋ํ๋์ผ ํ๋ค. ์ฆ, โbookkeeperโ๋ผ๋ ๋จ์ด์ โbookโ์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋๊ธด ํ์ง๋ง ํด๋น ๋ฌธ์๊ฐ โbookโ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ก ๋ํ๋์๋ ์๋๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ๋ฌธ์๋ฅผ ์ฐพ๋ ํ์๋ฅผ ํ ๋ฒ๋ง ํ ๊ฒ์ธ์ง findWords๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ ๊ฒ์ธ์ง ์๊ณ ์์ด์ผ ํ๋ค. ์ฌ๊ธฐ์๋ findWords๋ฅผ ๊ฐ์ ๋ฌธ์ ์งํฉ์ ๋ํด ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํ์. ๋ฐ๋ผ์ ์ฝ๊ฐ์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ๋ค์ด๊ฐ๋ ๊ด์ฐฎ๋ค.
1๋จ๊ณ
์ฐ์ ๋ฌธ์๊ฐ ๊ฒจ์ฐ ์์ญ ๊ฐ ์์ ๋๋ฅผ ๊ฐ์ ํ๋ค.
์ด๋ด ๊ฒฝ์ฐ์ findWords๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ๊ฐ?
ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ๋ชจ๋ ๋ฌธ์์ ๋ํ ํด์ํ ์ด๋ธ์ ๋ง๋๋ ๊ฒ์ด๋ค. ํด์ํ ์ด๋ธ์ ๋จ์ด์ ํด๋น ๋จ์ด๋ฅผ ํฌํจํ๋ ๋ฌธ์ ๋ฆฌ์คํธ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
1
2
"books" -> {doc2, doc3, doc6, doc8}
"many" -> {doc1, doc3, doc7, doc8, doc9}
โmany booksโ๋ฅผ ํ์ํ๋ ค๋ฉด, ๋จ์ํ โbooksโ์ โmanyโ์ ๊ต์งํฉ์ ๊ตฌํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด [doc3, doc8]์ ๊ตฌํ ์ ์๋ค.
2๋จ๊ณ
๋ฌธ์์ ๊ฐ์๊ฐ ์๋ฐฑ๋ง ๊ฐ๋ก ๋์ด๋๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๋ฌธ์๋ฅผ ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ก ๋๋ ์ ๋ณด๋ด์ผ ํ ๊ฒ์ด๋ค. ๋ํ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ์์ธ(๋จ์ด์ ์๋ ์ถํ ๋น๋ ๋ฑ) ๋๋ฌธ์ ํด์ํ ์ด๋ธ์กฐ์ฐจ๋ ํ ์ปดํจํฐ์ ์จ์ ํ ๋ณด๊ดํ ์ ์์ ์ ์๋ค. ์ค์ ๋ก ํด์ํ ์ด๋ธ๋ ๋ถํ ํด์ ์ ์ฅํด์ผ ํ๋ ์ํฉ์ด ๋ฒ์ด์ก๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ฐ์ดํฐ๋ฅผ ๋๋๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์ฌํญ๋ค์ ๊ณ ๋ฏผํด์ผ ํ๋ค.
- ํด์ํ ์ด๋ธ์ ์ด๋ป๊ฒ ๋ถํ ํ ๊ฒ์ธ๊ฐ? ํค์๋์ ๋ฐ๋ผ ๋๋ ์ ์๋ค. ์ด๋, ์ด๋ค ๋จ์ด์ ๋ํ ๋ฌธ์ ๋ชฉ๋ก์ ์ปดํจํฐ ํ ๋์ ์จ์ ํ ์ ์ฅ๋ ๊ฒ์ด๋ค. ํน์ ๋ฌธ์์ ๋ฐ๋ผ ๋๋ ์๋ ์๋ค. ์ฆ, ์ ์ฒด ๋ฌธ์ ์งํฉ ๊ฐ์ด๋ฐ ํน์ ํ ๋ถ๋ถ์งํฉ์ ๋ํ ํด์ํ ์ด๋ธ๋ง ํ ์ปดํจํฐ์ ๋๋ ๊ฒ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด, ์ด๋ค ์ปดํจํฐ์์๋ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ทธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ฎ๊ฒจ์ผ ํ ์ ์๋ค. ์ด ๊ณผ์ ์ ์ด๋ป๊ฒ ์ ์ํ ์ ์์๊น? ํด์ํ ์ด๋ธ์ ๋ฌธ์์ ๋ฐ๋ผ ๋๋๊ธฐ๋ก ํ๋ค๋ฉด ์ด ๊ณผ์ ์ด ๋ถํ์ํ ์๋ ์๋ค๋ ์ ์ ์ ์ํ๋ค.
- ์ด๋ค ์ปดํจํฐ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ณด๊ด๋์ด ์๋์ง ์ ์ ์์ด์ผ ํ๋ค. ์ด ์กฐํ ํ ์ด๋ธ์ ํํ๋? ์กฐํ ํ ์ด๋ธ์ ์ด๋ ๋์ด์ผ ํ๊ฒ ๋๊ฐ?
์ฌ๊ธฐ์๋ ์ธ ๊ฐ์ง ์ฌํญ๋ง ์ธ๊ธํ์ง๋ง, ์ด๋ณด๋ค ๋ ๋ง์ ์๋ ์๋ค.
3๋จ๊ณ
์ด์ ๊ฐ ๋ฌธ์ ์ ๋ค์ ๋ํ ํด๋ฒ์ ์ฐพ์์ผ ํ๋ค.
ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํค์๋๋ฅผ ์ํ๋ฒณ ์์์ ๋ฐ๋ผ ๋ถํ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ํ ์ปดํจํฐ๊ฐ ํน์ ํ ๋ฒ์์ ๋จ์ด๋ค๋ง(๊ฐ๋ น โafterโ๋ถํฐ โappleโ๊น์ง) ํต์ ํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
ํค์๋๋ฅผ ์ํ๋ฒณ ์์๋ก ๋๋ฉด์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค. ์ฉ๋์ด ๊ฝ ์ฐจ๋ฉด, ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ฎ๊ฒจ ๊ฐ์ผ ํ๋ค.
- ์ฅ์
- ์กฐํ ํ ์ด๋ธ์ ์๊ณ ๋จ์ํ๊ฒ ๋ง๋ค ์ ์๋ค.(๊ฐ์ ๋ฒ์๋ง ๋ช ์ํ๋ฉด ๋๊ธฐ ๋๋ฌธ)
- ๊ฐ ์ปดํจํฐ์ ์กฐํ ํ ์ด๋ธ์ ๋ณต์ฌ๋ณธ์ ์ ์ฅํ ์ ์๋ค.
- ๋จ์
- ์๋ก์ด ๋ฌธ์๋ ๋จ์ด๊ฐ ์ถ๊ฐ๋๋ฉด ํค์๋๋ฅผ ๊ต์ฅํ ๋ง์ด ์ด๋์์ผ์ผ ํ ์๋ ์๋ค.
ํน์ ํ ๋ฌธ์์ด ์งํฉ์ ํฌํจํ๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฐ์ ํด๋น ๋ฌธ์์ด์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์ ๊ฐ ์ปดํจํฐ์ ๊ทธ์ค ์ผ๋ถ์ ํด๋นํ๋ ๋ฌธ์์ด๋ค์ ์ฐพ์ผ๋ผ๋ ์์ฒญ์ ๋ณด๋ด๋ฉด ๋๋ค. ๊ฐ๋ น ๋ฌธ์์ด ๋ฆฌ์คํธ๊ฐ โafter builds boat amaze bananaโ์ ๊ฐ์ด ์ฃผ์ด์ก๋ค๋ฉด, ์ฒซ ๋ฒ์งธ ์ปดํจํฐ์๋ {โafterโ, โamazeโ}์ ๋ํ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
์ฒซ ๋ฒ์งธ ์ปดํจํฐ๋ โafterโ์ โamazeโ๋ฅผ ํฌํจํ๋ ๋ฌธ์๋ค์ ๊ต์งํฉ์ ๊ตฌํ์ฌ ๋ฐํํ๋ค. ์ธ ๋ฒ์งธ ์ปดํจํฐ๋ {โbananaโ, โboatโ, โbuildsโ}์ ๋ํด ๊ฐ์ ์์ ์ ์ํํ๋ค.
๋ง์ง๋ง์ผ๋ก, ์ด๋ฐ์ ์ ์ฒด ์์ฒญ์ ๋ณด๋๋ ์ปดํจํฐ๋ ์ฒซ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ ์ปดํจํฐ๋ก๋ถํฐ ๋ฐ์ ๊ฒฐ๊ณผ์ ๊ต์งํฉ์ ๊ตฌํ๋ค.
์ด ์ ์ฐจ๋ฅผ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๊ทธ๋ ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.