Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- 페이징
- Spring
- 오라클
- golang
- aws
- DP
- 백준
- 운영체제
- Spring Boot
- feign
- Spring Cloud
- Jenkins
- Spring Cloud Feign
- db
- SQL
- Intellj
- PL/SQL
- MST
- 알고리즘
- 클라우드
- retry
- 자바
- 디자인 패턴
- Kafka
- MVC
- 데이터베이스
- 쿼리
- JPA
- 코딩
Archives
- Today
- Total
justgo_developer
golang ent + sqlite 본문
728x90
반응형
golang ent + sqlite
ent 프레임워크
ent는 Facebook에서 개발한 Go 언어용 엔티티 프레임워크입니다. 이 프레임워크는 강력한 ORM(Object-Relational Mapping) 기능을 제공하며, 다음과 같은 특징을 가집니다:
- 코드 생성: 스키마 정의를 기반으로 타입 안전한 코드를 자동으로 생성합니다.
- 그래프 기반 쿼리: 복잡한 데이터 관계를 쉽게 탐색할 수 있는 그래프 기반 쿼리를 지원합니다.
- 스키마 마이그레이션: 데이터베이스 스키마 변경을 쉽게 관리할 수 있습니다.
- 확장성: 사용자 정의 필드와 엣지를 통해 복잡한 비즈니스 로직을 구현할 수 있습니다.
- 데이터베이스 지원: SQLite를 포함한 다양한 데이터베이스를 지원합니다.
ent를 사용하면 다음과 같은 이점을 얻을 수 있습니다:
- 타입 안정성: 컴파일 시점에 많은 오류를 잡아낼 수 있어 런타임 오류를 줄일 수 있습니다.
- 생산성 향상: 반복적인 CRUD 작업을 자동화하여 개발 시간을 단축할 수 있습니다.
- 유지보수성: 잘 정의된 스키마와 자동 생성된 코드로 프로젝트의 유지보수가 용이해집니다.
ent와 SQLite를 함께 사용하면, Go 애플리케이션에서 경량화된 데이터베이스 작업을 타입 안전하고 효율적으로 수행할 수 있습니다.
SQLite 데이터베이스
SQLite는 경량화된 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 다음과 같은 주요 특징을 가지고 있습니다:
- 서버리스: 별도의 서버 프로세스 없이 애플리케이션에 직접 내장되어 사용됩니다.
- 자체 완결성: 전체 데이터베이스가 단일 파일로 저장되어 이식성이 매우 뛰어납니다.
- 제로 구성: 복잡한 설정이나 관리가 필요 없어 사용이 간편합니다.
- 트랜잭션 지원: ACID(원자성, 일관성, 고립성, 지속성) 속성을 준수하는 트랜잭션을 지원합니다.
- 표준 SQL 지원: SQL 표준의 대부분을 지원하여 사용이 익숙합니다.
SQLite는 다음과 같은 상황에서 특히 유용합니다:
- 임베디드 시스템: 모바일 앱, IoT 장치 등 리소스가 제한된 환경에 적합합니다.
- 로컬 저장소: 데스크톱 애플리케이션이나 브라우저의 로컬 데이터 저장에 활용됩니다.
- 테스팅 및 개발: 개발 단계에서의 빠른 프로토타이핑과 테스트에 이상적입니다.
Go 언어에서 SQLite를 사용할 때는 주로 database/sql 패키지와 SQLite 드라이버를 조합하여 사용합니다. ent 프레임워크와 함께 사용하면 타입 안전성과 ORM의 장점을 누리면서도 SQLite의 경량화된 특성을 효과적으로 활용할 수 있습니다.
SQLite 설치
설치:
sudo wget <https://www.sqlite.org/snapshot/sqlite-snapshot-202410221619.tar.gz>
sudo tar -xvf sqlite-snapshot-202410221619.tar.gz
cd sqlite-snapshot-202106031851
sudo ./configure
sudo make
sudo make install
sqlite3 --version
Ent 사용법
- 스키마 생성: 자동으로 "프로젝트명/ent/schema/" 경로에 스키마명.go 파일이 생성됨.
go run -mod=mod entgo.io/ent/cmd/ent new 스키마명
- 기본으로 생성된 Fields 함수에 스키마명.go 파일에 사용하는 항목 추가(lnkg_dts, key, data)
- Edges는 Relation을 테이블간 연관관계 의미함
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
"time"
)
// LimiterLog holds the schema definition for the LimiterLog entity.
type LimiterLog struct {
ent.Schema
}
// Fields of the LimiterLog.
func (LimiterLog) Fields() []ent.Field {
return []ent.Field{
field.Time("lnkg_dts").Default(time.Now()),
field.String("key"),
field.String("data"),
}
}
// Edges of the LimiterLog.
func (LimiterLog) Edges() []ent.Edge {
return nil
}
- go generate 명령어 실행
- CRUD와 같은 기능들을 담당하는 go 파일이 자동으로 생성됨.
go generate ./ent
sqlite3 db로 조회 및 저장 하기
package main
import (
"context"
"log"
"entdemo/ent"
_ "github.com/mattn/go-sqlite3"
)
func main() {
client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
if err != nil {
log.Fatalf("failed opening connection to sqlite: %v", err)
}
defer client.Close()
// Run the auto migration tool.
if err := client.Schema.Create(context.Background()); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
}
메모리 모드 방식과 파일모드 방식 2가지로 Sqlite를 사용할수 있음.
// memory mode
client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
// file mode
client, err := ent.Open("sqlite3", "file:data.db?_fk=1")
ent를 이용해 CRUD 간편히 할수 있음.
func CreateLimiterLog(ctx context.Context, client *ent.Client, limiterLog *ent.LimiterLog) (*ent.LimiterLog, error) {
ll, err := client.LimiterLog.Create().SetLnkgDts(time.Now()).SetKey(limiterLog.Key).SetData(limiterLog.Data).Save(ctx)
if err != nil {
return nil, fmt.Errorf("failed creating limiterLog : %w", err)
}
log.Println("limiterLog was created: ", ll)
return ll, nil
}
func SelectLimiterLog(ctx context.Context, client *ent.Client, key string) ([]*ent.LimiterLog, error) {
ll := client.LimiterLog.Query().Where(limiterlog.Key(key)).AllX(ctx)
return ll, nil
}
728x90
반응형
'IT > Golang' 카테고리의 다른 글
리눅스 환경에서 Go 설치 (0) | 2024.08.16 |
---|