1. MySQL 생성
MySQL에 접속하기 이전에 접속할 MySQL을 생성합니다.
Local에 MySQL을 다운로드 받거나 AWS에서 MySQL을 생성하는 등 각자의 방식으로 접속할 MySQL을 생성합니다.
2. MySQL Table 생성
MySQL 접속
mysql -u username -h hostname -P 3306 -p
Enter password:
사용할 데이터베이스로 변경
mysql> USE {databasename}
테이블 생성 및 테스트 데이터 INSERT
DROP TABLE IF EXISTS album;
CREATE TABLE album (
id INT AUTO_INCREMENT NOT NULL,
title VARCHAR(128) NOT NULL,
artist VARCHAR(255) NOT NULL,
price DECIMAL(5,2) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO album
(title, artist, price)
VALUES
('Blue Train', 'John Coltrane', 56.99),
('Giant Steps', 'John Coltrane', 63.99),
('Jeru', 'Gerry Mulligan', 17.99),
('Sarah Vaughan', 'Sarah Vaughan', 34.98);
결과
mysql> DROP TABLE IF EXISTS album;
Query OK, 0 rows affected, 1 warning (0.07 sec)
mysql> CREATE TABLE album (
-> id INT AUTO_INCREMENT NOT NULL,
-> title VARCHAR(128) NOT NULL,
-> artist VARCHAR(255) NOT NULL,
-> price DECIMAL(5,2) NOT NULL,
-> PRIMARY KEY (`id`)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql>
mysql> INSERT INTO album
-> (title, artist, price)
-> VALUES
-> ('Blue Train', 'John Coltrane', 56.99),
-> ('Giant Steps', 'John Coltrane', 63.99),
-> ('Jeru', 'Gerry Mulligan', 17.99),
-> ('Sarah Vaughan', 'Sarah Vaughan', 34.98);
Query OK, 4 rows affected (0.08 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from album;
+----+---------------+----------------+-------+
| id | title | artist | price |
+----+---------------+----------------+-------+
| 1 | Blue Train | John Coltrane | 56.99 |
| 2 | Giant Steps | John Coltrane | 63.99 |
| 3 | Jeru | Gerry Mulligan | 17.99 |
| 4 | Sarah Vaughan | Sarah Vaughan | 34.98 |
+----+---------------+----------------+-------+
4 rows in set (0.07 sec)
3. Golang Driver를 통한 연결 확인
환경변수에 데이터베이스에 연결하기 위한 정보들을 등록해줍니다.
export DBUSER={dbuser}
export DBPASS={dbpass}
export DBHOST={hostname}
export DBNAME={databasename}
다음과 같이 코드를 작성하여 MySQL에 연결이 가능한지 확인합니다.
- main.go
package main
import (
"database/sql"
"fmt"
"log"
"os"
"github.com/go-sql-driver/mysql"
)
var db \*sql.DB
func main() {
cfg := mysql.Config{
User: os.Getenv("DBUSER"),
Passwd: os.Getenv("DBPASS"),
Net: "tcp",
Addr: os.Getenv("DBHOST"),
DBName: os.Getenv("DBNAME"),
AllowNativePasswords: true,
}
var err error
db, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil {
log.Fatal(err)
}
pingErr := db.Ping()
if pingErr != nil {
log.Fatal(pingErr)
}
fmt.Println("Connected!")
}
go get . 을 통해 실행에 필요한 go package를 다운로드 받습니다.
go get .
go: downloading github.com/go-sql-driver/mysql v1.8.1
go: downloading filippo.io/edwards25519 v1.1.0
go: added filippo.io/edwards25519 v1.1.0
go: added github.com/go-sql-driver/mysql v1.8.1
실행하면 다음과 같이 노출됩니다.
go run main.go
Connected!
4. SELECT 쿼리 실행
SQL 쿼리를 통해 Album 테이블에서 데이터를 가져오는 함수를 작성합니다.
func albumsByArtist(name string) ([]Album, error) {
var albums []Album
rows, err := db.Query("SELECT * FROM album WHERE artist = ?", name)
if err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
defer rows.Close()
for rows.Next() {
var alb Album
if err := rows.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
albums = append(albums, alb)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
return albums, nil
}
main 함수에서 albumsByArtist 함수를 호출합니다.
albums, err := albumsByArtist("John Coltrane")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Albums found: %v\n", albums)
전체 코드는 다음과 같습니다.
package main
import (
"database/sql"
"fmt"
"log"
"os"
"github.com/go-sql-driver/mysql"
)
var db *sql.DB
type Album struct {
ID int64
Title string
Artist string
Price float32
}
func albumsByArtist(name string) ([]Album, error) {
var albums []Album
rows, err := db.Query("SELECT * FROM album WHERE artist = ?", name)
if err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
defer rows.Close()
for rows.Next() {
var alb Album
if err := rows.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
albums = append(albums, alb)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)
}
return albums, nil
}
func main() {
cfg := mysql.Config{
User: os.Getenv("DBUSER"),
Passwd: os.Getenv("DBPASS"),
Net: "tcp",
Addr: os.Getenv("DBHOST"),
DBName: os.Getenv("DBNAME"),
AllowNativePasswords: true,
}
var err error
db, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil {
log.Fatal(err)
}
pingErr := db.Ping()
if pingErr != nil {
log.Fatal(pingErr)
}
fmt.Println("Connected!")
albums, err := albumsByArtist("John Coltrane")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Albums found: %v\n", albums)
}
실행하면 다음과 같이 노출됩니다.
go run main.go
Connected!
Albums found: [{1 Blue Train John Coltrane 56.99} {2 Giant Steps John Coltrane 63.99}]
'개발' 카테고리의 다른 글
Golang - echo를 활용한 API Server 만들기 (0) | 2024.09.21 |
---|---|
Golang - Connect to MongoDB (2) | 2024.09.18 |
Golang - 프로젝트 시작 (0) | 2024.09.18 |
Q Learning과 DQN (0) | 2023.12.09 |
nestjs 앱 docker로 배포하기 (0) | 2023.12.07 |