2023๋…„ 6์›” 27์ผยท4๋ถ„ ์ฝ๊ธฐ

Go์˜ ์ธํ„ฐํŽ˜์ด์Šค

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

Go์˜ ์ธํ„ฐํŽ˜์ด์Šค

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

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

์ธํ„ฐํŽ˜์ด์Šค์˜ ์ค‘์š”์„ฑ ์ดํ•ด

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—ฌ๋Ÿฌ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ

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

ํด๋ฆฐ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜

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

์œ ์—ฐํ•œ ์ฝ”๋“œ

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

ํ…Œ์ŠคํŠธ ๋ฐ ์กฐ๋กฑ

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

์†์‰ฌ์šด ์œ ์ง€ ๋ณด์ˆ˜

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

์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ๋ฐ ๊ตฌํ˜„

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜: ํŠน์ • ๋ฉ”์„œ๋“œ ์ง‘ํ•ฉ๊ณผ ์„œ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋Š” ์›ํ•˜๋Š” ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์€ ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌํ˜„์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `Printer`๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ```go type Printer interface { Print(string) error } ```
  2. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์œ ํ˜• ๋งŒ๋“ค๊ธฐ: ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ์ƒˆ ์œ ํ˜•์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Go๋Š” ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜•์— ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ ์„œ๋ช…๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ Go๋Š” ์ž๋™์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ `Printer` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” `TextPrinter` ์œ ํ˜•์„ ์ •์˜ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค: ```go type TextPrinter struct { Prefix string } func (t TextPrinter) Print(s string) error { fmt.Println(t.Prefix + s ) ๋ฐ˜ํ™˜ ์—†์Œ } ```
  3. ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ: ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ˜•์‹์ด ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ˜•์‹์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ ํ˜•์‹์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒํผ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, `TextPrinter` ์œ ํ˜•๊ณผ ํ•จ๊ป˜ `Printer` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค: ```go func main() { var p Printer p = TextPrinter{Prefix: "Text: "} p.Print( "์•ˆ๋…•ํ•˜์„ธ์š”!") } ```

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

์ ์ ˆํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

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

  1. ์ž‘์€ ๋‹จ์ผ ์ฑ…์ž„ ์ธํ„ฐํŽ˜์ด์Šค ์„ ํ˜ธ: ์—ฌ๋Ÿฌ ์ฑ…์ž„์ด ์žˆ๋Š” ๋” ํฐ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์ž‘๊ณ  ์ง‘์ค‘๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ฉด ์œ ์ง€ ๊ด€๋ฆฌ, ํ™•์žฅ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ ๋ฐ ์‚ฌ์šฉ์ด ๋” ์ง๊ด€์ ์ด๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ์†Œ๋น„์ž ์ˆ˜์ค€์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜: Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋””์ž์ธํ•  ๋•Œ ๊ตฌํ˜„์ž์˜ ์š”๊ตฌ ์‚ฌํ•ญ ๋Œ€์‹  ์†Œ๋น„์ž์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋” ์ž˜ ๋ถ„๋ฆฌํ•˜๊ณ  ํŒจํ‚ค์ง€ ๊ฐ„์˜ ๋ถˆํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋™์ž‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ์ง€์ •: ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์€ ์บก์Аํ™”ํ•˜๋Š” ๋™์ž‘์„ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชฉ์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Go์—์„œ๋Š” `Reader`, `Writer` ๋˜๋Š” `Sortable`๊ณผ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด "er" ๋˜๋Š” "able"๊ณผ ๊ฐ™์€ ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์—ญํ• ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋ฉ”์„œ๋“œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด์ง€ ํ™•์ธ: ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๋Š” ์ž์ฒด์ ์œผ๋กœ ์„ค๋ช…์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ชฉ์ ๊ณผ ์˜ˆ์ƒ ๋™์ž‘์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ–‰๋œ ์กฐ์น˜๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ณ  ์ตœ์†Œํ•œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ช…ํ™•ํ•œ ๋ฆฌํ„ด ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ ์„œ๋ช…์ด ๋‹จ์ˆœํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋œ ๋ณต์žกํ• ์ˆ˜๋ก ๊ตฌํ˜„ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.
  5. ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด ์ถ”์ƒํ™”: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ณ  ๋™์ž‘์—๋งŒ ์ง‘์ค‘ํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์„œ๋กœ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ํ†ต์‹ ํ•˜๊ณ  ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์—์„œ ๋” ๋‚˜์€ ๋ชจ๋“ˆ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Go ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‹ค์ œ ์˜ˆ

Go ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ•๋ ฅํ•จ๊ณผ ์œ ์—ฐ์„ฑ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‹ค์ œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

     type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) }
    

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

  2. http.Handler: Go ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ `http.Handler` ์ธํ„ฐํŽ˜์ด์Šค๋Š” HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” `ResponseWriter`์™€ `Request` ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋‹จ์ผ ๋ฉ”์„œ๋“œ `ServeHTTP` ๋’ค์— ์ฒ˜๋ฆฌ ๋…ผ๋ฆฌ๋ฅผ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.

     type Handler interface { ServeHTTP(ResponseWriter, *Request) }
    

    ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  HTTP ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์‹์˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. sort.Interface: Go ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ `sort.Interface`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜์˜ ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     type Interface interface { Len() int Less(i, j int) bool Swap(i, j int) }
    

    ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์ œ๊ณต๋œ `sort.Sort` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

AppMaster ์˜ No-Code ํ”Œ๋žซํผ์˜ Go ์ธํ„ฐํŽ˜์ด์Šค

ํ•„์š”ํ•œ ๊ณณ์— ๋ฐฐํฌ
AppMaster Cloud๋‚˜ ์ž์ฒด AWS, Azure, Google Cloud ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜์„ธ์š”.
์ง€๊ธˆ ๋ฐฐํฌ

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

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

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

ํšจ๊ณผ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ์„ ์œ„ํ•œ ํŒ

์ธํ„ฐํŽ˜์ด์Šค ์ค‘์‹ฌ ๋ฐฑ์—”๋“œ ์„ค๊ณ„
์‹œ๊ฐ์  ๋กœ์ง๊ณผ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณ ๋ คํ•œ Go ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•.
AppMaster ์ฒดํ—˜ํ•˜๊ธฐ

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋””์ž์ธ, ์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•„์ˆ˜ ํŒ์ž…๋‹ˆ๋‹ค.

  1. ์ž‘๊ณ  ์ง‘์ค‘๋œ ์ธํ„ฐํŽ˜์ด์Šค: SRP(Single Responsibility Principle)๋ฅผ ์ค€์ˆ˜ํ•˜๊ณ  ํŠน์ • ๋ชฉ์ ์— ๋งž๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ดํ•ด, ์œ ์ง€ ๋ฐ ๊ตฌํ˜„์ด ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋” ๋‚˜์€ ๊ด€์‹ฌ ๋ถ„๋ฆฌ๋ฅผ ์ด‰์ง„ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ๊นจ๋—ํ•˜๊ณ  ๋ชจ๋“ˆํ™”ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜๋ฝ, ๊ตฌ์กฐ์ฒด ๋ฐ˜ํ™˜: ํ•จ์ˆ˜์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ Go ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ์ œํ•œ ์—†์ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ๋ถ„๋ฆฌ๋œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๊ตฌ์กฐ์ฒด ๋ฐ˜ํ™˜์€ ํŠน์ • ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฐ˜ํ™˜ ๋™์ž‘์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ: SRP๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๋ณด๋‹ค ์ •๊ตํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Go๋Š” ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค์— ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋” ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋” ํฌ๊ด„์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋ช…์‹œ์  ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: Go์—๋Š” ์˜ค๋ฅ˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ˆ์™ธ๋‚˜ try/catch ๊ตฌ์กฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ถŒ์žฅ ์‚ฌ๋ก€๋Š” ์—ฌ๋Ÿฌ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ์˜ค๋ฅ˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ ์„œ๋ช…์— ํ†ตํ•ฉํ•˜์—ฌ ๋ชจ๋“  ๊ตฌํ˜„์—์„œ ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ๊ด€๋ฆฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  5. ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ์˜: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ฝ”๋“œ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ์˜ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์‹ค์ œ ์ข…์†์„ฑ์„ ๋ชจ์˜ ๊ฐ์ฒด๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์™ธ๋ถ€ ์š”์ธ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ ์ค‘์ธ ์ฝ”๋“œ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์—…ํ•  ๋•Œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•  ๊ธฐํšŒ๋ฅผ ์ฃผ์‹œํ•˜์‹ญ์‹œ์˜ค. ์—ฌ๋Ÿฌ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ๋˜๋Š” ๊ธด๋ฐ€ํ•œ ๊ฒฐํ•ฉ์ด ์žˆ๋Š” ์˜์—ญ์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…์œผ๋กœ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ข‹์€ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

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

์ถ”๊ฐ€ ํŒ์œผ๋กœ AppMasterno-code ํ”Œ๋žซํผ์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•˜๊ฑฐ๋‚˜, Go ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜, ๋‹จ์ˆœํžˆ no-code ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœ ์Šคํƒ์— ํ†ตํ•ฉํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ท€์ค‘ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ์˜ ์ฃผ์š” ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋‚˜์š”?

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

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

AppMaster์˜ ์ฝ”๋“œ ์—†๋Š” ํ”Œ๋žซํผ์€ Go ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”?

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

Go์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹ค์ œ ์˜ˆ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
Go์˜ ์ธํ„ฐํŽ˜์ด์Šค | AppMaster