728x90
https://dev-chicken.tistory.com/49
에 이어서 SQLBoiler에 대해 공부를 해봐야겠다는 생각이 확실해져서, 좀 더 탐구해봤다.
사실 golang을 공부하거나 개발하다보면 ORM선택에 있어서 큰 고민이 되는데..
sqlx 또는 SQLBoiler를 쓰는게 대세이고 퍼포먼스, 개발 등에 있어서 기존에 존재하는 타 ORM에 비해 장점이 많은 것 같다.
raw-query를 위주로 직접 작성하려면 sqlx를 라이브러리를 통해 편리하게 사용하려면 SQLBoiler를 쓴다고 한다.
실제로 현업에서 golang ORM을 사용하고 있는 개발자들과 이야기를 나눠보면 두 ORM을 용도에 맞게 가장 많이 사용하고, 규모가 커진 유명한 스타트업과 같은 경우에는 직접 내부에서 개발하여 사용하는 곳도 있는 것 같았다.
SQLBoiler 장점
- 빠른 실행 속도: SQLBoiler는 컴파일시 데이터베이스 스키마를 분석하여 모델 코드를 생성. 이미 생성된 모델로 접근하기 때문에 빠르게 실행할 수 있음. 다른 라이브러리는 runtime에 실행되어 그때그때 json parsing을 통해 가져오기 때문에 무거움
- 쉬운 구현: SQLBoiler는 Go native하게 구현되어 있음. 또한 SQLBoiler는 SQL 쿼리의 세부 정보가 추상화되어 있어서, 개발자가 보기 쉬움.
- 데이터베이스 native: SQLBoiler는 데이터베이스 중심으로 모델이 생성 / 업데이트 됨. 따라서 신경써야할 포인트가 줄어듬
- 다양한 데이터베이스 지원: 전글에서 작성했던 것과 마찬가지로, 다른 라이브러리들에 비해 부족하지 않게 지원
- 유연한 쿼리 지원: SQLBoiler는 SQL 쿼리 작성에 대한 세부 정보를 추상화하지만, raw query도 사용 가능. 다양한 옵션을 지원한다는데 찾아봐야할 듯
- Type safety: SQLBoiler는 타입을 지정할 수 있게 해줘서 runtime error같은 것 방지를 도와줌 앞선 모델생성과 연관.
장점을 정리해보면, 빠르고 / Go native하고 / DB native하고 / raw query도 지원 / type지정으로 에러방지 등 많은 것을 지원한다. 그리고 Golang ORM을 쓰는데 Go / DB native하고 빠르다면 안쓸 이유가 없는 것으로 생각된다.
err := queries.Raw("select * from pilots where id=$1", 5).Bind(ctx, db, &obj)
raw query 지원 예시
// WHERE clause building
Where("name=?", "John")
models.PilotWhere.Name.EQ("John")
And("age=?", 24)
// No equivalent type safe query yet
Or("height=?", 183)
// No equivalent type safe query yet
Where("(name=? and age=?) or (age=?)", "John", 5, 6)
// Expr allows manual grouping of statements
Where(
Expr(
models.PilotWhere.Name.EQ("John"),
Or2(models.PilotWhere.Age.EQ(5)),
),
Or2(models.PilotAge),
)
이렇게 추상화 된 쿼리도 제공하는데, type safe하게 사용할지 말지도 선택 가능한 것으로 보인다.
이제 실제로 적용해보면서 공부를 해봐야겠다.
반응형
'개발 > 개발공부' 카테고리의 다른 글
FQDN / Fully Qualified Domain Name, 도메인, Kubernetes cluster domain (0) | 2023.03.12 |
---|---|
React StyledComponents / 리액트, css, style, 기능 (0) | 2023.03.06 |
Golang ORM library / gorm, xorm, sqlboiler, 비교 (2) | 2023.02.19 |
Golang Gin Graceful restart, stop / golang, go, 고랭, 고, 언어 (2) | 2023.02.16 |
Golang Gin Middleware / golang, go, 고랭, 고, 언어, 미들웨어 (0) | 2023.02.07 |
댓글