gorm(6)
-
Gorm 에서 constraint로 OnDelete 설정이 안될 때
Go언어 에서 많은 ORM이 있지만, 여러가지 써보아도 결국 GORM으로 회귀하게 됩니다. 매우 많은 기능과 이미 많이 쌓인 커뮤니티 그리고 사용이 쉽기 때문이죠. 그런데 제약사항 설정 중 on delete CASCADE를 설정한다던가 SET NULL 을 넣는다 등을 Auto Migrate 과정에서 진행하고 싶을 수 도 있습니다. 당연히 ORM 코드상에서 명시하여 DB에 자동설정이 되어야 orm을 쓰는 의미가 있기도 하구요. Node.js의 대부분 ORM들은 물리적 db에 이과정을 진행하지 않는 경우가 많긴 하지만요. 하지만 foreignKey에 constraint를 넣어도 물리 DB상에서는 constraint로 on delete on update가 적용되지 않는 현상이 있습니다. 이럴 경우 GORM에서..
2022.10.29 -
GORM v1 Create시 UpdatedAt Nil(Null)값 할당하기
GO언어 생태계의 대표적인 ORM으로 GORM을 많이들 사용하실텐데 GORM v2자료가 많이 없다보니 저도 v1이 익숙해서 v1을 사용합니다. v1에서는 ORM Conventions라고 해서 Timestamp Tracking이 존재합니다. http://gorm.io/docs/conventions.html#Timestamp-Tracking GORM에서 언급된 Timestamp의 추적은 GORM CALLBACK으로 구성되있는데 https://github.com/jinzhu/gorm/blob/master/callback_create.go#L31 // updateTimeStampForCreateCallback will set `CreatedAt`, `UpdatedAt` when creating func upda..
2020.07.29 -
Django Prefetch와 비교해보는 GORM Preload에 대한 고찰
Django ORM은 Django 프레임워크에 포함된 ORM이고, GORM은 Go언어의 ORM 라이브러리입니다. Django Framework 또는 DRF(Django Rest Framework)를 사용해보신 분들이라면 희귀하게 동작하기 때문에... 데이터베이스 (Database)에서 Query Performance(퍼포먼스) 개선에 대해 많은 고민을 해보실 거라고 생각되는데, Django에서는 자주 사용되는 방식으로 select_related, prefetch_related 라는 친구가 존재합니다. GORM에서는 Joins, Related, Preload 라는 친구들이 있습니다. Django의 Join Select_releated는 어떠한 상황에서 사용할까? 1:1 관계 (OneToOne) N:1 관계..
2020.07.05 -
#02. Go - gqlgen 프로젝트 설정하기
https://gmyankee.tistory.com/301 #01.Go - GraphQL 알아보기 서론 Go언어를 사용하는 Gopher 여러분들은 상당히 다수 존재하는 반면에, Graphql은 아직까지도 한국어로 된 자료가 많지 않으며, GraphQL 대다수의 자료는 JS가 부동의 1위를... 저도 언어를 3가지를 �� gmyankee.tistory.com 이전에 알아본 graphql중에서도 gqlgen을 강조하였기에 당연히 gqlgen을 사용할 것이며, 사실 제가 gqlgen말고 다른건 안써봤습니다! gqlgen 공식 Github 99designs/gqlgen go generate based graphql server library. Contribute to 99designs/gqlgen develop..
2020.06.01 -
GORM 컬럼명 지정하기
개발자마다 또는 사용자마다 사용하는 코드 스타일 및 컨벤션은 제각각 다릅니다. 하지만 언어마다 권장하는 표준 방식이 존재하는데 이를테면 Python에서는 snake_case를 // snake_case(스네이크 케이스 표기법) snake_case = 1 camel_case = "" pascal_case = None Javascript와 Go에서는 camelCase를 사용할 것을 권장합니다. // camelCase(카멜 케이스 표기법) // JS snakeCase = 1 camelCase = "" pascalCase = null // Go snakeCase = 1 camelCase = "" pascalCase = nil Python은 Class 명을 작성할 때는 파스칼케이스를 // Class명은 반드시 Pa..
2020.05.14 -
Go Gorm Preload without order by
GORM 을 사용할 때 특정 쿼리 First, Preload 등을 사용하면 Order by 쿼리 가 붙게되는데 다좋은데 문제가 Gorm에서 부여된 Primary key (ID)로 조회를 하는데 테이블에 ID 컬럼이 존재하지 않으면 오류가 발생합니다. 이를 해결하기 위해서는 GORM에서 언급되는 Unscoped() 라는걸 사용해야 합니다. db.Unscoped().First(&user, 1) Order by 절 이 없는걸 확인할 수 있는데 하지만 여기서 Preload를 사용할 경우 db.Unscoped().Preload("Profile").First(&user, 1) Order by가 Profile 테이블에 또 붙게됩니다. 이러한 경우에는 Preload에서 함수로 또 지정해줘야합니다.. db.Unscope..
2020.05.13