SQL DB 활용

1. SQL 패키지

Go에서 SQL 데이타베이스를 사용하기 위해서는 표준패키지 database/sql을 사용한다. database/sql 패키지는 관계형 데이타베이스들에게 공통적으로 사용되는 인터페이스들을 제공하고 있다. 즉, sql 패키지는 데이타베이스를 연결하고, 쿼리를 실행하고, DML 명령을 수행하는 등의 SQL 관련 함수들을 제공한다.

database/sql 패키지는 여러 종류의 SQL 데이타베이스를 지원하는데, 각각의 데이타베이스 Driver와 함께 사용된다. 흔히 사용되는 데이타베이스에 대해 다음과 같은 드라이버들이 현재 지원되는데, Full List는 여기에서 참조할 수 있다.

  • MySQL: https://github.com/go-sql-driver/mysql
  • MSSQL: https://github.com/denisenkom/go-mssqldb
  • Oracle: https://github.com/rana/ora
  • Postgres: https://github.com/lib/pq
  • SQLite: https://github.com/mattn/go-sqlite3
  • DB2: https://bitbucket.org/phiggins/db2cli

2. sql.DB 타입

database/sql 패키지에서 가장 중요한 Type은 sql.DB 인데, 일반적으로 sql.Open() 함수를 사용하여 sql.DB 객체를 얻는다. 즉, sql.Open(드라이버, Connection) 함수에서 어떤 DB 드라이버를 사용할 것인지 그리고 해당 DB의 연결 정보를 제공하면, 결과로 sql.DB 객체를 얻게 된다. 일단 이 sql.DB 객체를 얻은 후, sql.DB의 여러 메서드들을 사용하여 쿼리를 하고, SQL문을 실행한다. 예를 들어, 자주 사용되는 sql.DB 메서드로 쿼리를 하는 Query(), QueryRow(), 그리고 INSERT, UPDATE, DELETE등을 실행하는 Exec()를 들 수 있다.

아래 예제는 sql.DB 에 대한 간략한 소개를 위한 것으로, 실제 구체적인 사항들은 다음 아티클에서 소개한다.

// sql.DB 객체 db 생성
db, err := sql.Open("mysql", "root:pwd@tcp(127.0.0.1:3306)/testdb")

// db 차후에 닫기
defer db.Close()

// SELECT 쿼리
rows, err := db.Query("SELECT id, name FROM test")

// INSERT 실행
db.Exec("INSERT INTO test(id, name) VALUES (1, 'Alex')")