01. Go 개요
Go 언어는 2009년 구글이 개발한 프로그래밍 언어이다. 가비지 컬렉션 기능이 있고, 병행성(concurrent)을 잘지원하는 컴파일 언어이다.
쉽고 간결한 문법이 특징이고, C, 자바, VB.NET 등 다른 언어에 비해 키워드가 매우 적어 배우기 쉽다.
02. Go의 역사
Go는 2007년 9월 21일 로버트 그리즈머, 롭 파이크, 켄톰슨이 인페르노라는 분산운영체제와 관련된 작업을 하다가 화이트보드에 새로운 언어에 대한
스케치를 하면서 구상되었다고 한다. 구글의 직원들은 업무 시간 중 20%를 파트타임 프로젝트라고 주요 업무와는 무관한 별도의 다른 프로젝트를 수행할
수 있는 제도가 있다. Go언어는 이 제도로 만들어진 대표적인 프로젝트 이다.
2008년 1월 켄 톰슨이 Go 스펙으로 만들어진 C코드로 변환하는 컴파일러를 만들기 시작했고, 2008년 중반에는 구글의 공식적인 풀타임 프로젝트로 승격되었다.
2008년 5월 이안 테일러는 Go 스펙의 초안을 이용하여 GCC 프론트 엔드를 만들기 시작했고, 2008년 말 러스콕스가 참여하면서 프로토타입에서 실질적인 언어와
응용 프로그램을 쉽게 만들수 있도록 도와줄 기본적인 라이브러리들이 만들어지기 시작했다.
Robert Griesemer 스위스 쮜리히에서 컴퓨터 박사 학위를 받고 구글에서 V8 자바스크립트 엔진 개발에 참여하였다.
Go 프로그래밍 언어의 초기 디자인에 참여한 구글 엔지니어 이다.
Rob Pike 벨 연구소에서 유닉스 개발팀에 근무하였으며 특히 분산 OS인 Plan 9 개발로 유명하다.
또한 켄 톰슨과 함께 UTF-8 을 만든 개발자이다. 현재는 구글에서 Go 개발자로 근무하고 있다.
Ken Thompson 미국 컴퓨터공학의 개척자로 알려진 Ken은 대부분의 시간을 벨 연구소에서 보냈다.
초창기 Unix OS를 설계하고 구현하였으며, C 언어의 전신인 B 언어를 개발하였다. 현재는 구글에서 Go 프로그래밍 언어 개발에 참여하고 있다.
2009년 11월 10일에 리눅스와 Mac OS X 에서 동작하는 최초의 버전이 공식 발표되었으며, 출시 직후에는 실용성이 떨어진다는 평가도 있었지만, 반년정도 지난
뒤에 구글 내부에서 실제로 사용되고 있다고 알려졌다.
현재 Go 는 점점 더 그 세력을 확장하고 있으며, 몽고 DB, 트위치, 우버 등 많은 상용 서비스 들이 활용하고 있다고 한다.
03. Go 의 특징
Go는 정적 타입 컴파일 언어의 효율성과 동적 언어처럼 쉬운 프로그래밍을 할수 있도록 하는 것을 목표로 한다.
1) 정적 타입 : 자료형에 형이 정해져 있음
2) 강타입 : 자료형 변환(타입 캐스팅)이 항상 명시되어야 함
3) 안전성 : 타입 안전성과 메모리 안전성
4) 가비지 컬렉션 : 결과물에 go runtime이 내장되는데 go run time이 메모리를 핸들링
5) 컴파일 언어 : 인터프리터 언어가 아니지만 근접한 수준의 빠른 컴파일
6) 포인터는 존재 하지만 연산은 없음
04. Go 대표적인 웹 프레임워크 (Top 11 Potent Golang Web Framweroks for Development in 2020)
※ 참고 https://www.esparkinfo.com/golang-web-framework.html
웹프레임워크(Web framwork)는 웹 서비스 개발을 위한 프레임워크이다.
프레임워크는 하나의 애플리케이션을 구축할 때 모든 애플리케이션의 공통적인 개발 환경을 제공해준다.
쉽게 말해 개발에 필요한 화면 구현, DB 연동, 개발 환경들의 공통적인 부분을 제공함으로써 개발의 통합성과 일관성을 유지시켜준다.
1) Ravel (https://revel.github.io)
: 루비온 레일즈 MVC 타입 웹 프레임워크를 위한 공통 패턴을 제공한다. 따라서 다른 언어들은 루비 온 레일즈의 이미지 안에서 자체 프레임워크를 이행했고
레벨의 개발자에 의하면 레벨은 레일즈의 정신을 이어받았다. 기본 MVC를 제공하는 것과 다른 니즈를 만족시킬수 있는 다른 컴포넌트를 자유롭게 플러그인할 수
있고 템플릿은 고 언어의 네이티브 HTML/템플릿 패키지를 사용하거나 사용자가 자체적으로 제공할 수 있다. 마찬가지로 HTTP 엔진은 고의 자체 엔진이거나 서드 파타의 것일수 있다.
그러나 레벨은 데이터베이스를 위한 네이티브 ORM은 없다. 레벨의 설명서에 나온 한 예제에서는 고프(Gorp)라이브러리를 이용하지만, 어떤 고 ORM이든지 사용이 가능하다.
2) Beego (https://beego.me)
: 비고(Beego)는 파이썬 기반 장고 프레임워크(Django Framework)를 연상시킨다. 웹 어플리케이션에 보편적인 기능을 폭넓게 지원하고 필요에 따라
사용하거나, 무시할수 있는 모듈로 구성되어 있다. 일반적인 모델-뷰-컨트롤러(MVC)는 물론, 데이터 엑세스를 위한 객체-관계 맵 ORM 및 세션 핸들링 툴,
로깅 메커니즘, HTTP 객체와의 공통 연산을 위한 라이브러리를 포함한다.
3) Martini (https://github.com/go-martini/martini)
: 마티니는 라우팅, 예외처리 및 미들웨어를 수행하기 위한 일반적인 트릭과 같은 요구사항을 제공하면서 와일드카드, 정규식 구조, 매개변수 등을 지원한다.
커뮤니티는 20개 이상의 플러그인들을 제공한다.
4) Gin (https://github.com/gin-gonic/gin)
: Gin 프레임워크는 고성능 RESTful API 개발에 많이 사용되는 유명한 Go 기반의 오픈소스 프레임워크다. Gin 프레임워크는 성능도 높고 실제 RESTful API를
구현하는데 사용할 수 있는 간단하고 사용하기 쉬운 API를 제공한다.
5) GoCraft (https://github.com/gocraft/web)
: GoCrft 는 Go mux 및 미들웨어 패키지이다. 캐스팅과 리플렉션을 처리하여 코드를 정적으로 매우 빠르게 입력할 수 있다.
6) Traffic (https://github.com/gravityblast/traffic)
: Sinatra inspired regexp/pattern mux and web framwork for Go
7) Gorilla (https://gorillatoolkit.org)
: 고릴라는 웹 툴킷이다. MVC 유형의 프레임워크는 아니다. 웹서비스 제작의 여러 수준 측면들을 다루는데 이용되는 라이브러리이다. 그리고 보안, 쿠키, 세션, 웹소켓, HTTP 등
RPC 를 이행하기 위한 라이브러리로 구성되어 있다. 템플릿, 폼 여타 프론트 엔드는 패키지에 포함되지 않고 원한다면 사용자가 스스로 구해야 한다. 사용자가 골ㄹ라를 사용하는 다른
프레임워크를 통해서 고릴라로 구축된 것과 통합시킨 독립 컴포넌트를 통해 만들수 있다.
8) Echo (https://echo.labstack.com)
: 에코는 API를 위해 만들어진 소형 프레임워크이다. 템플릿 시스템을 포함하지 않는 대신 고 언어 자체 HTML/템플릿을 필요할 때마다 플러그인 방식으로 사용할수 있다.
기본 및 키 기반 인증, 프록시, 압축 등 API 에 일반적으로 쓰이는 미들웨어 모듈을 여럿 제공한다.
9) Iris (https://github.com/kataras/iris)
: 아이리스는 대다수 기능성을 플러그인으로 충당하고 최소 설계를 이용하는 JavaScript 및 Node.js 라는 것이다. 아이리스는 기본 MVC 기능성을 포함하고 미들웨어, 세션
라우팅, 캐싱을 기본적으로 지원한다. 아이리스는 React 프론트엔드와의 상호작용 및 Docker / Kubernetes 환경에서의 실행 등의 사례가 풍부하다.
05. 적용 가능 분야 및 대표적인 프로젝트
-도커(Docker), 곡스(Gogs: Go Git Service), 쿠버네티스(Kubernetes), Etcd&Fleet, 데이스(Deis), 플린(Flynn), 라임(Lime), 싱크띵(Syncthing), 레벨(Revel), 인플럭스DB(InfluxDB) 등
-웹서버, 웹브라우저, 웹로봇, 검색엔진, 컴파일러, 프로그래밍도구, 운영체제 등
06. 교육 자료
1) 예제로 배우는 Go 프로그래밍 (http://golang.site)
2) Go 프로그래밍 언어 투어 (https://go-tour-kr.appspot.com, https://tour.golang.org)
3) Go 프로그래밍 소스 예제 (https://gobyexample.com)
4) The book (https://thebook.io)
5) How to Write Go Code, Effective Go
6) 배송 조회 오픈소스 프로젝트 (https://github.com/purpleworks/delibird)
댓글