์ธ์์๋ ์๋ง์ ์ ํ์ด์ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์์ง๋ง, ๋๋ถ๋ถ์ ์คํจํ์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ๋ ๋ ๊ทผ๋ณธ์ ์ธ ๊ฒ, ํ๋ฆด ์ ์๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํฉ๋๋ค.
๋๋๋ก ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด์ ํผ๋์ ๋๋๋๋ค. ํผ๋์ ์๊ฐ๊ณผ ๋น์ฉ์ ์ด๋ํฉ๋๋ค. ํผ๋์ ๋์ ์ธ์ง ๋ถํ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ๋์ ์ธ์ง ๋ถํ๋ ํ๋ คํ๊ณ ์ถ์์ ์ธ ๊ฐ๋ ์ด ์๋๋ผ ๊ทผ๋ณธ์ ์ธ ์ธ๊ฐ์ ์ ์ฝ์ ๋๋ค. ์์ ์์ ์กด์ฌ๊ฐ ์๋๋ผ ์ค์ ๋ก ์กด์ฌํ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ๋๋ ์ ์๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๊ฐ๋ณด๋ค ์ฝ๊ณ ์ดํดํ๋ ๋ฐ ํจ์ฌ ๋ ๋ง์ ์๊ฐ์ ์๋นํ๋ฏ๋ก, ์ฝ๋์ ๊ณผ๋ํ ์ธ์ง ๋ถํ๋ฅผ ์ฌ๊ณ ์์ง๋ ์์์ง ๋์์์ด ์๋ฌธํด์ผ ํฉ๋๋ค.
์ธ์ง ๋ถํ๋ ๊ฐ๋ฐ์๊ฐ ์์ ์ ์๋ฃํ๊ธฐ ์ํด ์๊ฐํด์ผ ํ๋ ์์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋ ๋ณ์ ๊ฐ, ์ ์ด ํ๋ฆ ๋ ผ๋ฆฌ, ํธ์ถ ์์์ ๊ฐ์ ๊ฒ๋ค์ ๋จธ๋ฆฟ์์ ๋ฃ์ต๋๋ค. ํ๊ท ์ ์ธ ์ฌ๋์ ์์ ๊ธฐ์ต์ ๋๋ต 4๊ฐ์ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ด์ ์ ์์ต๋๋ค. ์ธ์ง ๋ถํ๊ฐ ์์ ๊ธฐ์ต์ ์๊ณ๊ฐ์ ๋๋ฌํ๋ฉด ๋ด์ฉ์ ์ดํดํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค.
์์ ํ ๋ฏ์ ํ๋ก์ ํธ์ ์์ ์์ฒญ์ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ ๋ง ๋๋ํ ๊ฐ๋ฐ์๊ฐ ์ด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ค๊ณ ๋ค์์ต๋๋ค. ์๋ง์ ๋ฉ์ง ์ํคํ ์ฒ, ํ๋ คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ํํ๋ ๊ธฐ์ ์ด ์ฌ์ฉ๋์์ต๋๋ค. ๋ค์ ๋งํด, ์์ฑ์๊ฐ ์ฐ๋ฆฌ์๊ฒ ๋์ ์ธ์ง ๋ถํ๋ฅผ ์๊ฒจ์ค ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ํ๋ก์ ํธ์์ ์ธ์ง ๋ถํ๋ฅผ ์ต๋ํ ์ค์ฌ์ผ ํฉ๋๋ค.
๋ด์ฌ์ ์ธ์ง ๋ถํ - ์์ ์์ฒด์ ๊ณ ์ ํ ์ด๋ ค์์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์ค์ผ ์ ์์ผ๋ฉฐ, ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํต์ฌ์ ์์ต๋๋ค.
์ธ์ฌ์ ์ธ์ง ๋ถํ - ์ ๋ณด๊ฐ ์ ์๋๋ ๋ฐฉ์์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ๋๋ํ ์์ฑ์์ ๊ธฐํ๊ณผ ๊ฐ์ด ์์ ๊ณผ ์ง์ ๊ด๋ จ ์๋ ์์ธ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ์ด ์ธ์ฌ์ ์ธ์ง ๋ถํ์ ์ด์ ์ ๋ง์ถ ๊ฒ์ ๋๋ค.
์ธ์ฌ์ ์ธ์ง ๋ถํ์ ๊ตฌ์ฒด์ ์ธ ์ค์ ์ฌ๋ก๋ก ๋ฐ๋ก ๋์ด๊ฐ ๋ณด๊ฒ ์ต๋๋ค.
์ธ์ง ๋ถํ ์์ค์ ๋ค์๊ณผ ๊ฐ์ด ํํํฉ๋๋ค:
๐ง : ์๋ก์ด ์์
๊ธฐ์ต, ์ธ์ง
๋ถํ ์์
๐ง ++: ์์
๊ธฐ์ต์ ๋ ๊ฐ์ง
์ฌ์ค, ์ธ์ง ๋ถํ ์ฆ๊ฐ
๐คฏ: ์ธ์ง ๊ณผ๋ถํ, 4๊ฐ์ง ์ด์์ ์ฌ์ค
์ธ๊ฐ์ ๋๋ ํจ์ฌ ๋ ๋ณต์กํ๊ณ ๋ฏธ์ง์ ์์ญ์ด์ง๋ง, ์ด ๊ธ์์๋ ์ด ๋จ์ํ๋ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
if val > someConstant // ๐ง +
&& (condition2 || condition3) // ๐ง +++, ์ด์ ์กฐ๊ฑด์ ์ฐธ์ด์ด์ผ ํ๊ณ , c2 ๋๋ c3 ์ค ํ๋๋ ์ฐธ์ด์ด์ผ ํจ
&& (condition4 && !condition5) { // ๐คฏ, ์ด ์์ ์์ ์ฐ๋ฆฌ๋ ํผ๋์ ๋น ์ง
...
}์๋ฏธ ์๋ ์ด๋ฆ์ ๊ฐ์ง ์ค๊ฐ ๋ณ์๋ฅผ ๋์ ํฉ๋๋ค.
isValid = val > someConstant
isAllowed = condition2 || condition3
isSecure = condition4 && !condition5
// ๐ง , ์กฐ๊ฑด์ ๊ธฐ์ตํ ํ์๊ฐ ์์, ์ค๋ช
์ ์ธ ๋ณ์๊ฐ ์์
if isValid && isAllowed && isSecure {
...
}if isValid { // ๐ง +, ์ ํจํ ์
๋ ฅ์๋ง ์ค์ฒฉ๋ ์ฝ๋ ์ ์ฉ
if isSecure { // ๐ง ++, ์ ํจํ๊ณ ์์ ํ ์
๋ ฅ์ ๋ํด์๋ง ์์
์ํ
stuff // ๐ง +++
}
}์กฐ๊ธฐ ๋ฐํ๊ณผ ๋น๊ตํด ๋ณด์ธ์.
if !isValid
return
if !isSecure
return
// ๐ง , ์ด์ ๋ฐํ์ ์ ๊ฒฝ ์ฐ์ง ์์, ์ฌ๊ธฐ๊น์ง ์๋ค๋ฉด ๋ชจ๋ ๊ฒ์ด ์ข์
stuff // ๐ง +์ฐ๋ฆฌ๋ ํ๋ณตํ ๊ฒฝ๋ก์๋ง ์ง์คํ ์ ์์ผ๋ฏ๋ก, ์จ๊ฐ ์ข ๋ฅ์ ์ ์ ์กฐ๊ฑด์ผ๋ก๋ถํฐ ์์ ๊ธฐ์ต์ ํด๋ฐฉ์ํฌ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ช ๊ฐ์ง ์ฌํญ์ ๋ณ๊ฒฝํด ๋ฌ๋ผ๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค: ๐ง
AdminController extends UserController extends GuestController extends BaseController
์, ๊ธฐ๋ฅ์ ์ผ๋ถ๊ฐ BaseController์ ์๊ตฐ์, ํ๋ฒ ๋ด
์๋ค: ๐ง +
๊ธฐ๋ณธ์ ์ธ ์ญํ ๋ฉ์ปค๋์ฆ์ GuestController์ ๋์
๋์์ต๋๋ค: ๐ง ++
UserController์์ ์ผ๋ถ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค: ๐ง +++
๋๋์ด AdminController์
๋๋ค, ์ฝ๋ฉํฉ์๋ค! ๐ง ++++
์, ์ ๊น, AdminController๋ฅผ ํ์ฅํ๋ SuperuserController๊ฐ ์์ต๋๋ค. AdminController๋ฅผ ์์ ํ๋ฉด ์์๋ ํด๋์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๋จผ์ ์ฐ๋ฆฌ๋ SuperuserController๋ฅผ ์ดํด๋ด์ผ ํฉ๋๋ค: ๐คฏ
์์๋ณด๋ค๋ ํฉ์ฑ์ ์ ํธํ์ธ์. ์์ธํ ๋ด์ฉ์ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ์ด๋ฏธ ๋ง์ ์๋ฃ๊ฐ ์์ต๋๋ค.
๋๋ฌด ๋ง์ ์์ ๋ฉ์๋, ํด๋์ค ๋๋ ๋ชจ๋ (Too many small methods, classes or modules)
์ด ๋งฅ๋ฝ์์ ๋ฉ์๋, ํด๋์ค, ๋ชจ๋์ ์๋ก ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"๋ฉ์๋๋ 15์ค ๋ฏธ๋ง์ด์ด์ผ ํ๋ค" ๋๋ "ํด๋์ค๋ ์์์ผ ํ๋ค"์ ๊ฐ์ ๋งํธ๋ผ๋ ๋ค์ ์๋ชป๋ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
๊น์ ๋ชจ๋ - ๊ฐ๋จํ ์ธํฐํ์ด์ค, ๋ณต์กํ ๊ธฐ๋ฅ
์์ ๋ชจ๋ - ์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ์์ ๊ธฐ๋ฅ์ ๋นํด ์๋์ ์ผ๋ก ๋ณต์กํจ
์์ ๋ชจ๋์ด ๋๋ฌด ๋ง์ผ๋ฉด ํ๋ก์ ํธ๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฐ ๋ชจ๋์ ์ฑ
์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ํธ ์์ฉ๊น์ง ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค. ์์ ๋ชจ๋์ ๋ชฉ์ ์ ์ดํดํ๋ ค๋ฉด ๋จผ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ชจ๋์ ๊ธฐ๋ฅ์ ์ดํด๋ด์ผ ํฉ๋๋ค. ๐คฏ
์ ๋ณด ์๋์ ๊ฐ์ฅ ์ค์ํ๋ฉฐ, ์์ ๋ชจ๋์์๋ ๋ณต์ก์ฑ์ ๊ทธ๋ค์ง ๋ง์ด ์จ๊ธฐ์ง ์์ต๋๋ค.
ํ์๋ ๋ ๊ฐ์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋ ๋ค ์ฝ 5,000์ค์ ์ฝ๋์ ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ ํธ์๋ 80๊ฐ์ ์์ ํด๋์ค๊ฐ ์๊ณ , ๋ ๋ฒ์งธ ํ๋ก์ ํธ์๋ 7๊ฐ์ ๊น์ ํด๋์ค๋ง ์์ต๋๋ค. 1๋ ๋ฐ ๋์ ์ด ๋ ํ๋ก์ ํธ๋ฅผ ์ ์ง๋ณด์ํ์ง ์์์ต๋๋ค.
๋์์์ ๋ณด๋ ์ฒซ ๋ฒ์งธ ํ๋ก์ ํธ์์ 80๊ฐ ํด๋์ค ๊ฐ์ ๋ชจ๋ ์ํธ ์์ฉ์ ํธ๋ ๊ฒ์ด ๊ทน๋๋ก ์ด๋ ต๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฝ๋ฉ์ ์์ํ๊ธฐ ์ ์ ์์ฒญ๋ ์์ ์ธ์ง ๋ถํ๋ฅผ ๋ค์ ๊ตฌ์ถํด์ผ ํ์ต๋๋ค. ๋ฐ๋ฉด์ ๋ ๋ฒ์งธ ํ๋ก์ ํธ๋ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๋ช ๊ฐ์ ๊น์ ํด๋์ค๋ง ์์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์์์ต๋๋ค.
์ต๊ณ ์ ๊ตฌ์ฑ ์์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด์๋ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๊ฒ์ ๋๋ค. ์กด K. ์์ฐ์คํฐํ์ฐํธ
์ ๋์ค I/O์ ์ธํฐํ์ด์ค๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ค์ฏ ๊ฐ์ง ๊ธฐ๋ณธ ํธ์ถ๋ง ์์ต๋๋ค.
open(path, flags, permissions)
read(fd, buffer, count)
write(fd, buffer, count)
lseek(fd, offset, referencePosition)
close(fd)์ด ์ธํฐํ์ด์ค์ ์ต์ ๊ตฌํ์๋ ์์ญ๋ง ์ค์ ์ฝ๋๊ฐ ์์ต๋๋ค. ๋ง์ ๋ณต์ก์ฑ์ด ๋ด๋ถ์ ์ผ๋ก ์จ๊ฒจ์ ธ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋จํ ์ธํฐํ์ด์ค ๋๋ถ์ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค.
์ด ๊น์ ๋ชจ๋ ์์ ๋ ์กด K. ์์ฐ์คํฐํ์ฐํธ์ ์ ์ ์ํํธ์จ์ด ์ค๊ณ ์ฒ ํ์์ ๊ฐ์ ธ์์ต๋๋ค. ์ด ์ฑ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ณต์ก์ฑ์ ๋ณธ์ง์ ๋ค๋ฃฐ ๋ฟ๋ง ์๋๋ผ, ํ๋์ค์ ์ํฅ๋ ฅ ์๋ ๋ ผ๋ฌธ ๋ชจ๋๋ก ์์คํ ์ ๋ถํดํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ธฐ์ค์ ๊ดํ์ฌ์ ๋ํ ๊ฐ์ฅ ํ๋ฅญํ ํด์์ ๋ด๊ณ ์์ต๋๋ค. ๋ ๋ค ํ๋ ์์ ๋๋ค. ๊ธฐํ ๊ด๋ จ ์๋ฃ: ์ํํธ์จ์ด ์ค๊ณ ์ฒ ํ ๋ ํด๋ฆฐ ์ฝ๋, ํด๋ฆฐ ์ฝ๋๋ฅผ ์ถ์ฒํ๋ ๊ฒ์ ๋ฉ์ถฐ์ผ ํ ๋์ผ์ง๋ ๋ชจ๋ฆ ๋๋ค, ์์ ํจ์๋ ํด๋กญ๋ค๊ณ ์ฌ๊ฒจ์ง๋๋ค.
P.S. ๋ง์ฝ ์ด ๊ธ์ด ๋๋ฌด ๋ง์ ์ฑ ์์ ๊ฐ์ง ๋น๋ํ ๊ฐ ์ค๋ธ์ ํธ๋ฅผ ์ง์งํ๋ค๊ณ ์๊ฐํ๋ค๋ฉด, ์๋ชป๋ ์๊ฐ์ ๋๋ค.
๋๋ฌด๋ ์์ฃผ, ์ฐ๋ฆฌ๋ "๋ชจ๋์ ํ ๊ฐ์ง, ์ค์ง ํ ๊ฐ์ง ์ผ์๋ง ์ฑ ์์ ธ์ผ ํ๋ค"๋ ๋ชจํธํ ์์น์ ๋ฐ๋ผ ์๋ง์ ์์ ๋ชจ๋์ ๋ง๋ค๊ฒ ๋ฉ๋๋ค. ์ด ํ๋ฆฟํ ํ ๊ฐ์ง๋ ๋ฌด์์ผ๊น์? ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํํ๋ ๊ฒ์ ํ ๊ฐ์ง ์ผ์ด์ฃ , ๊ทธ๋ ์ฃ ? ๊ทธ๋ฌ๋ MetricsProviderFactoryFactory๋ ๊ด์ฐฎ์ ๋ณด์ ๋๋ค. ๊ทธ๋ฐ ํด๋์ค์ ์ด๋ฆ๊ณผ ์ธํฐํ์ด์ค๋ ์ ์ฒด ๊ตฌํ๋ณด๋ค ์ ์ ์ ์ผ๋ก ๋ ๋ถ๋ด์ค๋ฌ์ด๋ฐ, ๊ทธ๊ฒ ๋ฌด์จ ์ถ์ํ์ผ๊น์? ๋ญ๊ฐ ์๋ชป๋์์ต๋๋ค.
๊ทธ๋ฐ ์์ ๊ตฌ์ฑ ์์ ์ฌ์ด๋ฅผ ์ค๊ฐ๋ ๊ฒ์ ์ ์ ์ ์ผ๋ก ์ง์น๋ฉฐ, ์ ํ์ ์ฌ๊ณ ๊ฐ ์ฐ๋ฆฌ ์ธ๊ฐ์๊ฒ ๋ ์์ฐ์ค๋ฝ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ฉ์์ ์ดํด ๊ด๊ณ์๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ์์คํ ์ ๋ณ๊ฒฝํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์๊ฒ ์ฑ ์์ด ์์ต๋๋ค.
๋ชจ๋์ ํ ๋ช , ์ค์ง ํ ๋ช ์ ์ฌ์ฉ์ ๋๋ ์ดํด ๊ด๊ณ์์๊ฒ๋ง ์ฑ ์์ ธ์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ถ์ ๋๋ค. ๊ฐ๋จํ ๋งํด, ํ ๊ณณ์์ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์์ผฐ๋๋ฐ ๋ ๋ช ์ ๋ค๋ฅธ ๋น์ฆ๋์ค ๋ด๋น์๊ฐ ๋ถํํ๋ฌ ์จ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์์น์ ์๋ฐํ ๊ฒ์ ๋๋ค. ์ด๋ ๋ชจ๋์์ ์ํํ๋ ์์ ์ ์์๋ ์๋ฌด๋ฐ ๊ด๋ จ์ด ์์ต๋๋ค.
ํ์ง๋ง ์ง๊ธ๋ ์ด ๊ท์น์ ๋๋ณด๋ค ์ค์ด ๋ง์ ์ ์์ต๋๋ค. ์ด ์์น์ ๊ฐ์ธ์ ์๋งํผ์ด๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ดํด๋ ์ ์์ต๋๋ค. ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ฌํ ์์น ์ ์ฉ์ด ์ผ๋ง๋ ๋ง์ ์ธ์ง ๋ถํ๋ฅผ ๋ฐ์์ํค๋์ง ์ดํด๋ณด๋ ๊ฒ์ ๋๋ค. ํ ๊ณณ์์์ ๋ณ๊ฒฝ์ด ์ฌ๋ฌ ๋ค๋ฅธ ๋น์ฆ๋์ค ํ๋ฆ์ ๊ฑธ์ณ ์ฐ์ ๋ฐ์์ ์ผ์ผํฌ ์ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ์ ์ ์ ์ ์ผ๋ก ๋ถ๋ด์ค๋ฝ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ํต์ฌ์ ๋๋ค. ๋ฐฐ์ธ ๋งํ ํ๋ คํ ์ฉ์ด๋ ์์ต๋๋ค.
์ด ์๊ณ ๊น์ ๋ชจ๋ ์์น์ ๊ท๋ชจ์ ๊ตฌ์ ๋ฐ์ง ์์ผ๋ฉฐ, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋๋ฌด ๋ง์ ์์ ๋ง์ดํฌ๋ก์๋น์ค๋ ์๋ฌด๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค. ์ ๊ณ๋ ๋ค์ "๋งคํฌ๋ก์๋น์ค", ์ฆ ๊ทธ๋ ๊ฒ ์์ง ์์(=๊น์) ์๋น์ค๋ก ํฅํ๊ณ ์์ต๋๋ค. ๊ฐ์ฅ ์ต์ ์ด๊ณ ์์ ํ๊ธฐ ์ด๋ ค์ด ํ์ ์ค ํ๋๋ ์์ ๋ถ์ฐ ๋ชจ๋๋ฆฌ์ค์ธ๋ฐ, ์ด๋ ์ข ์ข ์ด๋ฌํ ์ง๋์น๊ฒ ์ธ๋ถํ๋ ์์ ๋ถ๋ฆฌ์ ๊ฒฐ๊ณผ์ ๋๋ค.
ํ์๋ ํ๋ 5๋ช
์ ๊ฐ๋ฐ์๋ก ๊ตฌ์ฑ๋ ํ์ด 17(!)๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋์
ํ ์คํํธ์
์ ์ปจ์คํ
์ ํ ์ ์ด ์์ต๋๋ค. ์ด ํ์ ์์ ๋ณด๋ค 10๊ฐ์ ๋ฆ์๊ณ ๊ณต๊ฐ ์์ ์ ๊ฐ๊น์ ๋ณด์ด์ง ์์์ต๋๋ค. ์๋ก์ด ์๊ตฌ ์ฌํญ์ด ์์๋๋ง๋ค 4๊ฐ ์ด์์ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ณ๊ฒฝ์ผ๋ก ์ด์ด์ก์ต๋๋ค. ํตํฉ๋ ์์ญ์์์ ์ง๋จ ๋์ด๋๋ ๊ธ์ฆํ์ต๋๋ค. ๊ณต๊ฐ ์์ ๊ณผ ์ธ์ง ๋ถํ ๋ชจ๋ ์ฉ๋ฉํ ์ ์์ ์ ๋๋ก ๋์์ต๋๋ค. ๐คฏ
์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ์๋ก์ด ์์คํ ์ ๋ถํ์ค์ฑ์ ์ ๊ทผํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๊น์? ์ฒ์๋ถํฐ ์ฌ๋ฐ๋ฅธ ๋ ผ๋ฆฌ์ ๊ฒฝ๊ณ๋ฅผ ๋์ถํ๋ ๊ฒ์ ์์ฒญ๋๊ฒ ์ด๋ ต์ต๋๋ค. ํต์ฌ์ ์ฑ ์๊ฐ ์๊ฒ ๊ธฐ๋ค๋ฆด ์ ์๋ ํ ๊ฒฐ์ ์ ์ต๋ํ ๋ฆ์ถ๋ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ๊ทธ๋๊ฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ํ์ํ ๊ฐ์ฅ ๋ง์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฒ์๋ถํฐ ๋คํธ์ํฌ ๊ณ์ธต์ ๋์ ํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ์ค๊ณ ๊ฒฐ์ ์ ์ฒ์๋ถํฐ ๋๋๋ฆฌ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ํ์ ์ ์ผํ ์ ๋นํ๋ "FAANG ๊ธฐ์ ๋ค์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๊ฐ ํจ๊ณผ์ ์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๋ค"๋ ๊ฒ์ด์์ต๋๋ค. ์ด๋ด์, ํฐ ๊ฟ์ ๊ทธ๋ง ๊พธ์ธ์.
ํ๋จ๋ฐ์-ํ ๋ฐ์ฆ ๋ ผ์์ ๋ฆฌ๋ ์ค์ ๋ชจ๋๋ฆฌ์ ์ค๊ณ๊ฐ ๊ฒฐํจ์ด ์๊ณ ๊ตฌ์์ด๋ฉฐ, ๋ง์ดํฌ๋ก์ปค๋ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ์ต๋๋ค. ์ค์ ๋ก ๋ง์ดํฌ๋ก์ปค๋ ์ค๊ณ๋ "์ด๋ก ์ ์ด๊ณ ๋ฏธ์ ์ธ" ๊ด์ ์์ ์ฐ์ํด ๋ณด์์ต๋๋ค. ์ค์ฉ์ ์ธ ์ธก๋ฉด์์๋ 30๋ ์ด ์ง๋ ์ง๊ธ๋ ๋ง์ดํฌ๋ก์ปค๋ ๊ธฐ๋ฐ GNU Hurd๋ ์ฌ์ ํ ๊ฐ๋ฐ ์ค์ด๋ฉฐ, ๋ชจ๋๋ฆฌ์ ๋ฆฌ๋ ์ค๋ ์ด๋์๋ ์์ต๋๋ค. ์ด ํ์ด์ง๋ ๋ฆฌ๋ ์ค๋ก ๊ตฌ๋๋๋ฉฐ, ์ฌ๋ฌ๋ถ์ ์ค๋งํธ ์ฃผ์ ์๋ ๋ฆฌ๋ ์ค๋ก ๊ตฌ๋๋ฉ๋๋ค. ๋ชจ๋๋ฆฌ์ ๋ฆฌ๋ ์ค๋ก ๋ง์ด์ฃ .
์ง์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ๋ชจ๋์ ๊ฐ์ถ ์ ๋ง๋ค์ด์ง ๋ชจ๋๋ฆฌ์ค๋ ์ข ์ข ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค๋ณด๋ค ํจ์ฌ ์ ์ฐํฉ๋๋ค. ๋ํ ์ ์ง ๊ด๋ฆฌ์ ํจ์ฌ ์ ์ ์ธ์ง์ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ๊ฐ๋ฐํ ํ์ฅ๊ณผ ๊ฐ์ด ๋ณ๋์ ๋ฐฐํฌ ํ์์ฑ์ด ์ค์ํด์ง ๋๋ง ๋ชจ๋, ์ฆ ๋ฏธ๋์ ๋ง์ดํฌ๋ก์๋น์ค ์ฌ์ด์ ๋คํธ์ํฌ ๊ณ์ธต์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ข์ํ๋ ์ธ์ด์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ์๋ ๋ ํฅ๋ถ์ ๋๋๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ฐฐ์ฐ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
๊ธฐ๋ฅ์ด ๋ง์ผ๋ฉด ํ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ช ์ค์ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ 30๋ถ์ ๋ณด๋ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ์๊ฐ ์๋ชจ๋ ๋ญ๋น์ ๋๋ค. ํ์ง๋ง ๋ ๋์ ๊ฒ์ ๋์ค์ ๋์์์ ๋ ๊ทธ ์ฌ๊ณ ๊ณผ์ ์ ๋ค์ ๋ง๋ค์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค!
์ด ๋ณต์กํ ํ๋ก๊ทธ๋จ์ ์ดํดํด์ผ ํ ๋ฟ๋ง ์๋๋ผ, ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ์ค์์ ์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ์ ์ ๊ทผํ๊ธฐ๋ก ๊ฒฐ์ ํ๋์ง ์ดํดํด์ผ ํฉ๋๋ค. ๐คฏ
์ด๋ฐ ์ฃผ์ฅ์ ๋ค๋ฆ ์๋ ๋กญ ํ์ดํฌ๊ฐ ํ ๊ฒ์ ๋๋ค.
์ ํ์ ์๋ฅผ ์ ํํ์ฌ ์ธ์ง ๋ถํ๋ฅผ ์ค์ด์ญ์์ค.
์ธ์ด ๊ธฐ๋ฅ์ ์๋ก ์ง๊ตํ๋ ํ ๊ด์ฐฎ์ต๋๋ค.
C++ ๊ฒฝ๋ ฅ 20๋ ์์ง๋์ด์ ์๊ฐ โญ๏ธ
๋ฉฐ์น ์ RSS ๋ฆฌ๋๋ฅผ ๋ณด๋ค๊ฐ "C++" ํ๊ทธ ์๋์ ์ฝ์ง ์์ ๊ธฐ์ฌ๊ฐ 300๊ฐ ์ ๋ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ง๋ ์ฌ๋ฆ ์ดํ๋ก ์ธ์ด์ ๋ํ ๊ธฐ์ฌ๋ฅผ ๋จ ํ ํธ๋ ์ฝ์ง ์์๋๋ฐ, ๊ธฐ๋ถ์ด ์์ฃผ ์ข์ต๋๋ค!
์ ๋ ์ง๊ธ๊น์ง 20๋ ๋์ C++๋ฅผ ์ฌ์ฉํด ์๋๋ฐ, ์ด๋ ์ ์ธ์์ ๊ฑฐ์ 3๋ถ์ 2์ ํด๋นํฉ๋๋ค. ์ ๊ฒฝํ์ ๋๋ถ๋ถ์ ์ธ์ด์ ๊ฐ์ฅ ์ด๋์ด ๊ตฌ์(์: ์จ๊ฐ ์ข ๋ฅ์ ์ ์๋์ง ์์ ๋์)์ ๋ค๋ฃจ๋ ๋ฐ ์์ต๋๋ค. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝํ์ด ์๋๋ฉฐ, ์ง๊ธ ๋ชจ๋ ๊ฒ์ ๋ฒ๋ฆฌ๋ ๊ฒ์ ์ข ์๋ฆ ๋ผ์น๋ ์ผ์ ๋๋ค.
์์ํด ๋ณด์ธ์.
|| ํ ํฐ์ requires ((!P<T> || !Q<T>))์ requires (!(P<T> || Q<T>))์์ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์ ์ฝ ์กฐ๊ฑด ๋
ผ๋ฆฌํฉ์ด๊ณ , ๋ ๋ฒ์งธ๋ ์์ ์ ๋
ผ๋ฆฌ OR ์ฐ์ฐ์์ด๋ฉฐ, ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค.๋จ์ํ ์ ํ์ ๋ํ ๊ณต๊ฐ์ ํ ๋นํ๊ณ ๊ฑฐ๊ธฐ์ ๋ฐ์ดํธ ์งํฉ์
memcpyํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถ๊ฐ์ ์ธ ๋
ธ๋ ฅ ์์ด ๊ฐ์ฒด์ ์๋ช
์ ์์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ C++20 ์ด์ ์ ๊ฒฝ์ฐ์์ต๋๋ค. C++20์์ ์์ ๋์์ง๋ง ์ธ์ด์ ์ธ์ง ๋ถํ๋ ์ฆ๊ฐํ์ ๋ฟ์
๋๋ค.๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์ธ์ง ๋ถํ๋ ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์์ต๋๋ค. ๋ฌด์์ด ์์ ๋์๋์ง, ์ธ์ ์์ ๋์๋์ง, ์ด์ ์๋ ์ด๋ ๋์ง ์์์ผ ํฉ๋๋ค. ์ ๋ ๊ฒฐ๊ตญ ์ ๋ฌธ๊ฐ์ ๋๋ค. ๋ฌผ๋ก C++๋ ๋ ๊ฑฐ์ ์ง์์ด ํ๋ฅญํ๋ฉฐ, ์ด๋ ๋ํ ์ฌ๋ฌ๋ถ์ด ๊ทธ ๋ ๊ฑฐ์์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ง๋๋ฌ ๋๋ฃ๊ฐ C++03์ ์ผ๋ถ ๋์์ ๋ํด ์ ์๊ฒ ๋ฌผ์์ต๋๋ค.
๐คฏ์ด๊ธฐํ ๋ฐฉ๋ฒ์๋ 20๊ฐ์ง๊ฐ ์์์ต๋๋ค. ๊ท ์ผ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด์ 21๊ฐ์ง ์ด๊ธฐํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ธฐํ ๋ชฉ๋ก์์ ์์ฑ์๋ฅผ ์ ํํ๋ ๊ท์น์ ๊ธฐ์ตํ๋ ์ฌ๋์ด ์์ต๋๊น? ์ ๋ณด ์์ค์ด ๊ฐ์ฅ ์ ์ ์์์ ๋ณํ์ ๊ดํ ๊ฒ์ด์ง๋ง, ๋ง์ฝ ๊ฐ์ด ์ ์ ์ผ๋ก ์๋ ค์ ธ ์๋ค๋ฉด...
๐คฏ์ด๋ ๊ฒ ์ฆ๊ฐ๋ ์ธ์ง ๋ถํ๋ ๋น๋ฉดํ ๋น์ฆ๋์ค ์์ ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋๋ค. ๋๋ฉ์ธ์ ๋ณธ์ง์ ์ธ ๋ณต์ก์ฑ์ด ์๋๋๋ค. ๋จ์ง ์ญ์ฌ์ ์ธ ์ด์ ๋ก ์กด์ฌํ๋ ๊ฒ์ ๋๋ค(์ธ์ฌ์ ์ธ์ง ๋ถํ).
๋ช ๊ฐ์ง ๊ท์น์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฝ๋ ์ค์ด ๋ช ํํ์ง ์๊ณ ํ์ค์ ๊ธฐ์ตํด์ผ ํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ์์ฑํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐธ๊ณ ๋ก ํ์ค์ ์ฝ 1500ํ์ด์ง์ ๋๋ค.
๊ฒฐ์ฝ C++๋ฅผ ๋น๋ํ๋ ค๋ ๊ฒ์ด ์๋๋๋ค. ์ ๋ ์ด ์ธ์ด๋ฅผ ์ฌ๋ํฉ๋๋ค. ๋จ์ง ์ง๊ธ์ ์ง์ณค์ ๋ฟ์ ๋๋ค.
\n
0xd34df00d๋ ์์ฑ ๊ฐ์ฌํฉ๋๋ค.
\n๋ฐฑ์๋์์๋ ๋ค์์ ๋ฐํํฉ๋๋ค.
401 ๋ง๋ฃ๋ JWT ํ ํฐ
403 ์ ๊ทผ ๊ถํ ๋ถ์กฑ
418 ์ฐจ๋จ๋ ์ฌ์ฉ์
ํ๋ก ํธ์๋ ์์ง๋์ด๋ ๋ฐฑ์๋ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ค์ ์ผ์์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ธ์ง ๋ถํ๋ฅผ ๋์ ๋ง๋ค์ด์ผ ํฉ๋๋ค:
401์ ๋ง๋ฃ๋ JWT ํ ํฐ์
๋๋ค // ๐ง +, ๊ทธ๋ฅ ์ผ์์ ์ผ๋ก ๊ธฐ์ตํ์ธ์
403์ ์ ๊ทผ ๊ถํ ๋ถ์กฑ์
๋๋ค // ๐ง ++
418์ ์ฐจ๋จ๋ ์ฌ์ฉ์์
๋๋ค // ๐ง +++
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ (๋ฐ๋ผ๊ฑด๋) ์ซ์ ์ํ -> ์๋ฏธ ์ฌ์ ์ ๋ง๋ค์ด ํ์ ๊ธฐ์ฌ์๋ค์ด ์ด ๋งคํ์ ๋์์ ๋ค์ ๋ง๋ค ํ์๊ฐ ์๋๋ก ํ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์ QA ์์ง๋์ด๊ฐ ๋ฑ์ฅํฉ๋๋ค.
"์ด๋ด์, 403 ์ํ๋ฅผ ๋ฐ์๋๋ฐ, ํ ํฐ์ด ๋ง๋ฃ๋ ๊ฑด๊ฐ์, ์๋๋ฉด ์ ๊ทผ ๊ถํ์ด ๋ถ์กฑํ ๊ฑด๊ฐ์?"\nQA ์์ง๋์ด๋ ๋ฐฑ์๋ ์์ง๋์ด๊ฐ ํ๋ ๋ง๋ค์๋ ์ธ์ง ๋ถํ๋ฅผ ๋จผ์ ๋ค์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ
์คํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
์ ์ด๋ฌํ ์ฌ์ฉ์ ์ง์ ๋งคํ์ ์์ ๊ธฐ์ต์ ๋ด์๋์ด์ผ ํ ๊น์? ๋น์ฆ๋์ค ์ธ๋ถ ์ ๋ณด๋ฅผ HTTP ์ ์ก ํ๋กํ ์ฝ์์ ์ถ์ํํ๊ณ ์๋ต ๋ณธ๋ฌธ์ ์ง์ ์์ฒด ์ค๋ช ์ฝ๋๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
{
"code": "jwt_has_expired"
}ํ๋ก ํธ์๋ ์ธก์ ์ธ์ง ๋ถํ: ๐ง (์๋ก์, ๋ง์์ ๋ด์๋ ์ฌ์ค ์์)
QA ์ธก์ ์ธ์ง ๋ถํ: ๐ง
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋์์๋ ๋ชจ๋ ์ข ๋ฅ์ ์ซ์ ์ํ์ ๋์ผํ ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. ์์ฒด ์ค๋ช ๋ฌธ์์ด์ ์ ํธํ์ธ์. ํ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด 640K ์ปดํจํฐ ์๋์ ์ด๊ณ ์์ง ์์ต๋๋ค.
์ฌ๋๋ค์
401๊ณผ403์ฌ์ด์์ ๋ ผ์ํ๋ฉฐ ์์ ์ ๋ฉํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฝ๋๋ค. ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ๋ค์ด์ค๊ณ ์๋ก์ด ๊ฐ๋ฐ์๋ ๊ทธ ์ฌ๊ณ ๊ณผ์ ์ ๋ค์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ฝ๋์ ๋ํ "์ด์ "(ADR)๋ฅผ ๋ฌธ์ํํ์ฌ ์๋ก์ด ์ฌ๋์ด ๋ด๋ฆฐ ๊ฒฐ์ ์ ์ดํดํ๋๋ก ๋์ธ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ์๋ ์๋ฌด ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ค๋ฅ๋ฅผ ์ฌ์ฉ์ ๊ด๋ จ ๋๋ ์๋ฒ ๊ด๋ จ์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ง๋ง, ๊ทธ ์ธ์๋ ์ํฉ์ด ๋ค์ ๋ชจํธํฉ๋๋ค.
์ถ์ : "์ธ์ฆ"๊ณผ "๊ถํ ๋ถ์ฌ"๋ฅผ ๊ตฌ๋ณํ๋ ๊ฒ์ ์ข ์ข ์ ์ ์ ์ผ๋ก ๋ถ๋ด์ค๋ฝ์ต๋๋ค. ์ธ์ง ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํด "๋ก๊ทธ์ธ" ๋ฐ "๊ถํ"๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ณตํ์ง ๋ง์ญ์์ค(Do not repeat yourself) - DRY ์์น์ ์ํํธ์จ์ด ์์ง๋์ด๋ก์ ๋ฐฐ์ฐ๋ ์ฒซ ๋ฒ์งธ ์์น ์ค ํ๋์ ๋๋ค. ์ฐ๋ฆฌ ์์ ์๊ฒ ๋๋ฌด ๊น์ด ๋ด์ฌ๋์ด ์์ด์ ๋ช ์ค์ ์ถ๊ฐ ์ฝ๋๋ฅผ ์ฐธ์ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ข๊ณ ๊ทผ๋ณธ์ ์ธ ๊ท์น์ด์ง๋ง, ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ๊ฐ๋นํ ์ ์๋ ์ธ์ง ๋ถํ๋ก ์ด์ด์ง๋๋ค.
์์ฆ ๋ชจ๋ ์ฌ๋์ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํฉ๋๋ค. ์ข
์ข
์ด๋ฌํ ๊ตฌ์ฑ ์์๋ ๋ณ๋์ ์๋น์ค๋ฅผ ๋ํ๋ด๋ ์ฌ๋ฌ ์ฝ๋๋ฒ ์ด์ค์ ๋ถ์ฐ๋์ด ์์ต๋๋ค. ๋ชจ๋ ๋ฐ๋ณต์ ์ ๊ฑฐํ๋ ค๊ณ ๋
ธ๋ ฅํ๋ฉด ๊ด๋ จ ์๋ ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ธด๋ฐํ ๊ฒฐํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ ๋ถ๋ถ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๊ด๋ จ ์์ด ๋ณด์ด๋ ์์ญ์ ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ํ ์ ์ฒด ์์คํ
์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๊ฐ๋ณ ๊ตฌ์ฑ ์์๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ์์ ํ๋ ๊ธฐ๋ฅ์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๐คฏ
์ฌ์ค, ๋์ผํ ๋ฌธ์ ๋ ๋จ์ผ ๋ชจ๋ ๋ด์์๋ ๋ฐ์ํฉ๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ์ค์ ๋ก ์กด์ฌํ์ง ์์ ์ ์๋ ์ธ์๋ ์ ์ฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณตํต ๊ธฐ๋ฅ์ ๋๋ฌด ์ผ์ฐ ์ถ์ถํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์์ ํ๊ฑฐ๋ ํ์ฅํ๊ธฐ ์ด๋ ค์ด ๋ถํ์ํ ์ถ์ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋กญ ํ์ดํฌ๋ ์ด๋ ๊ฒ ๋งํ์ต๋๋ค.
์ฝ๊ฐ์ ๋ณต์ฌ๋ณธ์ด ์ฝ๊ฐ์ ์ข ์์ฑ๋ณด๋ค ๋ซ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ์ง ์์ผ๋ ค๋ ์ ํน์ด ๋๋ฌด ๊ฐํด์, ์ค์ค๋ก ์ฝ๊ฒ ์์ฑํ ์ ์๋ ์์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํฌ๊ณ ๋ฌด๊ฑฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ฌ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค.
๋ชจ๋ ์ข ์์ฑ์ ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ๋๋ค. ๊ฐ์ ธ์จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 10๊ฐ ์ด์์ ์คํ ์ถ์ ์์ค์ ์ดํด๋ณด๊ณ ๋ฌด์์ด ์๋ชป๋์๋์ง ์์๋ด๋ ๊ฒ(์๋ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค)์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
ํ๋ ์์ํฌ์๋ ๋ง์ "๋ง๋ฒ"์ด ์์ต๋๋ค. ํ๋ ์์ํฌ์ ๋๋ฌด ๋ง์ด ์์กดํจ์ผ๋ก์จ ํ๋ก์ ํธ๋ ๋ค๊ฐ์ฌ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๊ทธ "๋ง๋ฒ"์ ๋จผ์ ๋ฐฐ์ฐ๋๋ก ๊ฐ์ํฉ๋๋ค. ๋ช ๋ฌ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉฐ์น ๋ง์ MVP๋ฅผ ์ถ์ํ ์ ์์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก๋ ๋ถํ์ํ ๋ณต์ก์ฑ๊ณผ ์ธ์ง ๋ถํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๋ ๋์ ๊ฒ์, ์ด๋ ์์ ์์ ํ๋ ์์ํฌ๊ฐ ์ํคํ
์ฒ์ ๋ง์ง ์๋ ์๋ก์ด ์๊ตฌ ์ฌํญ์ ์ง๋ฉดํ์ ๋ ์ฌ๊ฐํ ์ ์ฝ์ด ๋ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด ์์ ๋ถํฐ ์ฌ๋๋ค์ ํ๋ ์์ํฌ๋ฅผ ํฌํฌํ๊ณ ์์ฒด ์ฌ์ฉ์ ์ง์ ๋ฒ์ ์ ์ ์ง ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์๋ก์ด ์ฌ๋์ด ๊ฐ์น๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๊ตฌ์ถํด์ผ ํ๋ ์ธ์ง ๋ถํ์ ์(์ฆ, ์ด ์ฌ์ฉ์ ์ง์ ํ๋ ์์ํฌ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ)์ ์์ํด ๋ณด์ญ์์ค. ๐คฏ
๊ฒฐ์ฝ ๋ชจ๋ ๊ฒ์ ์ฒ์๋ถํฐ ๋ฐ๋ช ํ๋ผ๊ณ ์ฃผ์ฅํ๋ ๊ฒ์ด ์๋๋๋ค!
์ฐ๋ฆฌ๋ ๋ค์ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ํ๋ ์์ํฌ ๋ด์ ์์ด์๋ ์ ๋๋ฉฐ, ์คํ๋ ค ํ๋ ์์ํฌ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ๋ ์์ํฌ๋ฅผ ํต์ฌ ๋ก์ง ์ธ๋ถ์ ๋์ญ์์ค. ํ๋ ์์ํฌ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ์ฌ์ฉํ์ญ์์ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์๋ก์ด ๊ธฐ์ฌ์๊ฐ ํ๋ ์์ํฌ ๊ด๋ จ ๋ณต์ก์ฑ์ ์ํด๋ฅผ ๊ฑฐ์น ํ์ ์์ด ์ฒซ๋ ๋ถํฐ ๊ฐ์น๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ด๋ฐ ๊ธฐ์ ์ ์ธ ์ฃผ์ ์ ์์ง๋์ด๋ก์์ ํ์คํ ์ค๋ ์ด ์๋ค (certain engineering excitement).
ํ์๋ ์๋
๋์ Hexagonal/Onion ์ํคํ
์ฒ์ ์ด๋ ฌํ ์ง์ง์์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ์๋ ๊ทธ๋ ๊ฒ ํ๋๋ก ๊ถ์ฅํ์ต๋๋ค. ํ์๊ฐ ์ฐธ์ฌํ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ ์ฆ๊ฐํ๊ณ , ํ์ผ ์๋ง ํด๋ ๋ ๋ฐฐ๊ฐ ๋์์ต๋๋ค. ๋ง์น ๋ง์ ์ ์ฐฉ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค. ๋์์์ด ๋ณํํ๋ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ถ์ํ ๊ณ์ธต์ ๊ฑธ์ณ ๋ณ๊ฒฝํด์ผ ํ๊ณ , ๋ชจ๋ ๊ฒ์ด ์ง๋ฃจํด์ก์ต๋๋ค. ๐คฏ
์ถ์ํ๋ ๋ณต์ก์ฑ์ ์จ๊ธฐ๊ธฐ ์ํ ๊ฒ์ด์ง๋ง, ์ฌ๊ธฐ์๋ ๋จ์ง ๊ฐ์ ์ฑ์ ์ถ๊ฐํ ๋ฟ์
๋๋ค. ํธ์ถ์์ ํธ์ถ๋ก ์ด๋ํ์ฌ ์ฝ๊ณ ๋ฌด์์ด ์๋ชป๋์๊ณ ๋ฌด์์ด ๋๋ฝ๋์๋์ง ํ์
ํ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํ ํ์ ์๊ตฌ ์ฌํญ์
๋๋ค. ์ด ์ํคํ
์ฒ์ ๊ณ์ธต ๋ถ๋ฆฌ๋ ์คํจ๊ฐ ๋ฐ์ํ๋ ์ง์ ์ ๋๋ฌํ๊ธฐ ์ํด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋ง์, ์ข
์ข
๋ถ๋ฆฌ๋ ์ถ์ ์ ํ์๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ ์ถ์ ์ ์ ํ๋ ์์
๊ธฐ์ต ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค. ๐คฏ
์ด ์ํคํ ์ฒ๋ ์ฒ์์๋ ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ๋์์ง๋ง, ํ๋ก์ ํธ์ ์ ์ฉํ๋ ค๊ณ ํ ๋๋ง๋ค ๋๋ณด๋ค ์ค์ด ํจ์ฌ ๋ง์์ต๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์ค๋๋ ์์กด์ฑ ์ญ์ ์์น์ ์ํด ๋ชจ๋ ๊ฒ์ ํฌ๊ธฐํ์ต๋๋ค. ๋ฐฐ์ธ ํฌํธ/์ด๋ํฐ ์ฉ์ด๋ ์๊ณ , ๋ถํ์ํ ์ํ์ ์ถ์ํ ๊ณ์ธต๋ ์๊ณ , ์ธ์ฌ์ ์ธ์ง ๋ถํ๋ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ์ธตํ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค๋ฅธ ์ข ์์ฑ์ ์ ์ํ๊ฒ ๊ต์ฒดํ ์ ์๊ฒ ํด์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์ฐฉ๊ฐ์ ๋๋ค. ์คํ ๋ฆฌ์ง๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉฐ, ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ๋ํ ์ผ๋ถ ์ถ์ํ๊ฐ ์๋ค๋ ๊ฒ์ ๊ฑฑ์ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ฅ ์์ ๋ถ๋ถ์ด๋ผ๋ ๊ฒ์ด ๋ถ๋ช ํฉ๋๋ค. ๊ธฐ๊ปํด์ผ ์ถ์ํ๋ ๋ง์ด๊ทธ๋ ์ด์ ์๊ฐ์ ์ฝ 10%๋ฅผ ์ ์ฝํ ์ ์์ง๋ง(์๋ค๋ฉด), ์ง์ง ๊ณ ํต์ ๋ฐ์ดํฐ ๋ชจ๋ธ ๋นํธํ์ฑ, ํต์ ํ๋กํ ์ฝ, ๋ถ์ฐ ์์คํ ๋ฌธ์ ๋ฐ ์์์ ์ธํฐํ์ด์ค์ ์์ต๋๋ค.
API ์ฌ์ฉ์๊ฐ ์ถฉ๋ถํ ๋ง์ผ๋ฉด,\n> ๊ณ์ฝ์์ ๋ฌด์์ ์ฝ์ํ๋ ์๊ด์์ต๋๋ค.\n> ์์คํ ์ ๋ชจ๋ ๊ด์ฐฐ ๊ฐ๋ฅํ ๋์์\n> ๋๊ตฐ๊ฐ์๊ฒ ์์กดํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํ ํ๋ก์ ํธ์์๋ ์คํ ๋ฆฌ์ง ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๊ณ , ์ฝ 10๊ฐ์์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ด์ ์์คํ ์ ๋จ์ผ ์ค๋ ๋์๊ธฐ ๋๋ฌธ์ ๋ ธ์ถ๋ ์ด๋ฒคํธ๋ ์์ฐจ์ ์ด์์ต๋๋ค. ๋ชจ๋ ์์คํ ์ด ๊ด์ฐฐ๋ ํด๋น ๋์์ ์์กดํ์ต๋๋ค. ์ด ๋์์ API ๊ณ์ฝ์ ์ผ๋ถ๊ฐ ์๋์๊ณ ์ฝ๋์ ๋ฐ์๋์ง ์์์ต๋๋ค. ์๋ก์ด ๋ถ์ฐ ์คํ ๋ฆฌ์ง๋ ๊ทธ๋ฌํ ๋ณด์ฅ์ด ์์์ต๋๋ค. ์ด๋ฒคํธ๊ฐ ์์ ์์ด ๋ฐ์ํ์ต๋๋ค. ์ถ์ํ ๋๋ถ์ ์๋ก์ด ์คํ ๋ฆฌ์ง ์ด๋ํฐ๋ฅผ ์ฝ๋ฉํ๋ ๋ฐ ๋ช ์๊ฐ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์์ต๋๋ค. ๋ค์ 10๊ฐ์์ ์์ ์๋ ์ด๋ฒคํธ ๋ฐ ๊ธฐํ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ณด๋์ต๋๋ค. ์ด์ ์ถ์ํ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ํ๊ฒ ๊ต์ฒดํ๋ ๋ฐ ๋์์ด ๋๋ค๊ณ ๋งํ๋ ๊ฒ์ ์ฐ์ค๊ฝ์ค๋ฝ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฏธ๋์ ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋์ง ๋ชปํ๋ค๋ฉด ์ ๊ทธ๋ฌํ ๊ณ์ธตํ ์ํคํ ์ฒ์ ๋ํด ๋์ ์ธ์ง ๋ถํ๋ผ๋ ๋๊ฐ๋ฅผ ์น๋ฌ์ผ ํ ๊น์? ๊ฒ๋ค๊ฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ผ๋ถ ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ๊ต์ฒดํ๋ ๋ฏธ๋๋ ๊ฒฐ์ฝ ์ค์ง ์์ต๋๋ค.
์ด๋ฌํ ์ํคํ ์ฒ๋ ๊ทผ๋ณธ์ ์ธ ๊ฒ์ด ์๋๋ผ ๋ ๊ทผ๋ณธ์ ์ธ ์์น์ ์ฃผ๊ด์ ์ด๊ณ ํธํฅ๋ ๊ฒฐ๊ณผ์ผ ๋ฟ์ ๋๋ค. ์ ๊ทธ๋ฌํ ์ฃผ๊ด์ ์ธ ํด์์ ์์กดํด์ผ ํ ๊น์? ๋์ ๊ทผ๋ณธ์ ์ธ ๊ท์น์ ๋ฐ๋ฅด์ญ์์ค: ์์กด์ฑ ์ญ์ ์์น, ๋จ์ผ ์ง์ค ๊ณต๊ธ์, ์ธ์ง ๋ถํ ๋ฐ ์ ๋ณด ์๋. ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, UI ๋๋ ํ๋ ์์ํฌ์ ๊ฐ์ ํ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ์ธํ๋ผ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ํต์ฌ ๋ก์ง์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์์ด์ผ ํ๋ฉฐ, ๊ทธ๊ฒ์ด ํต์ฌ์ ๋๋ค. ํ ๋ก .
์ํคํ ์ฒ๋ฅผ ์ํด ์ถ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ง ๋ง์ญ์์ค. ์ค์ฉ์ ์ธ ์ด์ ๋ก ์ ๋นํ๋๋ ํ์ฅ ์ง์ ์ด ํ์ํ ๋๋ง๋ค ์ถ๊ฐํ์ญ์์ค.
์ถ์ํ ๊ณ์ธต์ ๊ณต์ง๊ฐ ์๋๋๋ค. ์ ํ๋ ์์ ๊ธฐ์ต์ ๋ด์๋์ด์ผ ํฉ๋๋ค.
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(Domain-driven design)๋ ๋ถ๋ช ํ๋ฅญํ ๊ฐ๋ ๋ค์ด ๋ง์ง๋ง, ์ข ์ข ์คํด๋ฅผ ๋ฐ๊ธฐ๋ ํ๋ค. ์ฌ๋๋ค์ '์ฐ๋ฆฌ๋ DDD ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์ง ๋ค'๊ณ ๋งํ๊ณค ํ๋๋ฐ, ์ด๋ ๋ค์ ์ด์ํ ํํ์ด๋ค. ์๋ํ๋ฉด DDD๋ 'ํด๊ฒฐ ๋ฐฉ๋ฒ(solution space)'์ด ์๋๋ผ '๋ฌธ์ ์์ญ(problem space)'์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋น์ฟผํฐ์ค ์ธ์ด, ๋๋ฉ์ธ, ๊ฒฝ๊ณ ์ปจํ ์คํธ, ์ง๊ณ, ์ด๋ฒคํธ ์คํ ๋ฐ์ ๋ชจ๋ '๋ฌธ์ ์์ญ(problem space)'์ ๊ดํ ๊ฒ์ ๋๋ค. ๋๋ฉ์ธ์ ๋ํ ํต์ฐฐ๋ ฅ์ ๋ฐฐ์ฐ๊ณ ๊ฒฝ๊ณ๋ฅผ ์ถ์ถํ๋ ๋ฐ ๋์์ด ๋๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค. DDD๋ฅผ ํตํด ๊ฐ๋ฐ์, ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ ๋ฐ ๋น์ฆ๋์ค ๋ด๋น์๋ ๋จ์ผํ๊ณ ํต์ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์์ฌ์ํตํ ์ ์์ต๋๋ค. DDD์ ์ด๋ฌํ '๋ฌธ์ ์์ญ(problem space)' ์ธก๋ฉด์ ์ด์ ์ ๋ง์ถ๋ ๋์ ํน์ ํด๋ ๊ตฌ์กฐ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ ๊ธฐํ 'ํด๊ฒฐ ๋ฐฉ๋ฒ(solution space)' ๊ธฐ์ ์ ๊ฐ์กฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๊ฐ์๊ฐ DDD๋ฅผ ํด์ํ๋ ๋ฐฉ์์ ๋
ํนํ๊ณ ์ฃผ๊ด์ ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด, ์ฆ ๋ง์ ์ธ์ฌ์ ์ธ์ง ๋ถํ๋ฅผ ๋ง๋ ๋ค๋ฉด ๋ฏธ๋์ ๊ฐ๋ฐ์๋ ํ๋ฉธํ ๊ฒ์
๋๋ค. ๐คฏ
ํ ํ ํด๋ก์ง๋ ํ ์ ์ฒด์ ๊ฑธ์ณ ์ธ์ง ๋ถํ๋ฅผ ๋ถ์ฐํ๋ ๋ฐ ๋์์ด ๋๋ ํจ์ฌ ๋ ์ข๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ง๋์ด๋ ํ ํ ํด๋ก์ง์ ๋ํด ๋ฐฐ์ด ํ ๋ค์ ์ ์ฌํ ๋ฉํ ๋ชจ๋ธ์ ๊ฐ๋ฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๋ฐ๋ฉด์ DDD๋ 10๋ช ์ ๋ค๋ฅธ ๋ ์์๊ฒ 10๊ฐ์ ๋ค๋ฅธ ๋ฉํ ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๊ณตํต ๊ธฐ๋ฐ์ด ๋๋ ๋์ ๋ถํ์ํ ๋ ผ์์ ์ฅ์ด ๋ฉ๋๋ค.
- ์ฐ๋ฆฌ ์ํคํ ์ฒ๋ ํ์ค CRUD ์ฑ ์ํคํ ์ฒ, Postgres ๊ธฐ๋ฐ Python ๋ชจ๋๋ฆฌ์ค์ ๋๋ค.
- ์ธ์คํ๊ทธ๋จ์ด ๋จ 3๋ช ์ ์์ง๋์ด๋ก 1,400๋ง ์ฌ์ฉ์๊น์ง ํ์ฅํ ๋ฐฉ๋ฒ
- ์ฐ๋ฆฌ๊ฐ "์, ์ด ์ฌ๋๋ค์ ์ ๋ง ๋๋ํ๋ค"๋ผ๊ณ ์๊ฐํ๋ ํ์ฌ๋ค์ ๋๋ถ๋ถ ์คํจํ์ต๋๋ค.
- ์ ์ฒด ์์คํ ์ ์ฐ๊ฒฐํ๋ ํ๋์ ํจ์. ์์คํ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ณ ์ถ๋ค๋ฉด ์ฝ์ด๋ณด์ธ์.
์ด๋ฌํ ์ํคํ ์ฒ๋ ๋งค์ฐ ์ง๋ฃจํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. ๋๊ตฌ๋ ํฐ ์ ์ ์ ๋ ธ๋ ฅ ์์ด ํ์ ํ ์ ์์ต๋๋ค.
์ํคํ ์ฒ ๊ฒํ ์ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ฐธ์ฌ์ํค์ญ์์ค. ๊ทธ๋ค์ ์ ์ ์ ์ผ๋ก ๋ถ๋ด์ค๋ฌ์ด ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ ์ค ๊ฒ์ ๋๋ค.
๋ฌธ์ ๋ ์ต์ํจ์ด ๋จ์ํจ๊ณผ ๊ฐ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ์ต์ํจ๊ณผ ๋จ์ํจ์ ๊ฐ์ ๋๋, ์ฆ ๋ณ๋ค๋ฅธ ์ ์ ์ ๋ ธ๋ ฅ ์์ด ๊ณต๊ฐ์ ์ฝ๊ฒ ์ด๋ํ๋ ๋๋์ ์ฃผ์ง๋ง, ๋งค์ฐ ๋ค๋ฅธ ์ด์ ๋๋ฌธ์ ๋๋ค. ์ฌ์ฉํ๋ ๋ชจ๋ "์๋ฆฌํ"(์ฆ, "์๊ธฐ ๋ง์กฑ์ ์ธ") ๋น๊ด์ฉ์ ํธ๋ฆญ์ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์๊ฒ ํ์ต ํ๋ํฐ๋ฅผ ๋ถ๊ณผํฉ๋๋ค. ์ผ๋จ ๊ทธ ํ์ต์ ๋ง์น๋ฉด ์ฝ๋๋ก ์์ ํ๋ ๊ฒ์ด ๋ ์ด๋ ต๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ด๋ฏธ ์ต์ํ ์ฝ๋๋ฅผ ๋จ์ํํ๋ ๋ฐฉ๋ฒ์ ์ธ์ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ "์ ์ "์ด ๋๋ฌด ์ ๋ํ๋๊ธฐ ์ ์ ์ฝ๋๋ฅผ ๋นํํ๋๋ก ํ๋ ค๋ ์ด์ ์ ๋๋ค!
์ด์ ์์ฑ์๊ฐ ์ด ๊ฑฐ๋ํ ํผ๋์ ํ ๋ฒ์ ๋ง๋ ๊ฒ์ด ์๋๋ผ ํ ๋ฒ์ ์กฐ๊ธ์ฉ ์ ์ง์ ์ผ๋ก ๋ง๋ค์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ ์ด ๋ชจ๋ ๊ฒ์ ํ ๋ฒ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ ์ฒซ ๋ฒ์งธ ์ฌ๋์ ๋๋ค.
์ ์์ ์์ ์ฐธ์ฌ์๋ค์ ์ด๋ ๋ ๊ฑฐ๋ํ WHERE ์ ์ ์๋ฐฑ ์ค์ ์กฐ๊ฑด๋ฌธ์ด ์๋ ๊ด๋ฒ์ํ SQL ์ ์ฅ ํ๋ก์์ ๋ฅผ ๋ณด๊ณ ์์์ต๋๋ค. ๋๊ตฐ๊ฐ ์ด๋ป๊ฒ ์๋ฌด๋ ์ด๋ ๊ฒ ๋๋น ์ง๋๋ก ๋ด๋ฒ๋ ค ๋ ์ ์์๋์ง ๋ฌผ์์ต๋๋ค. ์ ๋ ์ด๋ ๊ฒ ๋งํ์ต๋๋ค. "์กฐ๊ฑด๋ฌธ์ด 2
3๊ฐ๋ฐ์ ์์ ๋๋ ํ๋๋ฅผ ๋ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์กฐ๊ฑด๋ฌธ์ด 2030๊ฐ๊ฐ ๋๋ฉด ํ๋๋ฅผ ๋ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค!"์ฝ๋๋ฒ ์ด์ค์ ์์ฉํ๋ "๋จ์ํํ๋ ํ"์ ๊ฐ๋ฐ์๊ฐ ๋ด๋ฆฌ๋ ์๋์ ์ธ ์ ํ ์ธ์๋ ์์ต๋๋ค. ๋จ์ํ์๋ ๋ ธ๋ ฅ์ด ํ์ํ๋ฉฐ, ์ฌ๋๋ค์ ๋๋ฌด ์์ฃผ ์๋๋ฆ ๋๋ค.
๋ ๋ ธ์ค๋์ ์๊ฒฌ ๊ฐ์ฌํฉ๋๋ค.
ํ๋ก์ ํธ์ ๋ฉํ ๋ชจ๋ธ์ ์ฅ๊ธฐ ๊ธฐ์ต์ ๋ด์ฌํํ๋ค๋ฉด ๋์ ์ธ์ง ๋ถํ๋ฅผ ๊ฒฝํํ์ง ์์ ๊ฒ์ ๋๋ค.
๋ฐฐ์์ผ ํ ๋ฉํ ๋ชจ๋ธ์ด ๋ง์์๋ก ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ๋ฐ ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
ํ๋ก์ ํธ์ ์๋ก์ด ์ฌ๋์ ์จ๋ณด๋ฉํ ๋ ๊ทธ๋ค์ด ๊ฒช๋ ํผ๋์ ์์ ์ธก์ ํด ๋ณด์ญ์์ค(ํ์ด ํ๋ก๊ทธ๋๋ฐ์ด ๋์์ด ๋ ์ ์์ต๋๋ค). ๋ง์ฝ ๊ทธ๋ค์ด ์ฐ์์ผ๋ก 40๋ถ ์ด์ ํผ๋์ค๋ฌ์ํ๋ค๋ฉด ์ฝ๋์์ ๊ฐ์ ํด์ผ ํ ๋ถ๋ถ์ด ์๋ ๊ฒ์ ๋๋ค.
์ธ์ง ๋ถํ๋ฅผ ๋ฎ๊ฒ ์ ์งํ๋ฉด ์ฌ๋๋ค์ด ํ์ฌ์ ํฉ๋ฅํ ์ง ๋ช ์๊ฐ ๋ง์ ์ฝ๋๋ฒ ์ด์ค์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ฅ์์ ์ฐ๋ฆฌ๊ฐ ์ถ๋ก ํ ๋ด์ฉ์ด ์ค์ ๋ก๋ ์ฌ์ค์ด ์๋๋ผ๊ณ ์ ์ ์์ํด ๋ณด์ญ์์ค. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ๋ถ์ ํ ๊ฒฐ๋ก ๊ณผ ์ด์ ์ฅ์์ ์ ํจํ๋ค๊ณ ๋ฐ์๋ค์๋ ๊ฒฐ๋ก ๋ ์ ํํ์ง ์์ ์ ์์ต๋๋ค. ๐คฏ
๋๊ปด์ง์๋์? ์๋ฏธ๋ฅผ ํ์ ํ๊ธฐ ์ํด ๊ธฐ์ฌ ์ ์ฒด๋ฅผ ๋ฐ์ด๋ค๋ ์ผ ํ ๋ฟ๋ง ์๋๋ผ(์์ ๋ชจ๋!), ๋จ๋ฝ ์์ฒด๊ฐ ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐฉ๊ธ ์ฌ๋ฌ๋ถ์ ๋จธ๋ฆฟ์์ ๋ถํ์ํ ์ธ์ง ๋ถํ๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋๋ฃ๋ค์๊ฒ ์ด๋ฐ ์ง์ ํ์ง ๋ง์ญ์์ค.
์ฐ๋ฆฌ๋ ๊ฐ๋ฐ ์์ ์ ๋ด์ฌ๋ ๊ฒ ์ด์์ ๋ชจ๋ ์ธ์ง ๋ถํ๋ฅผ ์ค์ฌ์ผ ํฉ๋๋ค.
๋๊ธ
๋กญ ํ์ดํฌ
์ข์ ๊ธฐ์ฌ์
๋๋ค.
์๋๋ ์ด ์นด๋ฅดํํฐ (ChatGPT, ํ
์ฌ๋ผ)
์ํํธ์จ์ด ๊ณตํ์ ๋ํ ์ข์ ๊ธ์
๋๋ค. ์๋ง๋ ๊ฐ์ฅ ์ฌ์ค์ ๊ฐ๊น์ง๋ง ๊ฐ์ฅ ์ค์ฒ๋์ง ์๋ ๊ด์ ์ผ ๊ฒ์
๋๋ค.
์ผ๋ก ๋จธ์คํฌ
์ฌ์ค์
๋๋ค.
์ ๋ ์ค์ค๋ง๋ (ํฌ๋กฌ, ์ธ๊ณ์์ ๊ฐ์ฅ ๋ณต์กํ ์ํํธ์จ์ด ์์คํ
)
๋๋ํ ๊ฐ๋ฐ์๋ค์ด ์ต์ ๋์์ธ ํจํด๊ณผ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์์ ์ธ ์ํคํ
์ฒ๋ฅผ ๋ง๋ ์๋ง์ ํ๋ก์ ํธ๋ฅผ ๋ณด์์ต๋๋ค. ํ์ง๋ง ์๋ก์ด ํ์์ด ๋ณ๊ฒฝ์ ์๋ํ์ ๋, ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ๋ง์ถฐ์ง๋์ง ์ดํดํ๋ ๋ฐ๋ง ๋ช ์ฃผ๋ฅผ ๋ณด๋์ต๋๋ค. ์ธ์ง ๋ถํ๊ฐ ๋๋ฌด ๋์ ์์ฐ์ฑ์ด ๊ธ๋ฝํ๊ณ ๋ฒ๊ทธ๊ฐ ์ฆ์ํ์ต๋๋ค.
์์ด๋ฌ๋ํ ์ ์? ์ด๋ฌํ ๋ณต์ก์ฑ์ ์ ๋ฐํ๋ ํจํด ์ค ๋ค์๊ฐ "ํด๋ฆฐ ์ฝ๋"๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ตฌํ๋์๋ค๋ ๊ฒ์ ๋๋ค.
์ ๋ง๋ก ์ค์ํ ๊ฒ์ ๋ถํ์ํ ์ธ์ง ๋ถ๋ด์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ๋๋ก๋ ์ด๊ฒ์ด ๋ง์ ์์ ๋ชจ๋ ๋์ ๋ ์ ๊ณ ๊น์ ๋ชจ๋์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค. ๋๋ก๋ ๊ด๋ จ๋ ๋ก์ง์ ์์ ํจ์๋ก ๋๋๋ ๋์ ํจ๊ป ์ ์งํ๋ ๊ฒ์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ก๋ ์๋ฆฌํ ํด๊ฒฐ์ฑ ๋ณด๋ค ์ง๋ฃจํ๊ณ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ์ ํํ๋ ๊ฒ์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค. ์ต๊ณ ์ ์ฝ๋๋ ๊ฐ์ฅ ์ฐ์ํ๊ฑฐ๋ ์ ๊ตํ ์ฝ๋๊ฐ ์๋๋ผ ๋ฏธ๋์ ๊ฐ๋ฐ์(์์ ํฌํจ)๊ฐ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์๋ ์ฝ๋์ ๋๋ค.
๋น์ ์ ๊ธฐ์ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์์ ์ง๋ฉดํ๋ ๋ฌธ์ ๋ค๊ณผ ์ ๋ง๋ก ๊ณต๊ฐ๋ฉ๋๋ค. ํ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ฅ ๋ณต์กํ ์ํํธ์จ์ด ์์คํ ์ค ํ๋๋ผ๋ ๋น์ ์ ๋ง์ ์ ๋์ ์ผ๋ก ์ณ์ต๋๋ค. ํฌ๋ก๋ฏธ์์์ ๊ทธ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ธ์ง ๋ถํ์ ๋ํด ๋น์ ์ด ์ง์ ํ ๋ง์ ์ ๋ค๊ณผ ์๋ฒฝํ๊ฒ ์ผ์นํ๋ ๋์์๋ ๋์ ์ ๋๋ค.
ํฌ๋ก๋ฏธ์์์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์คํ ๊ตฌ์ฑ ์์ ๊ฒฉ๋ฆฌ์ ํ์ ์์คํ (๋ ๋๋ง, ๋คํธ์ํน, ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๋ฑ) ๊ฐ์ ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํ๋ ๊ฒ์ ๋๋ค. ์ ๋์ค I/O๋ฅผ ์ฌ์ฉํ ๊น์ ๋ชจ๋ ์์ ์ ์ ์ฌํ๊ฒ, ์ฐ๋ฆฌ๋ ์๋์ ์ผ๋ก ๊ฐ๋จํ ์ธํฐํ์ด์ค ๋ค์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์์ฒญ๋ ๋ณต์ก์ฑ(๋ ์ด์์, ํฉ์ฑ, GPU ๊ฐ์)์ ์ฒ๋ฆฌํ์ง๋ง ๊ฐ๋ฐ์๋ ๋ช ํํ ์ถ์ํ ๊ณ์ธต์ ํตํด ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
๋ถํ์ํ ์ถ์ํ๋ฅผ ํผํ๋ ๊ฒ์ ๋ํ ๋น์ ์ ์ง์ ๋ ์ ๋ง ๋ง์์ ์ ๋ฟ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์์ ์ฐ๋ฆฌ๋ ์น ํ์ค ๋ฐ ํธํ์ฑ์ ๊ณ ์ ํ ๋ณต์ก์ฑ์ ์ฒ๋ฆฌํ๋ฉด์ ์๋ก์ด ๊ธฐ์ฌ์๊ฐ ์ฝ๋๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ ์ฌ์ด์์ ๋์์์ด ๊ท ํ์ ๋ง์ถฅ๋๋ค.
๋๋ก๋ ๋ณต์กํ ์์คํ ์์๋ ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ด ์ต์ ์ผ ๋๊ฐ ์์ต๋๋ค.
antirez (๋ ๋์ค)
์์ ํ ๋์ํฉ๋๋ค :) ๋ํ, ์ธ๊ธ๋ "์ํํธ์จ์ด ์ค๊ณ ์ฒ ํ"์์ ๋น ์ก๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ "์ค๊ณ ํฌ์"์ด๋ผ๋ ๊ฐ๋
์
๋๋ค. ์ฆ, ๋๋ก๋ ๋ฌด์ธ๊ฐ๋ฅผ ํฌ์ํ๊ณ ๋จ์์ฑ์ด๋ ์ฑ๋ฅ, ๋๋ ๋ ๋ค๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ ๋ ์ด ์์ด๋์ด๋ฅผ ์ง์์ ์ผ๋ก ์ ์ฉํ์ง๋ง ์ข
์ข
์ดํด๋ฐ์ง ๋ชปํฉ๋๋ค.
์ข์ ์๋ ์ ๊ฐ ํญ์ ํด์ ํญ๋ชฉ ๋ง๋ฃ๋ฅผ ๊ฑฐ๋ถํ๋ค๋ ์ฌ์ค์ ๋๋ค. ์ด๊ฒ์ ์ค๊ณ ํฌ์์ ๋๋ค. ์๋ํ๋ฉด ์ต์์ ํญ๋ชฉ(ํค ์์ฒด)์๋ง ํน์ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ค๊ณ๊ฐ ๋ ๊ฐ๋จํด์ง๊ณ ๊ฐ์ ๊ทธ๋ฅ ๊ฐ์ฒด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ๋์ค์ ํด์ ๋ง๋ฃ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ ๋ ์ข์ ๊ธฐ๋ฅ์ด์์ง๋ง (์ค์ ๋ก) ๋ง์ ๋ถ๋ถ์ ๋ง์ ๋ณ๊ฒฝ์ด ํ์ํ์ฌ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ์ต๋๋ค.
๋ ๋ค๋ฅธ ์๋ ์ ๊ฐ ์ง๊ธ ํ๊ณ ์๋ ๋ฒกํฐ ์ธํธ, ์๋ก์ด ๋ ๋์ค ๋ฐ์ดํฐ ์ ํ์ ๋๋ค. ์ ๋ ๋ ๋์ค๊ฐ ๋ฒกํฐ์ ๋ํ ์ง์ค์ ์์ฒ์ด ์๋๋ผ ๊ทผ์ฌ์น ๋ฒ์ ๋ง ๊ฐ์ ธ๊ฐ ์ ์๋๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋์ ๋์คํฌ์ ํฐ ๋ถ๋ ์์์ ๋ฒกํฐ๋ฅผ ์ ์งํ๋ ค๊ณ ํ์ง ์๊ณ ์ฝ์ ์ ์ ๊ทํ, ์์ํ๋ฅผ ํ ์ ์์์ต๋๋ค. ๋ง์ ๋ฒกํฐ DB๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ(์ ์ฒด ์ ๋ฐ๋ ๋ฒกํฐ)์ ๊ธฐ์ตํ๋ค๋ ์ฌ์ค์ ํฌ์ํ์ง ์์ต๋๋ค.
์ด๊ฒ๋ค์ ๋จ์ง ๋ ๊ฐ์ง ์์์ ์์ผ ๋ฟ์ด์ง๋ง, ์ ๋ ์ด ์์ด๋์ด๋ฅผ ๋ชจ๋ ๊ณณ์ ์ ์ฉํฉ๋๋ค. ์ด์ ๋ฌธ์ ๋ ๋ฌผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์ ํฌ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ข ์ข ๋งค์ฐ ํฐ ๋ณต์ก์ฑ์ ์ฐจ์งํ๋ 5%์ ๊ธฐ๋ฅ์ด ์๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก ์์ ์ผ ํ ์ข์ ๊ฒ์ ๋๋ค :D






