Tutorial & Training/Go
Go언어 ORM GORM의 크나큰 문제점
TL&D
2020. 5. 15. 00:33
728x90
type AuthUser struct {
gorm.Model
ID uint `gorm:"column:id;primary_key;" json:"id"`
IsActive bool `gorm:"column:is_active" json:"isActive"`
DateJoined time.Time `gorm:"column:date_joined" json:"dateJoined"`
Profile Profile `gorm:"foreignkey:UserID;" json:"profile"`
ProfileID uint
}
type Profile struct {
gorm.Model
Idx uint `gorm:"column:idx;primary_key:true;"`
UserID uint `gorm:"column:user_id;ForeignKey:id"`
}
위 와 같은 구조체가 있다고 가정하면
Go에서 Join을 구현하려면 .Joins()가 있기는 하지만 ORM적인 구현이라기보단
원시쿼리(SQL)에 가깝습니다.
그럴거면 그냥 SQL로 쓰고 Struct로 박아서 뽑지 뭣하러 굳이 힘들게 gorm.Model로 명시하는거지...
https://gmyankee.tistory.com/297
Go Gorm Preload without order by
GORM 을 사용할 때 특정 쿼리 First, Preload 등을 사용하면 Order by 쿼리 가 붙게되는데 다좋은데 문제가 Gorm에서 부여된 Primary key (ID)로 조회를 하는데 테이블에 ID 컬럼이 존재하지 않으면 오류가 발��
gmyankee.tistory.com
위 글에서 언급한적이 있는데 Preload, Related, Association을 사용해도
Django ORM처럼 select_related나 Prefetch_related처럼 동작하지는 않습니다.
단지 쿼리를 한번더 때립니다. 정말 암덩어리죠
그래서 실제로 해당 Github Issues에서는 이런말이 오갑니다.
1. 이 라이브러리는 오래되었고 관리를 안하는것 같아
2. Preload vs Join 뭐가 더 좋은가?( 그냥 raw쿼리로 짜렴)
ORM이 주는 가장 크나큰 이점은... Migrations가 용이한점? DB 이관할때 편리한거?
그거말곤 없긴한데 원시쿼리가 자세히보면 사실 속도가 좀더 빠르고 직관적이긴 합니다.
결론 원시쿼리(SQL)로 쓰세요!
728x90