Go Iris 웹 프레임워크 시작하기
설치
참고: Go 버전 1.20 이상이 필요합니다.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
코드에서 임포트하기:
import "github.com/kataras/iris/v12"
설치 문제 해결
설치 중에 네트워크 오류가 발생하는 경우, GOPROXY 환경 변수가 유효한 값을 가지고 있는지 확인해주세요.
go env -w GOPROXY=https://goproxy.io,direct
만약 위의 방법으로 문제가 해결되지 않는다면, go 모듈 캐시를 지워보세요.
go clean --modcache
빠른 시작
기능 모드
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// iris 인스턴스 정의
app := iris.New()
// route 그룹 정의, (여기서는 /books 접두어를 가진 route 그룹을 정의함)
booksAPI := app.Party("/books")
{
// 미들웨어 사용
booksAPI.Use(iris.Compression)
// 라우트와 라우트 핸들러 설정
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// 포트에서 대기
app.Listen(":8080")
}
// 책 예제
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Mastering Concurrency in Go"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
ctx.JSON(books)
// 참고: ctx.JSON 대신에 서버의 우선순위와 클라이언트의 설정에 따라 응답 협상
// 사용하기 위해서는:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// 참고: ctx.ReadBody(&b)로 들어오는 어떤 종류의 데이터도 바인딩합니다.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("책 생성 실패").DetailErr(err))
// 참고: 에러가 발생한 경우 평문 응답만 예상되는 경우에는 ctx.StopWithError(code, err) 사용
return
}
println("받은 책: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
MVC 아키텍처 패턴
MVC 패키지 가져오기
import "github.com/kataras/iris/v12/mvc"
라우트 그룹 기반으로 컨트롤러 설정
m := mvc.New(booksAPI)
m.Handle(new(BookController))
컨트롤러 구현
type BookController struct {
/* 의존성 주입 */
}
// GET에 대한 응답: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// POST에 대한 응답: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("받은 책: " + b.Title)
return iris.StatusCreated
}
Iris 웹 서버를 실행하세요:
$ go run main.go
> Listening on: http://localhost:8080
> 애플리케이션이 시작되었습니다. 종료하려면 CTRL+C를 누르세요.
책을 나열하세요:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
새 책을 만드세요:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Writing an Interpreter in Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
이것은 에러 응답의 예시입니다:
$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "책 생성 실패",
"detail": "객체 키 다음에 잘못된 문자 '\"'가 있습니다"
}