이번 기사에서는 고 언어로 웹 개발을 하는데 현재 쓰이고 있는 주요 프레임워크를 소개한다. 엔드포인트 API 등 단순한 사용 사례를 목표로 하는 프레임워크가 있는가 하면, 전면 사이트 개발을 위한 프레임워크도 있고, 또는 일정 작업에 필요한 컴포넌트에 따라 확대 내지 축소될 수 있는 프레임워크도 있다.
고 웹 프레임워크: 비고
비고(Beego)는 어떤 면에서 파이썬 기반의 포괄적인 장고 웹 프레임워크(Django web framework)를 연상시킨다. 웹 애플리케이션에 보편적인 기능들을 폭넓게 제공하고, 필요에 따라 사용될 수도, 무시될 수도 있는 8개의 모듈로 조직된다.
▲ 대다수 웹 프레임워크에서 발견되는 일반적인 모델-뷰-컨트롤러(model-view-controller, MVC)는 물론이고 ▲데이터 액세스를 위한 객체-관계 맵(object-relationship map, ORM) ▲빌트-인 캐시 핸들러 ▲세션 핸들링 툴 ▲로깅 메커니즘, ▲HTTP 객체와의 공통 연산을 위한 라이브러리를 포함한다.
비고는 명령-라인 툴에서도 장고와 비슷하다. 예를 들어, 'bee' 명령을 이용해 비고 앱을 처음부터 제작하거나, 기존의 앱을 관리할 수 있다.
고 웹 프레임워크: 진
고 언어의 첫 번째 웹 프레임워크 가운데 하나는 마티니(Martini)였지만, 이는 더 이상 유지되지 않는다. 그러나 그 과정에서, 마티니의 기본 메타포를 이용하면서 보다 우수한 성능과 더 많은 기능을 내세우는 다른 고 프레임워크들이 출현했다.
진(Gin)이 이런 프레임워크 가운데 하나다. 이는 속도를 위해 httprouter 패키지의 커스텀 버전을 이용하고, 미들웨어, 파일 업로딩, 로깅, 프론트-엔드 HTML 컴포넌트와 백-엔드 데이터 스트럭쳐의 바인딩 등 각종 일반 사용 사례를 위한 핸들러를 제공한다. API는 버전 1.x에서 안정적이어서, 미래의 변경에 의해 기존의 진 앱들이 파손되지는 않을 것이다.
고 앱 프레임워크: 고릴라
고릴라(Gorilla)는 '웹 툴킷'이고, MVC 유형의 프레임워크가 아니다. 웹서비스 저작의 여러 저-수준 측면들을 다루는데 이용되는 라이브러리(즉 컨텍스트(요청의 전주기 동안 상태를 스태싱), 먹스(mux)(라우트/디스패치)), 그리고 보안 쿠키, 세션, 웹소켓, HTTP 상의 RPC를 이행하기 위한 여타 라이브러리로 구성된다.
템플릿, 폼, 여타 프론트-엔드 피스는 패키지에 포함되지 않는다. 원한다면 사용자가 스스로 구해야 한다. 사용자가 고릴라 피스를 사용하는 여타 프레임워크를 통해서나, 고릴라로 구축된 것과 통합시킨 독립 컴포넌트를 통해, 이 같이 할 수 있다.
고 웹 프레임워크: 에코
에코(Echo)는 API를 위해 의도된 또 하나의 소형 프레임워크다. 이는 템플릿 시스템을 포함하지 않는다. 대신 고 언어의 자체 html/template를 필요할 때마다 플러그인 방식으로 사용한다. 그러나 기본 및 키 기반 인증, 압축, 프록시, 로깅 등 API에 일반적으로 쓰이는 미들웨어 모듈을 여럿 제공한다.
에코에는 쓸만한 기능들이 많고, 대다수가 이행하는데 많은 작업을 요하지 않는다. 예컨대 'Let's Encrypt'로 HTTPS 인증서를 관리한다면 이들을 자동으로 설치하도록 설정할 수 있다.
고 웹 프레임워크: 아이리스
아이리스(Iris)는 이의 개발자에 따르면, '고를 위한 진정한 Express.js 등가물'이라고 한다. 대다수 기능성을 플러그인으로 충당하며 최소 설계를 이용하는 JavaScript/Node.js라는 것이다. 아이리스는 기본 MVC 기능성을 포함하고, 미들웨어, 세션, 라우팅, 캐싱을 기본적으로 지원한다.
아이리스 설명서는 React 프론트 엔드와의 상호작용, Docker/Kubernetes 환경에서의 실행 등 실례들이 풍부하다.
고 웹 프레임워크: 레벨
루비 온 레일(Ruby on Rails)은 MVC 타입 웹 프레임워크를 위한 공통 패턴을 제공했다. 따라서 다른 언어들은 루비 온 레일의 이미지 안에서 자체 프레임워크를 이행했다. 레벨(Revel)의 개발자에 따르면, 레벨은 레일(Rails)의 정신을 이어받았다.
기본 MVC를 제공하는 것은 물론, 다른 니즈를 만족시킬 수 있는 다른 컴포넌트를 자유롭게 플러그-인할 수 있다. 템플릿(templating)은 고 언어의 네이티브 html/template 패키지를 사용하거나, 사용자가 자체적으로 제공할 수 있다.
마찬가지로, HTTP 엔진은 고의 자체 엔진이거나 서드 파티의 것일 수 있다. 캐싱은 인메모리에서(in-memory) 자체 이행될 수 있고, 아니라면 Memcached 또는 Redis 백엔드를 통해 이루어질 수 있다.
그러나 데이터베이스를 위한 네이티브 ORM이 없다. 레벨의 설명서에 나온 한 실례에서는 고프(Gorp) 라이브러리를 이용하지만, 이론상으로는 어떤 고 ORM이든지 사용 가능하다. editor@itworld.co.kr