Backend/๐ฉต Go(6)
-
ํ ํฌ ๋ธ๋ก๊ทธ ๋ชจ์๋ณด๊ธฐ ๊ฐ๋ฐ ๊ธฐ๋ก (2) : Go ์ธ์ด์ ์๋ฒ๋ฆฌ์ค ํ๋ ์์ํฌ
์๋ก ์ด ๊ธ์ Golang ์ดํ๋ฆฌ์ผ์ด์ ์ Serverless framework ๋ฅผ ์ด์ฉํด AWS Lambda ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋ค๋ฃฌ๋ค.ํ์ฌ ์ด์์ค์ธ ์ฌ์ด๋ ํ๋ก์ ํธ(๐ ํ ํฌ ๋ธ๋ก๊ทธ ๋ชจ์๋ณด๊ธฐ) ๋ Go ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก AWS Lambda(์ดํ ๋๋ค)์ ๋ฐฐํฌ๋์ด ์๋ค. ์ฒ์ ๋๋ค๋ฅผ ๋ฐฐ์ธ ๋ AWS Console ์์ ์ผ์ผ์ด API Gateway ๋ฅผ ์ค์ ํ๊ณ Lambda ํจ์์ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ ๊ธฐ์ต์ด ๋๋๋ฐ, ๋น์๋ง ํด๋ ๊ฐ๋จํ ํ์ด์ฌ ํจ์๋ฅผ ํธ์ถํ๋ ์ ๋๋ผ AWS Console ์ ์ฝ๋๋ฅผ ๋ณต๋ถํ๋ ์ ๋๋ก ๋๋ค๋ฅผ ๋ง๋ณด๊ธฐ ํ๋ค. ํ์ง๋ง ์ค์ ๋ก ์ด์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๋จ์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋๋ค์ ๋ฐฐํฌํ ์ ์์๋ค. ํ์ผ ์๋ ๋ง์ ๋ฟ๋๋ฌ ๋งค๋ฒ ๋ฐฐํฌํ ๋ ๋ง๋ค ๊ทธ๋ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ..
2024.10.22 -
[Go] goroutine ๊ณผ channel ๋ก API ์คํ ์๊ฐ ๊ฐ์ ํ๊ธฐ
๋ชฉ์ฐจ- ์๋ก - ๋๊ธฐ์ ํธ์ถ- ๋น๋๊ธฐ ํธ์ถ : Goroutine ํ์ฉ- ๋น๋๊ธฐ ํธ์ถ ๊ฐ์ : Channel ํ์ฉ- ๊ฒฐ๋ก ์๋ก ์ฌ๋ฌ ํ ํฌ ๊ธฐ์ ์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ธฐ ์ข์ํฉ๋๋ค. ๋ค๋ง ๋งค๋ฒ ์ฌ๋ฌ ๋ธ๋ก๊ทธ ํํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ค ๋ณด๋ ์์ฃผ ๊ฐ๋ ๋ธ๋ก๊ทธ๋ ๋ฐ๋ก ๋ชจ์์ ์ฝ๊ณ ์ถ์ ์๊ฐ์ด ๋ค๋๋ผ๊ณ ์. ์ด๋ฅผ ์ํด Go๋ฅผ ํ์ฉํ ํ ํฌ ๋ธ๋ก๊ทธ ์คํฌ๋ํผ๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ก ํ์ต๋๋ค. ์ด๋ฏธ ๊ทธ๋ฐ ์๋น์ค๋ ๋ง์ง ์๋๊ณ ์? ๋ง์ต๋๋ค. ๊ทธ๋๋ ํ๋ฒ ์ง์ ํด๋ณด๊ณ ์ถ์์ต๋๋ค๐.๊ธฐ์ ์ ๋ธ๋ก๊ทธ๋ค์ ๋ค์ํ ํ๋ซํผ์ ํ์ฉํฉ๋๋ค. Medium ๋ถํฐ ์์ฒด ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๋ ๊ณณ๊น์ง, ๋ค์ํ ๋ฐฉ์์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ๊ธฐ ๋ค๋ฅธ ํํ์ ํ๋ซํผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ง๋ ์คํฌ๋ํ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ ๋ ๋ธ๋ก๊ทธ ํ๋ซํผ์ ๋ง๋ ์คํฌ๋ํ ๊ตฌํ์ฒด๋ฅผ ๋ง..
2024.09.13 -
๋์ปค ์ปจํ ์ด๋ Go ์๋ฒ๊ฐ SIGTERM ์ ๋ฌด์ํ ์ด์ (feat. PID 1)
๋ฐฐ๊ฒฝGo ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ ๋ ํน์ ๋ก์ง์ ์ํํ๊ณ ์ ํ์ต๋๋ค.์ฌ์ฉ์๊ฐ ์๋์ผ๋ก (๋ก์ปฌ) ์๋ฒ๋ฅผ ์ข ๋ฃํ๋ฉด syscall.SIGINT ๊ฐ์ด channel ์ ํ ๋น๋๋ฉด์ goroutine ๋ด๋ถ๊ฐ ์คํ๋์ด๋ก์ง ์ํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ(os.Exit(1)) ๋ฉ๋๋ค.์ค์ ๋ก ๋ก์ปฌ์์ ์๋ฒ๋ฅผ ์คํํ๊ณ ctrl + C ๋ช ๋ น์ด๋ก ์๋ฒ๋ฅผ ์ข ๋ฃํ๋ฉด goroutine ๋ด๋ถ ๋ก์ง์ด ์ ์คํ๋์ต๋๋ค.func (s *Server) StartServer() error { s.setServerInfo() channel := make(chan os.Signal, 1) signal.Notify(channel, syscall.SIGINT) // (1) ๋จ์ ์ข ๋ฃ ์๊ทธ๋ go func() { ๋์ปค ์ปจํ ์ด๋ํ ํ์๋ ์..
2024.09.10 -
[Go] panic: runtime error: invalid memory address or nil pointer dereference ์๋ฌ ํด๊ฒฐ
๊ฐ์fiber ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์์ผ ์ฑํ ์๋ฒ๋ฅผ ๊ฐ๋ฐ ์ค http ์์ websocket ์ผ๋ก ํ๋กํ ์ฝ์ ์ ๊ทธ๋ ์ด๋ ํ๋ ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ . ์๋ฌ ๋ฐ์์ฃผ์์ ๋ฌ์๋์ ๊ฒ ์ฒ๋ผ websocket handler ๋ด๋ถ์์ fiber.Ctx ์ ์ ๊ทผํ์๋ง์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ด๊ฑฐ๋ nil pointer ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋๋ฐ, ServeHttp() ๋ฉ์๋ ์ง์ ์์ ์์ c ๋ฅผ ๋ก๊ทธ๋ก ํ์ธํ์ ๋ ์ ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.์ฆ websocker ํธ๋ค๋ฌ ๋ด๋ถ์์ fiber.Ctx ๋ฅผ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ฒ์ด ์์ธ์ด๋ผ ์๊ฐํ๋ค.func (r *Room) ServeHTTP(c *fiber.Ctx) error { if r == nil { return fiber.NewError(fiber.St..
2024.08.06 -
์์๋ฅผ ํตํ Go ๊ฐ์ฒด ์์ฑ ์ดํดํ๊ธฐ
๋ชฉํ Go์ struct ์ดํด struct์ method ์ดํด method ์ function ์ ์ฐจ์ด ์ดํด ๊ตฌ์กฐ์ฒด(Struct ) ๋? Go ์ธ์ด์ struct๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃํ ์ ๋๋ค. struct๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ํ๋๋ฅผ ๋ฌถ์ด ํ๋์ ๋ ์ฝ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ด๋ จ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ๊ณ ๊ตฌ์กฐํํ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด ์ ์ ๊ตฌ์กฐ์ฒด(struct)๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค. type ํ์ ๋ช struct { ํ๋๋ช ํ์ ... ํ๋๋ช ํ์ } ์ด๊ธฐํ ์๋ ์์์ฝ๋๋ Account ๊ตฌ์กฐ์ฒด๋ฅผ Owner(๊ณ์ข์ฃผ)์ Balance(์์ก) ํ๋์ ํจ๊ป ์ ์ํ์ต๋๋ค. ๊ตฌ์กฐ์ฒด๋ก ๋ณ์๋ฅผ ์์ฑํ ๋ ํ๋ ์์๋ก ์ด๊ธฐ๊ฐ์ ๋์ ํ๊ฑฐ๋, ํ๋๋ช ์ ์ง์ ํ์ฌ ์ด๊ธฐํ ํ ์..
2024.01.25 -
[Golang] new, make, pointer ํ๊ตฌ
๋ชฉ์ฐจ 1. new ํค์๋ 2. ํ์ ํฌ์ธํฐ ์ค๋ช 3. ํค์๋ 4. ์์ฝ Go ์ธ์ด์ new ์ make ๋ ์๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค๋ ๊ณตํต์ ์ด ์์ง๋ง ์ ์ฉํ ์ํฉ๊ณผ ๋์์ด ๋ค๋ฅธ๋ค. ๋์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ๋น๊ตํ์ฌ ์ด๋ ์ํฉ์ ์ ํฉํ๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์์๋ณด๊ณ , ๋๋ถ์ด ์๊ฒ๋ ํฌ์ธํฐ ์ง์๋ ๊ฐ์ด ์ ๋ฆฌํด๋ณธ๋ค. new ํค์๋ ์ฌ์ฉ ๋ชฉ์ new ๋ ์ฃผ๋ก ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ (์์ ํ์ )์ ํฌ์ธํฐ๋ฅผ ํ ๋นํ ๋ ์ฌ์ฉ๋๋ค. ์ฆ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํ ๋นํ๊ณ ํด๋น ์ธ์คํด์ค์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค. new ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ ์ ๋ก๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ฉฐ, new ๋ก ์์ฑ๋ ๊ฐ์ 0 ๋๋ nil ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๋ค. var k *int k = new(int) fmt.Println("k: ", k, " *k: ", *..
2024.01.07