Skip to content

Files

Latest commit

43feb45 · Oct 6, 2020

History

History
193 lines (101 loc) · 12.8 KB

2020-09.md

File metadata and controls

193 lines (101 loc) · 12.8 KB

2020-09

목차

Go 새소식

이제 Go에 제네릭이 추가된다는 사실은 모두가 아는 사실이지만 내부적인 구현방식에 대해 궁금해하는 사람들은 별로 없습니다. 해당 토론에서 Keith Randall이 제네릭을 구현하기 위한 두 개의 디자인 문서를 공개하였습니다.

  1. Stenciling. 이 전략은 모든 인스턴스화 (제공된 형식 인수 집합)에 대해 별도로 일반 함수의 구현체를 생성합니다. 이것은 C++가 제네릭을 수행하는 방법입니다.
  2. Dictionaries. 이 전략은 가능한 모든 타입의 인수를 처리할 수있는 일반 함수의 단일 구현을 생성합니다. 이것은 Stenciling (C++)보다 타입 유추 능력은 (analogy) 약하나 Java가 제네릭을 수행하는 방식과 같습니다.

Go 릴리스 관련

새로운 프로젝트 & 릴리스

Elasticsearch 공식 Go 클라이언트를 소개합니다. 이 블로그 게시물에서는 Go 클라이언트의 전체 아키텍처와 패키지를 소개하며, 간단한 사용 예제 몇 가지를 제공합니다.

Stripe 공식 Go 클라이언트가 릴리스 되었습니다.

httpx 1.0 버전이 릴리스 되었습니다. httpx는 retryablehttp 라이브러리를 사용하여 빠르게 여러 프로브를 실행할 수 있는 다목적 http 툴킷입니다.

웹프레임워크 Goyave 버전 3.0이 릴리스 되었습니다.

GitHub CLI 1.0이 릴리스되었습니다.

Go Bluetooth는 저전력 블루투스(Bluetooth Low Energy)를 크로스 플랫폼에서 지원합니다.

올 가을 20.2가 출시되면서 Pebble은 CockroachDB의 기본 스토리지 엔진이 될 것입니다. RocksDB와 호환되며, 더 나은 성능과 안정성을 제공합니다. 또한 cgo의 오버헤드를 제거하였고, 출시 예정인 20.2 릴리스에서 Pebble은 RocksDB를 기본 스토리지 엔진으로 대체 할 것입니다.

modgv

go mod graph 출력값을 GraphViz의 DOT 언어로 변환하는 패키지입니다.

Go의 언어 서버인 gopls v0.5.0이 릴리스 되었습니다.

TamaGo는 베어 메탈 ARM SoC (System-on-Chip)에서 Go 애플리케이션을 컴파일하고 실행할 수 있는 프레임워크입니다.

TinyGo 0.15 버전에서 ESP32 및 ESP8266를 지원한다고 합니다.

파이썬으로 개발한 Diagrams를 Go로 포팅한 프로젝트입니다.

ali는 vegeta 및 jplot에서 영감을 받은 실시간 부하 테스트 도구입니다.

Go로 작성한 모던 ls 커맨드입니다. vscode같은 파일 아이콘과 Git Integrations를 지원합니다.

Twirp는 단순성과 미니멀리즘을 강조하는 서비스간 통신을 위한 프레임 워크입니다. Protobuf 파일에 서비스를 정의하면 twirp가 Go 코드를 자동 생성합니다.

프레임워크에 구애받지 않는 경량의 데이터베이스 마이그레이션 도구입니다.

튜토리얼 & 가이드

Introducing Clean Architecture by refactoring a Go project

Clean Architecture는 소스코드 내에서 도움이 될뿐만 아니라 전체 팀의 작업을 더 쉽게 만드는 패턴 중 하나입니다. 예제 프로젝트인 Wild Workouts을 리팩터링 하면서 클린 아키텍처의 개념과 함께 실제 사용사례를 설명합니다.

Hasura Actions를 사용해 REST API를 GraphQL로 변환하기

Hasura Actions을 사용하여 기존 REST API를 GraphQL로 변환하는 글입니다.

Go 레포지토리의 레이아웃을 설명합니다. 기본적으로 최소 4가지의 디렉토리가 있어야 한다고 소개하고 있으며 몇 가지 추가 디렉토리를 소개합니다.

  • cmd/ -> 실행 가능한 커맨드 코드가 위치하는 디렉토리.
  • docs/ -> 사람이 읽을 수 있는 문서가 위치하는 디렉토리.
  • internal/ -> 내부적으로 사용하는 코드가 위치하는 디렉토리.
  • scripts/ -> 메타 작업에 필요한 모든 스크립트가 위치하는 디렉토리.

Go로 웹서버를 구현하는 튜토리얼 입니다.

Running Go Code on iOS and Android

iOS 애플리케이션 (Swift)과 Android 애플리케이션 (Kotlin)에서 실행할 수있는 간단한 Go 애플리케이션을 작성하는 튜토리얼입니다. 이 튜토리얼에서는 Go Mobile을 사용하지않고 Cgo를 사용하여 C 라이브러리르 빌드합니다.

WASM과 웹 워커(Web worker)를 사용하여 브라우저에서 Go 실행하는 튜토리얼입니다.

기술글 & 경험담 & 개선기

Fuzzing에 대한 심층 분석과 Go의 공식 Fuzzing proposal을 자세히 살펴 봅니다. Fuzzing은 소프트웨어 테스트 기법으로서, 컴퓨터 프로그램에 유효한, 예상치 않은 또는 무작위 데이터를 입력하여 소프트웨어의 동작을 테스트합니다.

Optimizing a code intelligence indexer

Sourcegraph에서 코드 인텔리전스 인덱서를 최적화 한 글입니다. 중복검사를 제거하고 병렬화 및 버퍼를 사용하여 최적화 했다고 합니다. 이전에는 Go AWS SDK를 인덱싱하는 데 약 8분이 걸렸는데 이제 24초 밖에 걸리지 않는다고 합니다.

컴파일 / 배포없이 eBPF를 사용하여 프로덕션에서 애플리케이션을 디버깅 할 수있는 방법을 설명하는 시리즈 중 첫 번째 포스트입니다. 이 게시물에서는 gobpf 및 uprobes를 사용하여 Go 애플리케이션의 함수 argument를 추적하는 방법을 설명합니다.

AST (추상구문트리)에 대한 설명과 go/ast 패키지를 활용하여 NATS 마이크로 서비스를 구문분석하여 문서화를(Swagger같은) 하는 간단한 예제를 소개합니다.

Go 코드베이스를 분석하는 방법에는 go/analysis또는 XTGP(x/tools/go/packages)를 사용하는 두 가지 방식이 있습니다. XTGP는 Config 방법과 커맨드 라인 인터페이스(flags, etc.) 정의가 좀 더 유연하고, 이 방식을 사용하면 보다 많은 정보를 가져올 수 있습니다. go/analysis는 다양한 분석 패스(passes)를 제공하며 더 적은 코드량으로 분석을 할 수 있습니다. 패키지를 구문 분석하고 타입을 확인하여 AST 및 전체 타입 정보에 대한 접근법을 제공합니다.

런타임 소스 코드 기반으로 Go 가비지 컬렉터에서 포인터 값을 읽고 (unsafe.Pointer 값 포함) 유효한 객체를 가리키지 않았을 때 패닉을 뿜는 상황을 설명합니다.

Hacking Ethernet out of Fibre Channel cards

이베이에서 충동적으로 Fibre Channel 카드를 구매했으나 FC (Fibre Channel)는 일반 Ethernet 네트워크와 달랐기 때문에 사용을 할 수 없어 Go로 가상 SCSI 장치를 작성하여 사용 가능하도록 만들었다고 합니다.

pprof를 활용한 PGX 라이브러리 최적화. PGX는 Go용 Postgres 드라이버로 널리 사용되며 이 글에서는 프로파일러를 사용하여 메모리 할당 이슈를 개선하는 방법을 보여줍니다.

대용량 분산 파일 시스템인 lakeFS에서 캐시를 추가하여 초당 10만 건의 요청을 견뎌낼 수 있도록 최적화한 방법을 소개합니다.

Go를 사용하여 API 및 ETL 처리 파이프 라인을 개발하였지만 해당 파이프라인에 병목이 있어서 개선한 이야기입니다.

Go는 아직 엔터프라이즈 시스템에 적합하지 않으며 그 이유로는 잘못된 에러처리, SQL 쿼리 직접 작성, 종종 툴을 재개발하는 Go 개발자들, 그리고 믿을만한 도구들의 부재를 들고 있습니다.

읽을거리

Go 모듈에서 메이저 버전이 2 이상일때 (v2+) 별도의 프로젝트로 인식된다는 문제점을 비판합니다.

Go 모듈에서 메이저 버전이 2 이상일때 (v2+) 클라이언트측에서 go get -u을 해도 새로운 메이저 버전으로 업데이트 할 수 없다고 비판합니다.

오픈소스 웹서버인 Caddy를 apilayer가 인수되었습니다. apilayer는 클라우드기반 SaaS 애플리케이션을 B2B로 제공하는 기업입니다. 기존 라이선스 또는 배포는 변경하지 않는다고 합니다.

Go 팀의 일원이었던 브래드 피츠패트릭 (Brad Fitzpatrick)의 인터뷰입니다. 언제부터 프로그래밍을 시작했는지, Go팀에 어떻게 합류했는지, 제네릭에 대한 이야기와 새로운 오류 처리에 대해 왜 소극적인지 등등 이야기합니다.