[Go] gorm

gorm์€ go์˜ ๋Œ€ํ‘œ์ ์ธ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋‹ค.
ํ˜ธ๋ถˆํ˜ธ๊ฐ€ ๋งŽ์ด ๊ฐˆ๋ฆฌ๊ธด ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿผ์—๋„ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์“ฐ์ธ๋‹ค.



์„ค์น˜

๊ธฐ๋ณธ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๊ณ 

go get -u gorm.io/gorm

์—ฌ๋А DB ๋ชจ๋“ˆ๋“ค์ด ๊ทธ๋ ‡๋“ฏ, ์‚ฌ์šฉํ•  DB์˜ ๋“œ๋ผ์ด๋ฒ„๋„ ๊น”์•„์•ผ ํ•œ๋‹ค.

go get -u gorm.io/driver/postgres

๋‚œ postgres๋‹ค.




๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

db ์—ฐ๊ฒฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    databaseURL := "host=localhost user=postgres password=... dbname=postgres port=5432 sslmode=disable"

	db, err := gorm.Open(postgres.Open(databaseURL), &gorm.Config{})
	if err != nil {
		panic(err)
	}

์ € db ๊ฐ์ฒด ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ด๊ฒƒ์ €๊ฒƒ ๋Œ๋ ค์“ฐ๋ฉด ๋œ๋‹ค.




๋ชจ๋ธ ์ •์˜

๋ชจ๋ธ์€ gorm.Model๋งŒ ์ž„๋ฒ ๋”ฉํ•ด์„œ ๊ตฌ์กฐ์ฒด๋กœ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

์ € ์•ˆ์— ๋“ค์–ด๊ฐ„ Model์€

์ด๋Ÿฐ ๊ธฐ๋ณธํ•„๋“œ๋“ค์ด ๋“ค์–ด์žˆ๋‹ค.

ํ…Œ์ด๋ธ”์ƒ์„ฑ์€ ์ด๋ ‡๊ฒŒ ๋Œ๋ฆฌ๋ฉด ๋˜๊ณ 

์ด๋Ÿฐ์‹์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์ž๋™ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค.




Insertํ•˜๊ธฐ

Create ํ•จ์ˆ˜์— ๋ชจ๋ธ ๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ์ƒ์„ฑ์ด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ




์กฐํšŒํ•˜๊ธฐ

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ 

id๊ฐ€ 4์ธ๊ฑธ ํ•˜๋‚˜ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, ์ด๋Ÿฐ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿผ ๋”ฑ ์ฐ์–ด์„œ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋‹ค.

์œ ๋™์ ์ธ ํ•„ํ„ฐ๋ฅผ ์ฃผ๋ ค๋ฉด ์ด๋ ‡๊ฒŒ ๋ฌธ์ž์—ด ๋–ก์น ์„ ์ค˜์•ผ ํ•œ๋‹ค.

?๊ฐ€ replacement๋‹ค.


๊ทธ๋Ÿผ ์ ์ ˆํžˆ ์ฐพ์•„์„œ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋‹ค.


list๋กœ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด First ๋Œ€์‹  Find๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.


ํ•„ํ„ฐ ๋ฐฉ์‹์€ ๊ฐ™๋‹ค.




Updateํ•˜๊ธฐ

์ˆ˜์ •ํ•˜๋ ค๋ฉด Model ํ•จ์ˆ˜๋กœ ์กฐ๊ฑด์„ ์ค€ ๋‹ค์Œ์— Update๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค.

์ €๋Ÿฌ๋ฉด money ํ•˜๋‚˜ ํ•„๋“œ๋งŒ ์ˆ˜์ •ํ•˜๋Š”๋ฐ

๋™์‹œ์— ๋ฉ€ํ‹ฐํ•„๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด, ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ›๋Š” Uodates ํ•จ์ˆ˜๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

zero value๋Š” ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.




์‚ญ์ œํ•˜๊ธฐ

gorm์—์„œ ์‚ญ์ œ์˜ ๊ธฐ๋ณธ๋™์ž‘์€ soft delete๋‹ค.

๊ทธ๋ž˜์„œ ์ง„์งœ ์‚ญ์ œ๋ฅผ ํ•˜์ง€๋Š” ์•Š๊ณ 

ํ•„๋“œ๋งŒ ์‚ญ์ œ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.


์ฐธ์กฐ
https://gorm.io/ko_KR/docs/index.html