더북(TheBook)

8장에서는 Go의 기본 라이브러리만으로 웹 프레임워크를 직접 만들어 사용했는데, 이번에는 다양한 외부 패키지를 조합해서 마이크로 프레임워크 형태로 구성해 보자. 다음은 채팅 애플리케이션에 사용할 패키지다.

라우터: httprouter(https://github.com/julienschmidt/httprouter)
웹 애플리케이션을 개발할 때 라우터 패키지로 gorilla/mux, httprouter, pat를 가장 많이 사용한다. 우리가 사용할 라우터 패키지는 httprouter이다. httprouter는 벤치마크 테스트에서 가장 빠른 라우터로 드러나 최근 큰 인기를 끌고 있다(httprouter는 Gin 프레임워크의 라우터로도 사용된다). 하지만 httprouter는 다른 라우터보다 기능이 단순해서 복잡한 라우팅을 해야 할 때는 제약이 많다(이를테면 라우팅 규칙에 정규표현식을 사용할 수 없다). 그러나 일반적인 REST API를 작성할 때는 크게 문제 되지 않는다.

미들웨어: negroni(https://github.com/codegangsta/negroni)
negroni는 웹 서버의 라이프사이클을 관리하고 모든 웹 요청을 받아 처리하는 역할을 한다. negroni는 Go 커뮤니티에서 초창기부터 대표 웹 프레임워크로 널리 알려진 Martini를 개발한 개발자가 만들었다. negroni는 Martini가 가진 문제점과 불필요한 기능을 제거하고 핵심 기능만 남겨 미들웨어 형태로 사용할 수 있게 했다. negroni는 기능을 계속 확장하기 보다는 다양한 패키지가 연동된 형태로 동작할 수 있는 미들웨어 형태를 고수하고 있어서 많은 곳에서 활용되고 있다.

렌더러: render(https://github.com/unrolled/render)
웹 요청 처리 결과를 문자열, JSON, XML, HTML 문서 등 다양한 형태로 렌더링해야 할 때 유용한 패키지이다.

세션 관리: negroni-sessions(https://github.com/goincremental/negroni-sessions)
negroni로 구동한 웹 애플리케이션에서 세션을 생성하고 관리해주는 패키지이다. 세션 데이터는 설정에 따라 레디스, 몽고DB, DynamoDB, 쿠키 등에 저장할 수 있다.

소셜 로그인: gomniauth(https://github.com/stretchr/gomniauth)
다양한 소셜 인증 서비스를 하나의 일관된 방식으로 사용할 수 있게 추상화된 접근 방식을 제공한다. 실제로 사용할 서비스의 패키지와 함께 사용해야 한다.

- 페이스북: github.com/stretchr/gomniauth/providers/facebook

- 깃허브: github.com/stretchr/gomniauth/providers/github

- 구글: github.com/stretchr/gomniauth/providers/google

웹소켓: gorilla/websocket(http://www.gorillatoolkit.org/pkg/websocket)
gorilla 툴킷에서 제공하는 웹소켓 프로토콜 구현 패키지이다.

몽고DB 드라이버: mgo(https://labix.org/mgo)
Go 언어용 몽고DB 드라이버 패키지이다.

그림 9-3 사용할 외부 패키지

각 패키지에 대해 상세한 설명은 하지 않는다. 패키지에 대한 자세한 내용은 GoDoc 페이지나 해당 패키지의 소개 문서를 참고하기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.