Skip to content

Latest commit

ย 

History

History
368 lines (251 loc) ยท 40 KB

File metadata and controls

368 lines (251 loc) ยท 40 KB

์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค

์†Œ๊ฐœ (Introduction)

์„ธ์ƒ์—๋Š” ์ˆ˜๋งŽ์€ ์œ ํ–‰์–ด์™€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋” ๊ทผ๋ณธ์ ์ธ ๊ฒƒ, ํ‹€๋ฆด ์ˆ˜ ์—†๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ํ˜ผ๋ž€์„ ๋А๋‚๋‹ˆ๋‹ค. ํ˜ผ๋ž€์€ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜ผ๋ž€์€ ๋†’์€ ์ธ์ง€ ๋ถ€ํ•˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋†’์€ ์ธ์ง€ ๋ถ€ํ•˜๋Š” ํ™”๋ คํ•˜๊ณ  ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ ๊ทผ๋ณธ์ ์ธ ์ธ๊ฐ„์˜ ์ œ์•ฝ์ž…๋‹ˆ๋‹ค. ์ƒ์ƒ ์†์˜ ์กด์žฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์ฝ๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์— ๊ณผ๋„ํ•œ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์‹ฌ๊ณ  ์žˆ์ง€๋Š” ์•Š์€์ง€ ๋Š์ž„์—†์ด ์ž๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ง€ ๋ถ€ํ•˜ (Cognitive load)

์ธ์ง€ ๋ถ€ํ•˜๋ž€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์–‘์ž…๋‹ˆ๋‹ค.

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

์™„์ „ํžˆ ๋‚ฏ์„  ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜์ • ์š”์ฒญ์„ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ •๋ง ๋˜‘๋˜‘ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ–ˆ๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋งŽ์€ ๋ฉ‹์ง„ ์•„ํ‚คํ…์ฒ˜, ํ™”๋ คํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์œ ํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ž‘์„ฑ์ž๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ๋†’์€ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์•ˆ๊ฒจ์ค€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ์ง€ ๋ถ€ํ•˜

์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ง€ ๋ถ€ํ•˜์™€ ๋ฐฉํ•ด ์š”์†Œ

์ธ์ง€ ๋ถ€ํ•˜์˜ ์œ ํ˜• (Types of cognitive load)

๋‚ด์žฌ์  ์ธ์ง€ ๋ถ€ํ•˜ - ์ž‘์—… ์ž์ฒด์˜ ๊ณ ์œ ํ•œ ์–ด๋ ค์›€์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ค„์ผ ์ˆ˜ ์—†์œผ๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์™ธ์žฌ์  ์ธ์ง€ ๋ถ€ํ•˜ - ์ •๋ณด๊ฐ€ ์ œ์‹œ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜‘๋˜‘ํ•œ ์ž‘์„ฑ์ž์˜ ๊ธฐํ–‰๊ณผ ๊ฐ™์ด ์ž‘์—…๊ณผ ์ง์ ‘ ๊ด€๋ จ ์—†๋Š” ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด ์™ธ์žฌ์  ์ธ์ง€ ๋ถ€ํ•˜์— ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด์žฌ์  ๋Œ€ ์™ธ์žฌ์ 

์™ธ์žฌ์  ์ธ์ง€ ๋ถ€ํ•˜์˜ ๊ตฌ์ฒด์ ์ธ ์‹ค์ œ ์‚ฌ๋ก€๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


์ธ์ง€ ๋ถ€ํ•˜ ์ˆ˜์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค:
๐Ÿง : ์ƒˆ๋กœ์šด ์ž‘์—… ๊ธฐ์–ต, ์ธ์ง€ ๋ถ€ํ•˜ ์—†์Œ
๐Ÿง ++: ์ž‘์—… ๊ธฐ์–ต์— ๋‘ ๊ฐ€์ง€ ์‚ฌ์‹ค, ์ธ์ง€ ๋ถ€ํ•˜ ์ฆ๊ฐ€
๐Ÿคฏ: ์ธ์ง€ ๊ณผ๋ถ€ํ•˜, 4๊ฐ€์ง€ ์ด์ƒ์˜ ์‚ฌ์‹ค

์ธ๊ฐ„์˜ ๋‡Œ๋Š” ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๊ณ  ๋ฏธ์ง€์˜ ์˜์—ญ์ด์ง€๋งŒ, ์ด ๊ธ€์—์„œ๋Š” ์ด ๋‹จ์ˆœํ™”๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ (Complex conditionals)

if val > someConstant // ๐Ÿง +
    && (condition2 || condition3) // ๐Ÿง +++, ์ด์ „ ์กฐ๊ฑด์€ ์ฐธ์ด์–ด์•ผ ํ•˜๊ณ , c2 ๋˜๋Š” c3 ์ค‘ ํ•˜๋‚˜๋Š” ์ฐธ์ด์–ด์•ผ ํ•จ
    && (condition4 && !condition5) { // ๐Ÿคฏ, ์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ํ˜ผ๋ž€์— ๋น ์ง
    ...
}

์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ค‘๊ฐ„ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

isValid = val > someConstant
isAllowed = condition2 || condition3
isSecure = condition4 && !condition5
// ๐Ÿง , ์กฐ๊ฑด์„ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†์Œ, ์„ค๋ช…์ ์ธ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ
if isValid && isAllowed && isSecure {
    ...
}

์ค‘์ฒฉ๋œ if ๋ฌธ (Nested ifs)

if isValid { // ๐Ÿง +, ์œ ํšจํ•œ ์ž…๋ ฅ์—๋งŒ ์ค‘์ฒฉ๋œ ์ฝ”๋“œ ์ ์šฉ
    if isSecure { // ๐Ÿง ++, ์œ ํšจํ•˜๊ณ  ์•ˆ์ „ํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘์—… ์ˆ˜ํ–‰
        stuff // ๐Ÿง +++
    }
}

์กฐ๊ธฐ ๋ฐ˜ํ™˜๊ณผ ๋น„๊ตํ•ด ๋ณด์„ธ์š”.

if !isValid
    return

if !isSecure
    return

// ๐Ÿง , ์ด์ „ ๋ฐ˜ํ™˜์€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Œ, ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‹ค๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์Œ

stuff // ๐Ÿง +

์šฐ๋ฆฌ๋Š” ํ–‰๋ณตํ•œ ๊ฒฝ๋กœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์˜จ๊ฐ– ์ข…๋ฅ˜์˜ ์ „์ œ ์กฐ๊ฑด์œผ๋กœ๋ถ€ํ„ฐ ์ž‘์—… ๊ธฐ์–ต์„ ํ•ด๋ฐฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์†์˜ ์•…๋ชฝ (Inheritance nightmare)

๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•ด ๋‹ฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค: ๐Ÿง 

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. ๋งŒ์•ฝ ์ด ๊ธ€์ด ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์ง„ ๋น„๋Œ€ํ•œ ๊ฐ“ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง€์ง€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด, ์ž˜๋ชป๋œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์ฑ…์ž„ (Responsible for one thing)

๋„ˆ๋ฌด๋‚˜ ์ž์ฃผ, ์šฐ๋ฆฌ๋Š” "๋ชจ๋“ˆ์€ ํ•œ ๊ฐ€์ง€, ์˜ค์ง ํ•œ ๊ฐ€์ง€ ์ผ์—๋งŒ ์ฑ…์ž„์ ธ์•ผ ํ•œ๋‹ค"๋Š” ๋ชจํ˜ธํ•œ ์›์น™์— ๋”ฐ๋ผ ์ˆ˜๋งŽ์€ ์–•์€ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ํ๋ฆฟํ•œ ํ•œ ๊ฐ€์ง€๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๊ฐ€์ง€ ์ผ์ด์ฃ , ๊ทธ๋ ‡์ฃ ? ๊ทธ๋Ÿฌ๋‹ˆ MetricsProviderFactoryFactory๋Š” ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ „์ฒด ๊ตฌํ˜„๋ณด๋‹ค ์ •์‹ ์ ์œผ๋กœ ๋” ๋ถ€๋‹ด์Šค๋Ÿฌ์šด๋ฐ, ๊ทธ๊ฒŒ ๋ฌด์Šจ ์ถ”์ƒํ™”์ผ๊นŒ์š”? ๋ญ”๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์™€ ์ดํ•ด ๊ด€๊ณ„์ž๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์—๊ฒŒ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์€ ํ•œ ๋ช…, ์˜ค์ง ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž ๋˜๋Š” ์ดํ•ด ๊ด€๊ณ„์ž์—๊ฒŒ๋งŒ ์ฑ…์ž„์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋„ˆ๋ฌด ๋งŽ์€ ์–•์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค (Too many shallow microservices)

์ด ์–•๊ณ  ๊นŠ์€ ๋ชจ๋“ˆ ์›์น™์€ ๊ทœ๋ชจ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์–•์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์•„๋ฌด๋Ÿฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—…๊ณ„๋Š” ๋‹ค์†Œ "๋งคํฌ๋กœ์„œ๋น„์Šค", ์ฆ‰ ๊ทธ๋ ‡๊ฒŒ ์–•์ง€ ์•Š์€(=๊นŠ์€) ์„œ๋น„์Šค๋กœ ํ–ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ตœ์•…์ด๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ค์šด ํ˜„์ƒ ์ค‘ ํ•˜๋‚˜๋Š” ์†Œ์œ„ ๋ถ„์‚ฐ ๋ชจ๋†€๋ฆฌ์Šค์ธ๋ฐ, ์ด๋Š” ์ข…์ข… ์ด๋Ÿฌํ•œ ์ง€๋‚˜์น˜๊ฒŒ ์„ธ๋ถ„ํ™”๋œ ์–•์€ ๋ถ„๋ฆฌ์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ํ•„์ž๋Š” ํ•œ๋•Œ 5๋ช…์˜ ๊ฐœ๋ฐœ์ž๋กœ ๊ตฌ์„ฑ๋œ ํŒ€์ด 17(!)๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋„์ž…ํ•œ ์Šคํƒ€ํŠธ์—…์— ์ปจ์„คํŒ…์„ ํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒ€์€ ์˜ˆ์ •๋ณด๋‹ค 10๊ฐœ์›” ๋Šฆ์—ˆ๊ณ  ๊ณต๊ฐœ ์‹œ์ ์— ๊ฐ€๊นŒ์›Œ ๋ณด์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์„๋•Œ๋งˆ๋‹ค 4๊ฐœ ์ด์ƒ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํ†ตํ•ฉ๋œ ์˜์—ญ์—์„œ์˜ ์ง„๋‹จ ๋‚œ์ด๋„๋Š” ๊ธ‰์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ ์‹œ์ ๊ณผ ์ธ์ง€ ๋ถ€ํ•˜ ๋ชจ๋‘ ์šฉ๋‚ฉํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๋†’์•˜์Šต๋‹ˆ๋‹ค. ๐Ÿคฏ

์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์˜ ๋ถˆํ™•์‹ค์„ฑ์— ์ ‘๊ทผํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ผ๊นŒ์š”? ์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ฌ๋ฐ”๋ฅธ ๋…ผ๋ฆฌ์  ๊ฒฝ๊ณ„๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฒฐ์ •์„ ์ตœ๋Œ€ํ•œ ๋Šฆ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋•Œ๊ฐ€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐ€์žฅ ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์„ ๋„์ž…ํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ์„ค๊ณ„ ๊ฒฐ์ •์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋˜๋Œ๋ฆฌ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒ€์˜ ์œ ์ผํ•œ ์ •๋‹นํ™”๋Š” "FAANG ๊ธฐ์—…๋“ค์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํšจ๊ณผ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ–ˆ๋‹ค"๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ด์š”, ํฐ ๊ฟˆ์€ ๊ทธ๋งŒ ๊พธ์„ธ์š”.

ํƒ€๋„จ๋ฐ”์›€-ํ† ๋ฐœ์ฆˆ ๋…ผ์Ÿ์€ ๋ฆฌ๋ˆ…์Šค์˜ ๋ชจ๋†€๋ฆฌ์‹ ์„ค๊ณ„๊ฐ€ ๊ฒฐํ•จ์ด ์žˆ๊ณ  ๊ตฌ์‹์ด๋ฉฐ, ๋งˆ์ดํฌ๋กœ์ปค๋„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋งˆ์ดํฌ๋กœ์ปค๋„ ์„ค๊ณ„๋Š” "์ด๋ก ์ ์ด๊ณ  ๋ฏธ์ ์ธ" ๊ด€์ ์—์„œ ์šฐ์›”ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์‹ค์šฉ์ ์ธ ์ธก๋ฉด์—์„œ๋Š” 30๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ๋„ ๋งˆ์ดํฌ๋กœ์ปค๋„ ๊ธฐ๋ฐ˜ GNU Hurd๋Š” ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ๋ชจ๋†€๋ฆฌ์‹ ๋ฆฌ๋ˆ…์Šค๋Š” ์–ด๋””์—๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” ๋ฆฌ๋ˆ…์Šค๋กœ ๊ตฌ๋™๋˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์Šค๋งˆํŠธ ์ฃผ์ „์ž๋„ ๋ฆฌ๋ˆ…์Šค๋กœ ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋†€๋ฆฌ์‹ ๋ฆฌ๋ˆ…์Šค๋กœ ๋ง์ด์ฃ .

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

๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ์–ธ์–ด (Feature-rich languages)

์šฐ๋ฆฌ๋Š” ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋  ๋•Œ ํฅ๋ถ„์„ ๋А๋‚๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์ด ๋งŽ์œผ๋ฉด ํ•œ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  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

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ HTTP ์ƒํƒœ ์ฝ”๋“œ (Business logic and HTTP status codes)

๋ฐฑ์—”๋“œ์—์„œ๋Š” ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 401 ๋งŒ๋ฃŒ๋œ JWT ํ† ํฐ 403 ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์กฑ 418 ์ฐจ๋‹จ๋œ ์‚ฌ์šฉ์ž

ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋Š” ๋ฐฑ์—”๋“œ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ผ์‹œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋‡Œ์— ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:
401์€ ๋งŒ๋ฃŒ๋œ JWT ํ† ํฐ์ž…๋‹ˆ๋‹ค // ๐Ÿง +, ๊ทธ๋ƒฅ ์ผ์‹œ์ ์œผ๋กœ ๊ธฐ์–ตํ•˜์„ธ์š”
403์€ ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์กฑ์ž…๋‹ˆ๋‹ค // ๐Ÿง ++
418์€ ์ฐจ๋‹จ๋œ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค // ๐Ÿง +++

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” (๋ฐ”๋ผ๊ฑด๋Œ€) ์ˆซ์ž ์ƒํƒœ -> ์˜๋ฏธ ์‚ฌ์ „์„ ๋งŒ๋“ค์–ด ํ›„์† ๊ธฐ์—ฌ์ž๋“ค์ด ์ด ๋งคํ•‘์„ ๋‡Œ์—์„œ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ QA ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. "์ด๋ด์š”, 403 ์ƒํƒœ๋ฅผ ๋ฐ›์•˜๋Š”๋ฐ, ํ† ํฐ์ด ๋งŒ๋ฃŒ๋œ ๊ฑด๊ฐ€์š”, ์•„๋‹ˆ๋ฉด ์ ‘๊ทผ ๊ถŒํ•œ์ด ๋ถ€์กฑํ•œ ๊ฑด๊ฐ€์š”?"\nQA ์—”์ง€๋‹ˆ์–ด๋Š” ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•œ๋•Œ ๋งŒ๋“ค์—ˆ๋˜ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋จผ์ € ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์™œ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๋งคํ•‘์„ ์ž‘์—… ๊ธฐ์–ต์— ๋‹ด์•„๋‘์–ด์•ผ ํ• ๊นŒ์š”? ๋น„์ฆˆ๋‹ˆ์Šค ์„ธ๋ถ€ ์ •๋ณด๋ฅผ HTTP ์ „์†ก ํ”„๋กœํ† ์ฝœ์—์„œ ์ถ”์ƒํ™”ํ•˜๊ณ  ์‘๋‹ต ๋ณธ๋ฌธ์— ์ง์ ‘ ์ž์ฒด ์„ค๋ช… ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

{
    "code": "jwt_has_expired"
}

ํ”„๋ก ํŠธ์—”๋“œ ์ธก์˜ ์ธ์ง€ ๋ถ€ํ•˜: ๐Ÿง  (์ƒˆ๋กœ์›€, ๋งˆ์Œ์— ๋‹ด์•„๋‘” ์‚ฌ์‹ค ์—†์Œ)
QA ์ธก์˜ ์ธ์ง€ ๋ถ€ํ•˜: ๐Ÿง 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์–ด๋””์—์„œ๋“  ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ˆซ์ž ์ƒํƒœ์— ๋™์ผํ•œ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์ฒด ์„ค๋ช… ๋ฌธ์ž์—ด์„ ์„ ํ˜ธํ•˜์„ธ์š”. ํ˜„๋Œ€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด 640K ์ปดํ“จํ„ฐ ์‹œ๋Œ€์— ์‚ด๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ 401๊ณผ 403 ์‚ฌ์ด์—์„œ ๋…ผ์Ÿํ•˜๋ฉฐ ์ž์‹ ์˜ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๋Š” ๊ทธ ์‚ฌ๊ณ  ๊ณผ์ •์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ๋Œ€ํ•œ "์ด์œ "(ADR)๋ฅผ ๋ฌธ์„œํ™”ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์ด ๋‚ด๋ฆฐ ๊ฒฐ์ •์„ ์ดํ•ดํ•˜๋„๋ก ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์šฉ์ž ๊ด€๋ จ ๋˜๋Š” ์„œ๋ฒ„ ๊ด€๋ จ์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ์™ธ์—๋Š” ์ƒํ™ฉ์ด ๋‹ค์†Œ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ : "์ธ์ฆ"๊ณผ "๊ถŒํ•œ ๋ถ€์—ฌ"๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ์ข…์ข… ์ •์‹ ์ ์œผ๋กœ ๋ถ€๋‹ด์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด "๋กœ๊ทธ์ธ" ๋ฐ "๊ถŒํ•œ"๊ณผ ๊ฐ™์€ ๋” ๊ฐ„๋‹จํ•œ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DRY ์›์น™ ๋‚จ์šฉ (Abusing DRY principle)

๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค(Do not repeat yourself) - DRY ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋กœ์„œ ๋ฐฐ์šฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์›์น™ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ž์‹ ์—๊ฒŒ ๋„ˆ๋ฌด ๊นŠ์ด ๋‚ด์žฌ๋˜์–ด ์žˆ์–ด์„œ ๋ช‡ ์ค„์˜ ์ถ”๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฐธ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹๊ณ  ๊ทผ๋ณธ์ ์ธ ๊ทœ์น™์ด์ง€๋งŒ, ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ธ์ง€ ๋ถ€ํ•˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

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

์‚ฌ์‹ค, ๋™์ผํ•œ ๋ฌธ์ œ๋Š” ๋‹จ์ผ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ ์‹ค์ œ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์ธ์‹๋œ ์œ ์‚ฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋„ˆ๋ฌด ์ผ์ฐ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถˆํ•„์š”ํ•œ ์ถ”์ƒํ™”๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กญ ํŒŒ์ดํฌ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ๋ณต์‚ฌ๋ณธ์ด ์•ฝ๊ฐ„์˜ ์ข…์†์„ฑ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

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

๋ชจ๋“  ์ข…์†์„ฑ์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ 10๊ฐœ ์ด์ƒ์˜ ์Šคํƒ ์ถ”์  ์ˆ˜์ค€์„ ์‚ดํŽด๋ณด๊ณ  ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ(์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)์€ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ๊ธด๋ฐ€ํ•œ ๊ฒฐํ•ฉ (Tight coupling with frameworks)

ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๋งŽ์€ "๋งˆ๋ฒ•"์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์— ๋„ˆ๋ฌด ๋งŽ์ด ์˜์กดํ•จ์œผ๋กœ์จ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๊ฐ€์˜ฌ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ทธ "๋งˆ๋ฒ•"์„ ๋จผ์ € ๋ฐฐ์šฐ๋„๋ก ๊ฐ•์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋‹ฌ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉฐ์น  ๋งŒ์— MVP๋ฅผ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ๊ณผ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๋‚˜์œ ๊ฒƒ์€, ์–ด๋А ์‹œ์ ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„ํ‚คํ…์ฒ˜์— ๋งž์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์š”๊ตฌ ์‚ฌํ•ญ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ์‹ฌ๊ฐํ•œ ์ œ์•ฝ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ๋ถ€ํ„ฐ ์‚ฌ๋žŒ๋“ค์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํฌํฌํ•˜๊ณ  ์ž์ฒด ์‚ฌ์šฉ์ž ์ง€์ • ๋ฒ„์ „์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์ด ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ์ธ์ง€ ๋ถ€ํ•˜์˜ ์–‘(์ฆ‰, ์ด ์‚ฌ์šฉ์ž ์ง€์ • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ)์„ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๐Ÿคฏ

๊ฒฐ์ฝ” ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐœ๋ช…ํ•˜๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค!

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

๋‚ด๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‹ซ์–ดํ•˜๋Š” ์ด์œ 

๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered architecture)

์ด๋Ÿฐ ๊ธฐ์ˆ ์ ์ธ ์ฃผ์ œ์—” ์—”์ง€๋‹ˆ์–ด๋กœ์„œ์˜ ํ™•์‹คํ•œ ์„ค๋ ˜์ด ์žˆ๋‹ค (certain engineering excitement).

ํ•„์ž๋„ ์ˆ˜๋…„ ๋™์•ˆ Hexagonal/Onion ์•„ํ‚คํ…์ฒ˜์˜ ์—ด๋ ฌํ•œ ์ง€์ง€์ž์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์‚ฌ์šฉํ–ˆ๊ณ  ๋‹ค๋ฅธ ํŒ€์—๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋„๋ก ๊ถŒ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„์ž๊ฐ€ ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์€ ์ฆ๊ฐ€ํ–ˆ๊ณ , ํŒŒ์ผ ์ˆ˜๋งŒ ํ•ด๋„ ๋‘ ๋ฐฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋งŽ์€ ์ ‘์ฐฉ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค. ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ถ”์ƒํ™” ๊ณ„์ธต์— ๊ฑธ์ณ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ๊ณ , ๋ชจ๋“  ๊ฒƒ์ด ์ง€๋ฃจํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿคฏ

์ถ”์ƒํ™”๋Š” ๋ณต์žก์„ฑ์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ง€ ๊ฐ„์ ‘์„ฑ์„ ์ถ”๊ฐ€ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœ์—์„œ ํ˜ธ์ถœ๋กœ ์ด๋™ํ•˜์—ฌ ์ฝ๊ณ  ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๊ณ  ๋ฌด์—‡์ด ๋ˆ„๋ฝ๋˜์—ˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜์˜ ๊ณ„์ธต ๋ถ„๋ฆฌ๋Š” ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋งŽ์€, ์ข…์ข… ๋ถ„๋ฆฌ๋œ ์ถ”์ ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ ์ถ”์ ์€ ์ œํ•œ๋œ ์ž‘์—… ๊ธฐ์–ต ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿคฏ

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

์ฝ”๋”ฉ ์›์น™๊ณผ ๊ฒฝํ—˜
@flaviocopes

์ด๋Ÿฌํ•œ ๊ณ„์ธตํ™”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ์‹ ์†ํ•˜๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ฐฉ๊ฐ์ž…๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ถ”์ƒํ™”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ฑฑ์ •๊ฑฐ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๋ถ€๋ถ„์ด๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ ์ถ”์ƒํ™”๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์˜ ์•ฝ 10%๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(์žˆ๋‹ค๋ฉด), ์ง„์งœ ๊ณ ํ†ต์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋น„ํ˜ธํ™˜์„ฑ, ํ†ต์‹  ํ”„๋กœํ† ์ฝœ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋ฌธ์ œ ๋ฐ ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค.

API ์‚ฌ์šฉ์ž๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋งŽ์œผ๋ฉด,\n> ๊ณ„์•ฝ์„œ์— ๋ฌด์—‡์„ ์•ฝ์†ํ•˜๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.\n> ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋™์ž‘์€\n> ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์˜์กดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฏธ๋ž˜์— ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์™œ ๊ทธ๋Ÿฌํ•œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ๋†’์€ ์ธ์ง€ ๋ถ€ํ•˜๋ผ๋Š” ๋Œ€๊ฐ€๋ฅผ ์น˜๋Ÿฌ์•ผ ํ• ๊นŒ์š”? ๊ฒŒ๋‹ค๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ผ๋ถ€ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋ฏธ๋ž˜๋Š” ๊ฒฐ์ฝ” ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ทผ๋ณธ์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ๊ทผ๋ณธ์ ์ธ ์›์น™์˜ ์ฃผ๊ด€์ ์ด๊ณ  ํŽธํ–ฅ๋œ ๊ฒฐ๊ณผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฌํ•œ ์ฃผ๊ด€์ ์ธ ํ•ด์„์— ์˜์กดํ•ด์•ผ ํ• ๊นŒ์š”? ๋Œ€์‹  ๊ทผ๋ณธ์ ์ธ ๊ทœ์น™์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™, ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›, ์ธ์ง€ ๋ถ€ํ•˜ ๋ฐ ์ •๋ณด ์€๋‹‰. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ธํ”„๋ผ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ํ•ต์‹ฌ ๋กœ์ง์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ํ† ๋ก .

์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•ด ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์‹ค์šฉ์ ์ธ ์ด์œ ๋กœ ์ •๋‹นํ™”๋˜๋Š” ํ™•์žฅ ์ง€์ ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ถ”์ƒํ™” ๊ณ„์ธต์€ ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ œํ•œ๋œ ์ž‘์—… ๊ธฐ์–ต์— ๋‹ด์•„๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ธต

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design)

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(Domain-driven design)๋Š” ๋ถ„๋ช… ํ›Œ๋ฅญํ•œ ๊ฐœ๋…๋“ค์ด ๋งŽ์ง€๋งŒ, ์ข…์ข… ์˜คํ•ด๋ฅผ ๋ฐ›๊ธฐ๋„ ํ•œ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ '์šฐ๋ฆฌ๋Š” DDD ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค'๊ณ  ๋งํ•˜๊ณค ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋‹ค์†Œ ์–ด์ƒ‰ํ•œ ํ‘œํ˜„์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด DDD๋Š” 'ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(solution space)'์ด ์•„๋‹ˆ๋ผ '๋ฌธ์ œ ์˜์—ญ(problem space)'์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด, ๋„๋ฉ”์ธ, ๊ฒฝ๊ณ„ ์ปจํ…์ŠคํŠธ, ์ง‘๊ณ„, ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์€ ๋ชจ๋‘ '๋ฌธ์ œ ์˜์—ญ(problem space)'์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ๋ฐฐ์šฐ๊ณ  ๊ฒฝ๊ณ„๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. DDD๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž, ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋‹ด๋‹น์ž๋Š” ๋‹จ์ผํ•˜๊ณ  ํ†ต์ผ๋œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ๊ณผ์ ์œผ๋กœ ์˜์‚ฌ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DDD์˜ ์ด๋Ÿฌํ•œ '๋ฌธ์ œ ์˜์—ญ(problem space)' ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๋Œ€์‹  ํŠน์ • ํด๋” ๊ตฌ์กฐ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ ๊ธฐํƒ€ 'ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(solution space)' ๊ธฐ์ˆ ์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ž๊ฐ€ DDD๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฐฉ์‹์€ ๋…ํŠนํ•˜๊ณ  ์ฃผ๊ด€์ ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ์ฆ‰ ๋งŽ์€ ์™ธ์žฌ์  ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ๋ฏธ๋ž˜์˜ ๊ฐœ๋ฐœ์ž๋Š” ํŒŒ๋ฉธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿคฏ

ํŒ€ ํ† ํด๋กœ์ง€๋Š” ํŒ€ ์ „์ฒด์— ๊ฑธ์ณ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํ›จ์”ฌ ๋” ์ข‹๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋Š” ํŒ€ ํ† ํด๋กœ์ง€์— ๋Œ€ํ•ด ๋ฐฐ์šด ํ›„ ๋‹ค์†Œ ์œ ์‚ฌํ•œ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— DDD๋Š” 10๋ช…์˜ ๋‹ค๋ฅธ ๋…์ž์—๊ฒŒ 10๊ฐœ์˜ ๋‹ค๋ฅธ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ณตํ†ต ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋Œ€์‹  ๋ถˆํ•„์š”ํ•œ ๋…ผ์Ÿ์˜ ์žฅ์ด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ (Examples)

์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋งค์šฐ ์ง€๋ฃจํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ํฐ ์ •์‹ ์  ๋…ธ๋ ฅ ์—†์ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๊ฒ€ํ† ์— ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐธ์—ฌ์‹œํ‚ค์‹ญ์‹œ์˜ค. ๊ทธ๋“ค์€ ์ •์‹ ์ ์œผ๋กœ ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ์˜์—ญ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ต์ˆ™ํ•œ ํ”„๋กœ์ ํŠธ์˜ ์ธ์ง€ ๋ถ€ํ•˜ (Cognitive load of familiar projects)

๋ฌธ์ œ๋Š” ์ต์ˆ™ํ•จ์ด ๋‹จ์ˆœํ•จ๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ต์ˆ™ํ•จ๊ณผ ๋‹จ์ˆœํ•จ์€ ๊ฐ™์€ ๋А๋‚Œ, ์ฆ‰ ๋ณ„๋‹ค๋ฅธ ์ •์‹ ์  ๋…ธ๋ ฅ ์—†์ด ๊ณต๊ฐ„์„ ์‰ฝ๊ฒŒ ์ด๋™ํ•˜๋Š” ๋А๋‚Œ์„ ์ฃผ์ง€๋งŒ, ๋งค์šฐ ๋‹ค๋ฅธ ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  "์˜๋ฆฌํ•œ"(์ฆ‰, "์ž๊ธฐ ๋งŒ์กฑ์ ์ธ") ๋น„๊ด€์šฉ์  ํŠธ๋ฆญ์€ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํ•™์Šต ํŽ˜๋„ํ‹ฐ๋ฅผ ๋ถ€๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ๊ทธ ํ•™์Šต์„ ๋งˆ์น˜๋ฉด ์ฝ”๋“œ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ๋œ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฏธ ์ต์ˆ™ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ธ์‹ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ "์‹ ์ž…"์ด ๋„ˆ๋ฌด ์ œ๋„ํ™”๋˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ๋น„ํŒํ•˜๋„๋ก ํ•˜๋ ค๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค!

์ด์ „ ์ž‘์„ฑ์ž๊ฐ€ ์ด ๊ฑฐ๋Œ€ํ•œ ํ˜ผ๋ž€์„ ํ•œ ๋ฒˆ์— ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•œ ๋ฒˆ์— ์กฐ๊ธˆ์”ฉ ์ ์ง„์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๋ฒˆ์— ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.

์ œ ์ˆ˜์—…์—์„œ ์ฐธ์—ฌ์ž๋“ค์€ ์–ด๋А ๋‚  ๊ฑฐ๋Œ€ํ•œ WHERE ์ ˆ์— ์ˆ˜๋ฐฑ ์ค„์˜ ์กฐ๊ฑด๋ฌธ์ด ์žˆ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ SQL ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ๋ณด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์•„๋ฌด๋„ ์ด๋ ‡๊ฒŒ ๋‚˜๋น ์ง€๋„๋ก ๋‚ด๋ฒ„๋ ค ๋‘˜ ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ ‡๊ฒŒ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. "์กฐ๊ฑด๋ฌธ์ด 23๊ฐœ๋ฐ–์— ์—†์„ ๋•Œ๋Š” ํ•˜๋‚˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•ด๋„ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ฌธ์ด 2030๊ฐœ๊ฐ€ ๋˜๋ฉด ํ•˜๋‚˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•ด๋„ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค!"

์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ž‘์šฉํ•˜๋Š” "๋‹จ์ˆœํ™”ํ•˜๋Š” ํž˜"์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‚ด๋ฆฌ๋Š” ์˜๋„์ ์ธ ์„ ํƒ ์™ธ์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ™”์—๋Š” ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ, ์‚ฌ๋žŒ๋“ค์€ ๋„ˆ๋ฌด ์ž์ฃผ ์„œ๋‘๋ฆ…๋‹ˆ๋‹ค.

๋Œ„ ๋…ธ์Šค๋‹˜์˜ ์˜๊ฒฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ์žฅ๊ธฐ ๊ธฐ์–ต์— ๋‚ด์žฌํ™”ํ–ˆ๋‹ค๋ฉด ๋†’์€ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉ˜ํƒˆ ๋ชจ๋ธ

๋ฐฐ์›Œ์•ผ ํ•  ๋ฉ˜ํƒˆ ๋ชจ๋ธ์ด ๋งŽ์„์ˆ˜๋ก ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋” ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์„ ์˜จ๋ณด๋”ฉํ•  ๋•Œ ๊ทธ๋“ค์ด ๊ฒช๋Š” ํ˜ผ๋ž€์˜ ์–‘์„ ์ธก์ •ํ•ด ๋ณด์‹ญ์‹œ์˜ค(ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋งŒ์•ฝ ๊ทธ๋“ค์ด ์—ฐ์†์œผ๋กœ 40๋ถ„ ์ด์ƒ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•œ๋‹ค๋ฉด ์ฝ”๋“œ์—์„œ ๊ฐœ์„ ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ํšŒ์‚ฌ์— ํ•ฉ๋ฅ˜ํ•œ ์ง€ ๋ช‡ ์‹œ๊ฐ„ ๋งŒ์— ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก  (Conclusion)

๋‘ ๋ฒˆ์งธ ์žฅ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ถ”๋ก ํ•œ ๋‚ด์šฉ์ด ์‹ค์ œ๋กœ๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ์ž ์‹œ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ๋ถ€์ •ํ•œ ๊ฒฐ๋ก ๊ณผ ์ด์ „ ์žฅ์—์„œ ์œ ํšจํ•˜๋‹ค๊ณ  ๋ฐ›์•„๋“ค์˜€๋˜ ๊ฒฐ๋ก ๋„ ์ •ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿคฏ

๋А๊ปด์ง€์‹œ๋‚˜์š”? ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์‚ฌ ์ „์ฒด๋ฅผ ๋›ฐ์–ด๋‹ค๋…€์•ผ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ(์–•์€ ๋ชจ๋“ˆ!), ๋‹จ๋ฝ ์ž์ฒด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐฉ๊ธˆ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋จธ๋ฆฟ์†์— ๋ถˆํ•„์š”ํ•œ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋™๋ฃŒ๋“ค์—๊ฒŒ ์ด๋Ÿฐ ์ง“์„ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋˜‘๋˜‘ํ•œ ์ €์ž

์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ ์ž‘์—…์— ๋‚ด์žฌ๋œ ๊ฒƒ ์ด์ƒ์˜ ๋ชจ๋“  ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋งํฌ๋“œ์ธ, X, ๊นƒํ—ˆ๋ธŒ

์ฝ๊ธฐ ์‰ฌ์šด ๋ฒ„์ „

๋Œ“๊ธ€

๋กญ ํŒŒ์ดํฌ
์ข‹์€ ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค.

์•ˆ๋“œ๋ ˆ์ด ์นด๋ฅดํŒŒํ‹ฐ (ChatGPT, ํ…Œ์Šฌ๋ผ)
์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์— ๋Œ€ํ•œ ์ข‹์€ ๊ธ€์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ฐ€์žฅ ์‚ฌ์‹ค์— ๊ฐ€๊น์ง€๋งŒ ๊ฐ€์žฅ ์‹ค์ฒœ๋˜์ง€ ์•Š๋Š” ๊ด€์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ก  ๋จธ์Šคํฌ
์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

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

์•„์ด๋Ÿฌ๋‹ˆํ•œ ์ ์€? ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์„ ์œ ๋ฐœํ•˜๋Š” ํŒจํ„ด ์ค‘ ๋‹ค์ˆ˜๊ฐ€ "ํด๋ฆฐ ์ฝ”๋“œ"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ง๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ์ธ์ง€ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ด๊ฒƒ์ด ๋งŽ์€ ์–•์€ ๋ชจ๋“ˆ ๋Œ€์‹  ๋” ์ ๊ณ  ๊นŠ์€ ๋ชจ๋“ˆ์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ž‘์€ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„๋Š” ๋Œ€์‹  ํ•จ๊ป˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋•Œ๋กœ๋Š” ์˜๋ฆฌํ•œ ํ•ด๊ฒฐ์ฑ…๋ณด๋‹ค ์ง€๋ฃจํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ณ ์˜ ์ฝ”๋“œ๋Š” ๊ฐ€์žฅ ์šฐ์•„ํ•˜๊ฑฐ๋‚˜ ์ •๊ตํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฏธ๋ž˜์˜ ๊ฐœ๋ฐœ์ž(์ž์‹  ํฌํ•จ)๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

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

ํฌ๋กœ๋ฏธ์›€์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์‹ ์ค‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฒฉ๋ฆฌ์™€ ํ•˜์œ„ ์‹œ์Šคํ…œ(๋ Œ๋”๋ง, ๋„คํŠธ์›Œํ‚น, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋“ฑ) ๊ฐ„์˜ ์ž˜ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค I/O๋ฅผ ์‚ฌ์šฉํ•œ ๊นŠ์€ ๋ชจ๋“ˆ ์˜ˆ์ œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋’ค์— ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ์˜ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์€ ์—„์ฒญ๋‚œ ๋ณต์žก์„ฑ(๋ ˆ์ด์•„์›ƒ, ํ•ฉ์„ฑ, GPU ๊ฐ€์†)์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” ๋ช…ํ™•ํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ํ†ตํ•ด ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋•Œ๋กœ๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์—์„œ๋„ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์ตœ์„ ์ผ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

antirez (๋ ˆ๋””์Šค)
์™„์ „ํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค :) ๋˜ํ•œ, ์–ธ๊ธ‰๋œ "์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์ฒ ํ•™"์—์„œ ๋น ์กŒ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ "์„ค๊ณ„ ํฌ์ƒ"์ด๋ผ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋•Œ๋กœ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ํฌ์ƒํ•˜๊ณ  ๋‹จ์ˆœ์„ฑ์ด๋‚˜ ์„ฑ๋Šฅ, ๋˜๋Š” ๋‘˜ ๋‹ค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ์ง€์†์ ์œผ๋กœ ์ ์šฉํ•˜์ง€๋งŒ ์ข…์ข… ์ดํ•ด๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์˜ˆ๋Š” ์ œ๊ฐ€ ํ•ญ์ƒ ํ•ด์‹œ ํ•ญ๋ชฉ ๋งŒ๋ฃŒ๋ฅผ ๊ฑฐ๋ถ€ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ค๊ณ„ ํฌ์ƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ตœ์ƒ์œ„ ํ•ญ๋ชฉ(ํ‚ค ์ž์ฒด)์—๋งŒ ํŠน์ • ์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„ค๊ณ„๊ฐ€ ๋” ๊ฐ„๋‹จํ•ด์ง€๊ณ  ๊ฐ’์€ ๊ทธ๋ƒฅ ๊ฐ์ฒด๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ ˆ๋””์Šค์— ํ•ด์‹œ ๋งŒ๋ฃŒ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ์ข‹์€ ๊ธฐ๋Šฅ์ด์—ˆ์ง€๋งŒ (์‹ค์ œ๋กœ) ๋งŽ์€ ๋ถ€๋ถ„์— ๋งŽ์€ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์—ฌ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ œ๊ฐ€ ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ๋ฒกํ„ฐ ์„ธํŠธ, ์ƒˆ๋กœ์šด ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋ ˆ๋””์Šค๊ฐ€ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ง„์‹ค์˜ ์›์ฒœ์ด ์•„๋‹ˆ๋ผ ๊ทผ์‚ฌ์น˜ ๋ฒ„์ „๋งŒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋””์Šคํฌ์— ํฐ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฒกํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š๊ณ  ์‚ฝ์ž… ์‹œ ์ •๊ทœํ™”, ์–‘์žํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฒกํ„ฐ DB๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ(์ „์ฒด ์ •๋ฐ€๋„ ๋ฒกํ„ฐ)์„ ๊ธฐ์–ตํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํฌ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ ๋‹จ์ง€ ๋‘ ๊ฐ€์ง€ ์ž„์˜์˜ ์˜ˆ์ผ ๋ฟ์ด์ง€๋งŒ, ์ €๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ๋ชจ๋“  ๊ณณ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ฌธ์ œ๋Š” ๋ฌผ๋ก  ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์„ ํฌ์ƒํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข…์ข… ๋งค์šฐ ํฐ ๋ณต์žก์„ฑ์„ ์ฐจ์ง€ํ•˜๋Š” 5%์˜ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์—†์• ์•ผ ํ•  ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค :D