Go์ ์ธํฐํ์ด์ค
๋ ๋์ ์ํํธ์จ์ด ๋์์ธ๊ณผ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ์ํด Go์์ ์ธํฐํ์ด์ค ๊ตฌํ์ ๋ํ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ผ์ธ์. Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ธํฐํ์ด์ค ๊ตฌํ์ ๋ง์คํฐํ๋ ๋ฐ ๋์์ด ๋๋ ๋ชจ๋ฒ ์ฌ๋ก, ํ, ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์ธ์.

์ธํฐํ์ด์ค๋ ๊นจ๋ํ๊ณ ๋ชจ๋์์ด๋ฉฐ ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ๋์์ด ๋๋ Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. SOLID ์์น์ ๊ตฌํ์ ์ด์งํ๊ณ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ฉฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํจ์จ์ ์ธ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Go์ ์ธํฐํ์ด์ค๋ ๊ตฌํ์์ ๋์์ ๋ถ๋ฆฌํ๋ฏ๋ก ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ์ ํ์์ ์๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ์ฝ๋ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ณ ๊ด์ฌ์ฌ๋ฅผ ๋ ์ ๋ถ๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์ธํฐํ์ด์ค์ ์ค์์ฑ ์ดํด
์ธํฐํ์ด์ค๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ค์ํ ์ญํ ์ ํ๋ฉฐ ๊ฐ๋ฐ์์๊ฒ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. Go์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๋ ์ป์ ์ ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ
์ธํฐํ์ด์ค๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ ํน์ ์ธ๋ถ ์ฌํญ๋ณด๋ค๋ ํ์ํ ๋์์ ์ค์ ์ ๋ก๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฝ๋ ์ฌ์์ฑ์ ๋ฐฉ์งํ๊ณ ์ค๋ฅ ๋๋ ๋ถ์ผ์น ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํด๋ฆฐ ์ํํธ์จ์ด ์ํคํ ์ฒ
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๋ค ๊นจ๋ํ๊ณ ๋ชจ๋ํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ๊ณ์ฝ์ด ํ์ํ ๋์์ ๊ฐ์กฐํจ์ ๋ฐ๋ผ ์ฝ๋์ ๊ตฌ์ฑ ์์๊ฐ ๋ณด๋ค ๋์จํ๊ฒ ๊ฒฐํฉ๋๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์์ง๋๋ค.
์ ์ฐํ ์ฝ๋
์ธํฐํ์ด์ค์ ์ํด ์ด์ง๋๋ ๊ตฌ์ฑ ์์์ ๋ถ๋ฆฌ๋ ๋ ํฐ ์ ์ฐ์ฑ๊ณผ ์ฝ๊ฒ ์ ์ํ ์ ์๋ ์ฝ๋๋ฅผ ํ์ฉํฉ๋๋ค. ํน์ ๊ตฌํ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค ๊ณ์ฝ์ ์ค์ํ๋ ํ ๋๋จธ์ง ์์คํ ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ฉด์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ํ ์คํธ ๋ฐ ์กฐ๋กฑ
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ์ ์กฐ๋กฑ์ด ํจ์ฌ ์ฌ์์ง๋๋ค. ๊ตฌ์ฑ ์์์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด ํ ์คํธ ์ค์ ๋ชจ์ ๊ตฌํ์ ๋์ฒดํ ์ ์์ผ๋ฏ๋ก ์ฝ๋์ ํน์ ๋ถ๋ถ์ ๋ ๊ฐ๋จํ๊ฒ ๋ถ๋ฆฌํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค.
์์ฌ์ด ์ ์ง ๋ณด์
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ตฌ์ฑ ์์๊ฐ ๋จ์ผ ์ฑ ์ ์์น ์ ๋ฐ๋ผ ์ ๊ตฌ์ฑ๋๊ณ ์ ๋ ฌ๋์ด ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ณ ์๊ธฐ์น ์์ ๋ถ์์ฉ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋๋ค.
์ธํฐํ์ด์ค ์ ์ ๋ฐ ๊ตฌํ
Go์์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ๊ตฌํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
- ์ธํฐํ์ด์ค ์ ์: ํน์ ๋ฉ์๋ ์งํฉ๊ณผ ์๋ช ์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ ์ํ๋ ๋์์ ์ค๋ช ํ๋ฉฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ์ ํ์ ์ด๋ฌํ ๋ฉ์๋์ ํด๋นํ๋ ๊ตฌํ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด `Printer`๋ผ๋ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค. ```go type Printer interface { Print(string) error } ```
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ ํ ๋ง๋ค๊ธฐ: ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ํ์ํ ๋ชจ๋ ๋ฉ์๋์ ๋ํ ๊ตฌํ์ ์ ๊ณตํ๋ ์ ์ ํ์ ๋ง๋ญ๋๋ค. Go๋ ๋ช ์์ ์ธํฐํ์ด์ค ์ ์ธ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ ํ์ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์๋ช ๊ณผ ์ผ์นํ๋ ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ Go๋ ์๋์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ง์กฑํ๋ ๊ฒ์ผ๋ก ์ธ์ํฉ๋๋ค. ๋ค์์ `Printer` ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ `TextPrinter` ์ ํ์ ์ ์ํ๋ ์์ ๋๋ค: ```go type TextPrinter struct { Prefix string } func (t TextPrinter) Print(s string) error { fmt.Println(t.Prefix + s ) ๋ฐํ ์์ } ```
- ์ธํฐํ์ด์ค ์ฌ์ฉ: ์ด์ ์ธํฐํ์ด์ค์ ์ด๋ฅผ ๊ตฌํํ๋ ํ์์ด ์์ผ๋ฏ๋ก ์ฝ๋์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ชจ๋ ํ์์ผ๋ก ์์ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ตฌํ์ ์ ๊ณตํ๋ ๊ฒ์ ํ์ํ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ์ ํ์์ ๋ง๋๋ ๊ฒ๋งํผ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด, `TextPrinter` ์ ํ๊ณผ ํจ๊ป `Printer` ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค: ```go func main() { var p Printer p = TextPrinter{Prefix: "Text: "} p.Print( "์๋ ํ์ธ์!") } ```
์ฝ๋์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๋ค ์ ์ฐํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก Go์ ์ถ์ํ ๋ฐ ์ ํ ์์คํ ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
์ ์ ํ ์ธํฐํ์ด์ค ์ค๊ณ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
Go์์ ์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ ๋ ํน์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ฉด ์ฝ๋๋ฒ ์ด์ค์ ์ ์ง ๊ด๋ฆฌ, ๊ฐ๋ ์ฑ ๋ฐ ์ ์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์น์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ก ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ๊ฐ์ ์ํํ ํต์ ์ ์ง์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์์ ๋จ์ผ ์ฑ ์ ์ธํฐํ์ด์ค ์ ํธ: ์ฌ๋ฌ ์ฑ ์์ด ์๋ ๋ ํฐ ์ธํฐํ์ด์ค๋ณด๋ค ์๊ณ ์ง์ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ ํธํฉ๋๋ค. ๋จ์ผ ์ฑ ์ ์์น์ ์ค์ํ๋ฉด ์ ์ง ๊ด๋ฆฌ, ํ์ฅ์ฑ ๋ฐ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ด ๋ ์ฌ์์ง๋๋ค. ์์ ์ธํฐํ์ด์ค๋ ๊ตฌํ ๋ฐ ์ฌ์ฉ์ด ๋ ์ง๊ด์ ์ด๋ฏ๋ก ์ฝ๋๊ฐ ๋ ๊น๋ํด์ง๋๋ค.
- ์๋น์ ์์ค์์ ์ธํฐํ์ด์ค ์ ์: Go์์ ์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ ๋ ๊ตฌํ์์ ์๊ตฌ ์ฌํญ ๋์ ์๋น์์ ์๊ตฌ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํจํค์ง์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด ๊ด์ฌ์ฌ๋ฅผ ๋ ์ ๋ถ๋ฆฌํ๊ณ ํจํค์ง ๊ฐ์ ๋ถํ์ํ ์ข ์์ฑ์ ์ ํํ ์ ์์ต๋๋ค.
- ๋์์ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ์ด์ค ์ด๋ฆ ์ง์ : ์ธํฐํ์ด์ค ์ด๋ฆ์ ์บก์ํํ๋ ๋์์ ๋ฐ์ํ์ฌ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ํ์ํด์ผ ํฉ๋๋ค. Go์์๋ `Reader`, `Writer` ๋๋ `Sortable`๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด "er" ๋๋ "able"๊ณผ ๊ฐ์ ์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ด๋ฌํ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ์ธํฐํ์ด์ค์ ์ญํ ์ ์ฝ๊ฒ ํ์ ํ๊ณ ์ธํฐํ์ด์ค๊ฐ ์ํํ๋ ์์ ์ ์์ธกํ ์ ์์ต๋๋ค.
- ๋ฉ์๋๊ฐ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ์ดํดํ๊ธฐ ์ฌ์ด์ง ํ์ธ: ์ธํฐํ์ด์ค ๋ฉ์๋๋ ์์ฒด์ ์ผ๋ก ์ค๋ช ์ด ๊ฐ๋ฅํ๊ณ ๋ชฉ์ ๊ณผ ์์ ๋์์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค. ์ํ๋ ์กฐ์น๋ฅผ ์ค๋ช ํ๋ ๋ฉ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ์ต์ํ์ ๋งค๊ฐ๋ณ์์ ๋ช ํํ ๋ฆฌํด ์ ํ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ์๋ช ์ด ๋จ์ํ๋๋ก ํ์ญ์์ค. ์ธํฐํ์ด์ค๊ฐ ๋ ๋ณต์กํ ์๋ก ๊ตฌํํ๊ณ ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ๊ตฌํ ์ธ๋ถ ์ ๋ณด ์ถ์ํ: ์ธํฐํ์ด์ค๋ ์ฐ๊ฒฐํ๋ ๊ตฌ์ฑ ์์์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ์ํํ๊ณ ๋์์๋ง ์ง์คํ๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค. ์ด ์ถ์ํ๋ฅผ ํตํด ๊ตฌ์ฑ ์์๋ ์๋ก ์์กดํ์ง ์๊ณ ํต์ ํ๊ณ ํ์ ํ ์ ์์ผ๋ฏ๋ก ์ํํธ์จ์ด ์ํคํ ์ฒ์์ ๋ ๋์ ๋ชจ๋์ฑ๊ณผ ์ ์ฐ์ฑ์ ์ป์ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ ๋ ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ๋ฉด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณด๋ค ์ฝ๊ฒ โโ๊ด๋ฆฌํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ํจ๊ณผ์ ์ด๊ณ ์ ๊ตฌ์ฑ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์์ต๋๋ค.
Go ์ธํฐํ์ด์ค์ ์ค์ ์
Go ์ธํฐํ์ด์ค์ ๊ฐ๋ ฅํจ๊ณผ ์ ์ฐ์ฑ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ธํฐํ์ด์ค๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ๋ช ๊ฐ์ง ์ค์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
-
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) }์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ํ์ผ, ๋คํธ์ํฌ ์ฐ๊ฒฐ, ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฒํผ ๋ฐ ๊ธฐํ ์คํธ๋ฆผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ค ๋๋ ์ฑํฌ๋ก ์์ ํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ ๋ฐ ๋ ๋์ ์ถ์ํ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
-
http.Handler: Go ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ `http.Handler` ์ธํฐํ์ด์ค๋ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ด์์ ์ธ ๋ฐฉ๋ฒ์ ๋ํ๋ ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ `ResponseWriter`์ `Request` ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ํ์ฉํ๋ ๋จ์ผ ๋ฉ์๋ `ServeHTTP` ๋ค์ ์ฒ๋ฆฌ ๋ ผ๋ฆฌ๋ฅผ ์ถ์ํํฉ๋๋ค.
type Handler interface { ServeHTTP(ResponseWriter, *Request) }๊ฐ๋ฐ์๊ฐ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ์ ์ง์ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ HTTP ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์กฐํฉํ ์ ์๋ ๋ชจ๋์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
-
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๋ Go ์ธํฐํ์ด์ค์ ๊ฐ๋ ฅํจ๊ณผ ์ ์ฐ์ฑ์ ํ์ฉํ์ฌ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๋ค. AppMaster ์ ์ํ ๋น์ ์ฅ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Go๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋๋ฏ๋ก ๊ธฐ์กด ์ฑ ๊ฐ๋ฐ ์ ๊ทผ ๋ฐฉ์๋ณด๋ค ์คํ ์๋๊ฐ ๋น ๋ฅด๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฝ์ต๋๋ค.
๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ค์์ผ๋ก์จ AppMaster ๊ฐ๋ฐ์๊ฐ Postgresql ํธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธํ๋๋ ๋์ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค. AppMaster Go ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ํํ ๊ฐ๋ฐ ๊ฒฝํ์ ํตํด ๊ณ ์ฑ๋ฅ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
Go ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ณต์กํ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฌํ Go ์ธํฐํ์ด์ค์ ํตํฉ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ 10๋ฐฐ ๋ ๋น ๋ฅด๊ณ 3๋ฐฐ ๋ ๋น์ฉ ํจ์จ์ ์ผ๋ก ๋ง๋๋ AppMaster ์ ์ฌ๋ช ์ ์ง์ํ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์ํฐํ๋ผ์ด์ฆ ๋ฐ ๊ณ ๋ถํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. AppMaster ์ ํ๋ซํผ์ ์ต์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ Go ์ธํฐํ์ด์ค๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง์ ๋ํ ํ๋ฅญํ ์๋ก์ ์๊ฐ์ ์ํ์ ๊ฒฌ๋๋ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ฐ๋ ๊ธธ์ ์ด์ด์ค๋๋ค.

ํจ๊ณผ์ ์ธ ์ธํฐํ์ด์ค ์ฌ์ฉ์ ์ํ ํ
Go์์ ์ธํฐํ์ด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ธ, ์ฝ๋ ํ์ง ๋ฐ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ์ด ํฌ๊ฒ ํฅ์๋ ์ ์์ต๋๋ค. ๋ค์์ ์ธํฐํ์ด์ค ์ฌ์ฉ์ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด ๋ฐ๋ฅผ ์ ์๋ ๋ช ๊ฐ์ง ํ์ ํ์ ๋๋ค.
- ์๊ณ ์ง์ค๋ ์ธํฐํ์ด์ค: SRP(Single Responsibility Principle)๋ฅผ ์ค์ํ๊ณ ํน์ ๋ชฉ์ ์ ๋ง๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ธํฐํ์ด์ค๊ฐ ์์์๋ก ์ดํด, ์ ์ง ๋ฐ ๊ตฌํ์ด ๋ ํธํฉ๋๋ค. ๊ทธ๋ค์ ๋ ๋์ ๊ด์ฌ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ์ฌ ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ ๋ชจ๋ํํฉ๋๋ค.
- ์ธํฐํ์ด์ค ์๋ฝ, ๊ตฌ์กฐ์ฒด ๋ฐํ: ํจ์์์ ์ธํฐํ์ด์ค๋ฅผ ์๋ฝํ๊ณ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ Go ๋์์ธ ํจํด์ ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ฉด ์ ํ ์์ด ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์์ ํ ์ ์๋ ๋ณด๋ค ์ ์ฐํ๊ณ ๋ถ๋ฆฌ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ๋ฉด ๊ตฌ์กฐ์ฒด ๋ฐํ์ ํน์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ๋ฐํ ๋์์ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ฌ ์์ธก ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
- ์ธํฐํ์ด์ค ๊ตฌ์ฑ: SRP๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์๊ณ ๋ณด๋ค ์ ๊ตํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ธํฐํ์ด์ค ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค. Go๋ ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ์ธํฐํ์ด์ค์ ํฌํจํ๋ ๊ฒ์ ์ง์ํ๋ฏ๋ก ๋ ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐํฉํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ์ ์งํ๋ฉด์ ๋ ํฌ๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ช ์์ ์ค๋ฅ ์ฒ๋ฆฌ: Go์๋ ์ค๋ฅ ๊ด๋ฆฌ๋ฅผ ์ํ ์์ธ๋ try/catch ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค. ๋์ ๊ถ์ฅ ์ฌ๋ก๋ ์ฌ๋ฌ ๋ฐํ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ค ํ๋๋ ์ค๋ฅ ์ ํ์ ๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์๋ช ์ ํตํฉํ์ฌ ๋ชจ๋ ๊ตฌํ์์ ์ผ๊ด๋ ์ค๋ฅ ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ํ ์คํธ ๋ฐ ๋ชจ์: ์ธํฐํ์ด์ค๋ ์ฝ๋์ ์ฌ๋ฐ๋ฅธ ๋์์ ํ์ธํ๊ธฐ ์ํด ๋ชจ์ ๊ตฌํ์ ์์ฑํ์ฌ ํ ์คํธ๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ๋ชฉ์ ์ผ๋ก ์ค์ ์ข ์์ฑ์ ๋ชจ์ ๊ฐ์ฒด๋ก ๋์ฒดํ ์ ์์ผ๋ฏ๋ก ํ ์คํธ๊ฐ ์ธ๋ถ ์์ธ์ ์์กดํ์ง ์๊ณ ํ ์คํธ ์ค์ธ ์ฝ๋์ ์ง์คํ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ฆฌํฉํ ๋ง: ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ํ ๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ ๊ธฐํ๋ฅผ ์ฃผ์ํ์ญ์์ค. ์ฌ๋ฌ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ๋๋ ๊ธด๋ฐํ ๊ฒฐํฉ์ด ์๋ ์์ญ์ ์๋ณํ๋ ๊ฒ์ ์ธํฐํ์ด์ค ๋์ ์ผ๋ก ์ด์ ์ ์ป์ ์ ์์์ ๋ํ๋ด๋ ์ข์ ์งํ์ ๋๋ค.
๊ฒฐ๋ก
Go์์ ์ธํฐํ์ด์ค ์ฌ์ฉ์ ์ดํดํ๊ณ ์๋ฌํ๋ ๊ฒ์ ์ ๋ฌธ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ฉด ๋ณด๋ค ์ ์ฐํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ก ์ด์ด์ ธ ๊ถ๊ทน์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง์ ๊ฐ์ ํ๊ณ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ธํฐํ์ด์ค์ ์ด์ ๊ณผ ์ญํ ์ ์ดํด๋ณด์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ธํฐํ์ด์ค ์ค๊ณ ๋ฐ ๊ตฌํ, ๋ชจ๋ฒ ์ฌ๋ก, ์ค์ ์ฌ๋ก, AppMasterno-code ํ๋ซํผ๊ณผ์ ๊ด๊ณ์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ์ด๋ฌํ ์ง์นจ๊ณผ ํ์ ๋ฐ๋ฅด๋ฉด ์ธํฐํ์ด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ ๊น๋ํ ์ฝ๋, ๋ ๋์ ์ถ์ํ ๋ฐ ํฅ์๋ ์ฌ์ฌ์ฉ์ฑ์ ์ป์ ์ ์์ต๋๋ค.
์ถ๊ฐ ํ์ผ๋ก AppMasterno-code ํ๋ซํผ์ด ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ฃผ์ ํ์ง ๋ง๊ณ ์ดํด๋ณด์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ฑฐ๋, Go ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅํ๊ฑฐ๋, ๋จ์ํ no-code ์๋ฃจ์ ์ ๊ฐ๋ฐ ์คํ์ ํตํฉํ๋ ค๋ ๊ฐ๋ฐ์์๊ฒ ๊ท์คํ ๋ฆฌ์์ค๊ฐ ๋ ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ธํฐํ์ด์ค๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ, ์ ์ฐ์ฑ ๋ฐ ๊ตฌ์ฑ ์์ ๋ถ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ Go์์ ์ค์ํฉ๋๋ค. ๊น๋ํ ๋ชจ๋์ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ ๋ฐ ๋์์ด ๋๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ํ์ฅํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค ์ฌ์ฉ์ ์ฃผ์ ์ด์ ์ ๊ฐ๋ฐ์๊ฐ ์ ์ฐํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ๋์์ ์ ์ํ์ฌ ์๋ก ๋ค๋ฅธ ์ ํ์ด ๋์ผํ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋๋ก ํ์ฉํ๊ณ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ๊ณ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
Go์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ํ๋ ๋ฉ์๋์ ์๋ช ์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์๋ช ๊ณผ ์ผ์นํ๋ ์ ํ ๋ฐ ํด๋น ๋ฉ์๋๋ฅผ ๋ง๋ญ๋๋ค. Go๋ ์ด๋ฌํ ์ ํ์ด ๋ช ์์ ์ ์ธ์ด ํ์ํ์ง ์์ ์ธํฐํ์ด์ค๋ฅผ ์ถฉ์กฑํจ์ ์๋์ผ๋ก ์ธ์ํฉ๋๋ค.
Go์์ ์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก์๋ ๋จ์ผ ์ฑ ์ ์์น์ ๋ฐ๋ผ ์๊ณ ์ง์ค๋ ์ธํฐํ์ด์ค ์ฌ์ฉ, ๋์์ ๋ฐ๋ผ ์ธํฐํ์ด์ค ์ด๋ฆ ์ง์ , ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ธฐ, ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค ๋์์ธ์ด ํฌํจ๋ฉ๋๋ค.
AppMaster ์ ์ฝ๋ ์๋ ํ๋ซํผ์ Go ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๋ค. ์ํ ๋น์ ์ฅ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Go๋ก ์์ฑ๋์ด ์ธ์์ ์ธ ์ฑ๋ฅ๊ณผ ์ ์ง ๊ด๋ฆฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. AppMaster ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์๋ถํฐ ์์ฑํ์ฌ ๊ธฐ์ ์ ๋ถ์ฑ๊ฐ ์๋๋ก ํ๊ณ Postgresql ํธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํธํ์ฑ์ ์ ๊ณตํฉ๋๋ค.
Go์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ค์ฉ์ ์ธ ์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 'io.Reader' ๋ฐ 'io.Writer' ์ธํฐํ์ด์ค์ ๋๋ค. ์ด๋ฌํ ์ ์ฐํ ์ธํฐํ์ด์ค๋ ๋ค์ํ ๋ฐ์ดํฐ ์์ค ๋ฐ ์ฑํฌ๋ฅผ ์ง์ํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ ์คํธ๋ฆผ๊ณผ ์ํํ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ๋ฐ์๋ ๊ธฐ๋ณธ ์์ค ๋๋ ๋์ ์ ํ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ์ํด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.


