Go 웹 프레임워크

1. Go Web Framework

Go에서 웹 프로그래밍을 쉽게 도와주는 여러 Web Framework들이 현재 개발 중에 있다. 간단한 웹 서버를 만들기 위해 net/http 패키지를 사용하면 되겠지만, 복잡하고 다양한 기능을 요하는 웹 서버인 경우 여러 기능들이 탑재된 Web Framework을 사용하는 것이 좋다.

일반적으로 Web Framework은 Request와 Handler를 매핑하는 Routing 기능, Request 파라미터들은 핸들러의 파라미터에 연결하는 데이타바인딩 기능, Request 상태를 유지하는 컨텍스트 기능, 핸들러들에서 자주 쓰이는 공통된 기능을 제공하는 미들웨어 기능 등 실무에서 자주 요구되는 기능들을 갖추고 있다.

다음은 현재 사용되는, 혹은 개발되고 있는 Go Web Framework들이다. 각 프레임워크마다 제공되는 기능이 다르므로, 필요한 기능이 이미 구현되었는지 아니면 개발 예정인지를 미리 체크해야 한다.

Revelhttps://revel.github.io
Beegohttp://beego.me
Martinihttps://github.com/go-martini/martini
Ginhttps://gin-gonic.github.io/gin
GoCrafthttps://github.com/gocraft/web
Traffichttps://github.com/pilu/traffic
Gorillahttp://www.gorillatoolkit.org

2. Revel Web Framework

Go Web Framework들 중 Revel 프레임워크를 간단히 살펴보자. 우선 Revel 프레임워크을 설치하기 위하여 아래와 같이 go get을 실행한다. Revel 프레임워크은 GOPATH 에 설치되므로 물론 GOPATH가 미리 설정되어 있어야 하며, GOPATH가 복수 디렉토리를 가지면, 첫번째 디렉토리에 설치된다.

# revel framework 설치
go get github.com/revel/revel

# revel 실행파일 설치 (윈도우즈의 경우 revel.exe 설치)
go get github.com/revel/cmd/revel

Revel 프레임워크이 모두 설치되었으면 아래와 같이 revel new 명령을 실행하여 새 웹 프로젝트를 만들 수 있다. revel 실행파일은 GOPATH/bin 폴더에 있으므로, GOPATH/bin 폴더를 PATH 환경변수에 미리 추가해 준다.

# MyWeb 이라는 새 프로젝트 생성
revel new MyWeb

새 프로젝트 생성 명령이 성공적으로 실행되면, GOPATH/src/MyWeb 폴더에 아래와 같은 폴더와 파일들이 만들어 진다. 여기서 app 폴더에는 MVC (Model-View-Controller) 패턴을 구현한 웹 프로그램 소스들이 존재하고, conf 폴더에는 메인 구성 파일과 라우팅 정의 파일이 존재한다. 또한, public 폴더에는 CSS, Javascript, 이미지 등의 asset 파일들이 존재한다.

src
    MyWeb               App root
      app               App sources
        controllers     App controllers
          init.go       Interceptor registration
        models          App domain models
        routes          Reverse routes (generated code)
        views           Templates
      tests             Test suites
      conf              Configuration files
        app.conf        Main configuration file
        routes          Routes definition
      messages          Message files
      public            Public assets
        css             CSS files
        js              Javascript files
        images          Image files

새 웹 프로젝트를 실행하기 위해서는 revel run 명령을 다음과 같이 실행한다. 이 명령이 실행되면, GOPATH/src/MyWeb 폴더의 내용과 함께 웹 서버를 구동하는데, 브라우저에서 http://localhost:9000 을 치면, 웹페이지를 확인할 수 있다.

# MyWeb 실행
revel run MyWeb

위의 revel 실행을 간략히 살펴보면, revel Framework은 내부적으로 main 함수를 구동하며, conf/app.conf 에 정의된 port=9000 을 사용하여 웹 서비스를 구동한다. conf/routes 에 정의된 홈페이지(/)는 App.Index 로 정의되어 있는데, 이 App 타입은 app/controllers/app.go에 struct로 정의되어 있고, 역시 동일한 파일에 이 타입의 메서드 Index()가 정의되어 있다. 실제 HTML 뷰는 app/views/App/Index.html에 템플릿을 사용하여 정의되어 있으며, 이를 랜더링하여 클라이언트에게 HTML을 보내게 된다. 샘플에 models 폴더는 생성되어 있지 않지만, 개발자가 차후 추가하여 도메인 모델 파일들을 넣게 된다.