더북(TheBook)

8.1 나만의 웹 프레임워크 만들기

 

Go의 net/http 패키지는 웹 애플리케이션을 개발할 때 필요한 다양한 기능을 제공한다. net/http 패키지가 제공하는 기능이 워낙 강력해서 Go의 기본 라이브러리만으로도 웹 애플리케이션을 만들 수 있다. 하지만 웹 애플리케이션의 규모가 커지고 기능이 다양해지면 반복되는 코드가 생기고 시스템은 점점 복잡해진다. 반복되는 코드를 줄이고 좋은 아키텍처 패턴을 유지하기 위해 보통은 검증된 프레임워크를 사용한다.

다른 언어는 대부분 메인 프레임워크 한두 개가 웹 애플리케이션 영역을 주도한다. 자바의 대표 프레임워크로는 스프링(Spring)과 플레이(Play)가 있고, 루비에는 루비 온 레일즈(Ruby on Rails)와 시나트라(Sinatra)가 있다. 파이썬은 보통 장고(Django)나 플라스크(Flask)로 웹 애플리케이션을 개발한다. 이처럼 메인 프레임워크 한두 개가 웹 애플리케이션 영역을 주도하는 다른 언어와는 달리, Go에는 저마다 다른 장점을 가진 프레임워크와 툴킷이 많은데 좀처럼 메인 프레임워크 하나로 모일 조짐이 보이지 않는다.

그림 8-1 언어별 주요 웹 프레임워크

Go는 풀스택 프레임워크 하나를 사용하기보다는 각 상황에 맞게 다양한 패키지를 조합해서 마이크로 서비스 형태로 자신만의 프레임워크를 구성해 사용하는 것을 권장한다. 그래서 Go의 웹 프레임워크와 툴킷은 미들웨어 형태로 서로 연결될 수 있게 만들어져 있다. 초기에는 Revel이나 Beego 등 풀스택 프레임워크를 겨냥한 프레임워크가 등장했었으나 이러한 이유로 크게 성공하지 못했다.

Go로 웹 애플리케이션을 개발하려면 먼저 다양한 프레임워크와 툴킷의 구성 및 동작 방식을 파악해야 한다. 그러고 나서 내가 만들려는 애플리케이션에 필요한 프레임워크와 툴킷을 선정하고 목적에 맞게 조합해서 사용한다. 동작이 비슷한 프레임워크가 지금도 계속 만들어지고 있어서 이 와중에 베스트 프랙티스를 만들어내는 것은 아주 어려운 일이다. 하지만 여기에 정답은 없다. 내가 구현하려는 시스템에 맞는 최적의 구성을 스스로 만들어내면 된다. 물론 Go를 처음 시작하는 사람에게는 여간 어려운 일이 아니다.

지금부터 Go 기본 라이브러리로 웹 프레임워크를 직접 만들어 보자. net/http 패키지로 간단한 웹 애플리케이션을 만든 다음 조금씩 리팩토링해서 프레임워크를 완성해 본다. 실제로 규모 있는 애플리케이션에 사용하기에는 기능이 다소 부족할 수 있다. 기능이 부족하다면 필요한 기능을 직접 추가해서 사용해 보자. 이러한 경험이 나중에 다른 프레임워크를 선택하거나 여러 프레임워크와 툴킷을 조합해서 사용할 때 많은 도움이 될 것이다.

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