Toy Project with Go Lang - 1
Project 시작
Project 를 시작하기에 앞서 구상하고 있는 것을 먼저 정리를 해 보려고 한다. 우선, 간단하게 생각하면 Front-End 에는 사용자가 게시글을 작성하고 확인할 수 있어야 하고 Back-End 는 사용자의 요청에 따라 게시글 작성을 하면 DB 에 해당 내용을 저장하고, 게시판 화면에서는 DB 에서 게시글 리스트를 받아와 제공해야 한다.
그러면, 내가 가장 우선적으로 해 봐야할 것은 GoLang 으로 DB 만지기 게시글 포맷은 일반 커뮤니티 사이트에서 가져오고, 해당 포맷으로 데이터를 넘겨주면 해당 내용을 DB 에 저장하는 것부터 시작하자.
가장 기본적으로 게시글이 가져야 할 포맷은 제목 과 본문 이라고 생각해서 다음과 같이 구조체를 만들었다.
type Post struct {
Title string
Text string
}
간단한 테스트를 위해 테스트 코드를 다음과 같이 작성했고, 결과를 확인하기 위해 GoLang 에서 select 문을 사용해 확인도 했지만 추가적으로 MySQL Workbench 에서도 데이터를 확인할 수 있는지를 봤다.
func main() {
fmt.Println("Go MySQL Tutorial")
db, err := sql.Open("mysql", "username:pwd@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err)
}
defer db.Close()
var p Database.Post
for i := 0; i<3; i++ {
fmt.Print("Title : ")
fmt.Scanln(&p.Title)
fmt.Print("Text : ")
fmt.Scanln(&p.Text)
Database.InsertPost(db, p)
}
Database.SelectAll(db)
}
위의 코드에서 Database 패키지의 함수들을 사용할 수 있도록 만들었고, 가장 기본적인 포맷만 지정을 했다. sql Open 한 객체 db 를 함수에 인자로 넘김으로써 해당 함수에서 SQL 객체를 사용할 수 있도록 했고, DB 에 데이터를 추가하고자 사용한 InsertPost 함수에서는 Data Format 을 갖춰 인자로 넘겨줬다.
Database 패키지의 내용은 다음과 같이 작성했다. 아직 추가해야 할 내용들이 있지만, 우선 데이터를 추가하고 조회하는 것만 기능하도록 구현했다.
package Database
import (
"database/sql"
)
type Post struct {
Title string
Text string
}
func InsertPost(db *sql.DB, p Post) error {
insert, err := db.Query("INSERT INTO posts (title, text) VALUES(?, ?)", p.Text, p.Title)
if err != nil {
return err
}
defer insert.Close()
return nil
}
func SelectAll(db *sql.DB) error {
results, err := db.Query("SELECT title, text from posts")
if err != nil {
return err
}
for results.Next() {
var post Post
err = results.Scan(&post.Title, &post.Text)
if err != nil {
panic(err)
}
println(post.Title, post.Text)
// log.Printf(post.Title, post.Text)
}
return nil
}
우선 오늘은 여기까지.. 다음에는 사용자 입력을 통해서 데이터를 추가/조회하는 게 아니라, http Post/Get 을 활용해서 할 수 있도록 http 를 활용하는 것을 공부해 볼 생각이다.