Grpc와 goroutine 각각은 대체 어떤 원리로 돌아갈까

Table of contents

  1. Golang
    1. What is the Golang?
    2. Why using Golang?
    3. gofiber
      1. Session
    4. Basic
      1. Fuzzing
    5. WebAssembly
    6. Generic
    7. Efficient Go
    8. Logger
    9. Amazon Web Services
    10. Google Cloud Platform
    11. Parallel Processing
    12. Inside Golang
    13. Performance
    14. Server Side
      1. Server Monitring
      2. API
    15. DataBase & ORM(Object Relational Mapping)
    16. BlockChain
    17. GoRoutine
    18. Go Garbage Collector
    19. Google Cloud Platform
    20. gRPC
    21. TDD(Test-Driven-Development) / Test Code
    22. Guides
    23. Design Pattern
      1. golangcli-lint
    24. Engineering Log
    25. Compouter Science
    26. Tips & Error Solution
    27. Libray & Packages & Framework & Tools
    28. Versions

What is the Golang?

  • 노마드 코더 Nomad Coders - 왜 구글의 프로그래밍 언어 Go가 겁나 핫한건지 5분 설명
  • William Boyd - What is Go? An intro to Google’s Go programming language (aka Golang)
  • 드림코딩 by 엘리 - 고언어 GoLang, 블록체인 Blockchain, 백엔드, 모든 개발자가 꼭 주목해야 하는 프로그래밍 언어 ⭐️

Why using Golang?

  • 당근마켓 개발팀 김동현 - 왜 우리는 Go와 TypeScript를 선택했는가
  • Google - Using Go at Google
  • 당근마켓 개발팀 변규현 - 당근마켓의 고언어 도입기, 그리고 활용법

gofiber

Session

  • Go fiber with session
  • Session

Basic

Fuzzing

  • Introduction to Fuzzing

WebAssembly

  • WebAssembly: Introduction to WebAssembly using Go
  • WebAssembly: DOM Access and Error Handling

Generic

  • 구글 고(Go) 언어, 2021년 제네릭(Generic) 지원 예정
  • Tutorial: Getting started with generics
  • Why Generics?
  • Min and max functions using Generics in Go
  • Golang Generics is Officially HERE!! (Full Tutorial)
  • golang 1.18의 workspace mode 알아보기
  • Generics can make your Go code slower
  • Generics can make your Go code Faster
  • Golang Diaries: Generics

Efficient Go

  • Go 언어의 map을 range로 순회할 때 접근 순서는 무작위로 된다
  • 병렬 처리에서 효과적인 디버깅 및 분석 방법
  • Go를 Supervisor으로 데몬화 해서 실행하기
  • Go 런타임 사례 연구

Logger

시스템이나 서비스를 설계하면서 종종 로그를 기록을 해야할 때가 생긴다. 그런 떄 사용하면 좋을 패키지나 팁을 저장하고 기록.

  • 직접 만든 Logger 안에서 zap 라이브러리를 사용할 때 Caller에 Logger 보다 위의 계층을 출력하는 방법
  • Golangで自作Logger中でzapライブラリを使う際、CallerにLoggerより上の階層を出す方法
    • 위 문서에서 참고한 내용임.
  • Tip) 클라우드 서버 환경을 사용할 시 로그 파일을 로컬에 저장하는 경우 클라우트 서버의 용량을 차지하거나 서버의 비용의 부담을 줄 수도 있음. 몇 시간마다 아니면 출력만 하고 저장을 DB에 저장하는 방안이 있음.
    압축하여서 AWS3 Bucket에 저장하거나 MySQL 등에 저장하면 됨.

Amazon Web Services

  • DynamoDB를 사용하는 Go 서비스의 응답 시간 최적화 #1 AWS Credential Token
  • HTTP connection pool in Go explained
  • Go를 활용해 AWS Cloud Watch에 나만의 커스텀 Metric 넣어보기

Google Cloud Platform

  • tae2089/go-simple-telementry

Parallel Processing

  • Expert Tips for Using Go Concurrency and Parallelism to Improve Performance
  • Basic Parallel Computing in Go

Inside Golang

  • Golang의 내부, 1부: 주요 컨셉트와 프로젝트 구조
  • Golang의 내부, 2부: Go 컴파일러 들여다 보기
  • Golang의 내부, 3부: 링커, 오브젝트 파일, 그리고 재배치
  • Golang의 내부, 4부: 오브젝트 파일, 그리고 함수 메타데이터
  • Golang의 내부, 5부: 런타임 부트스트랩
  • Golang의 내부, 6부: 부트스트래핑과 메모리 할당자

Performance

  • Mini Resource List for Golang
  • [메모리, 줄여야한다 (김효준님) - GDG Golang Korea 5월 정기 테크톡](https://youtu.be/LQTI5jkXOR0)

  • Making your Go workloads up to 20% faster with Go 1.18 and AWS Graviton
  • strings.Cut과 strings.SplitN 중 어느 쪽이 빠를까?
  • [Go] sort In struct and map
  • Go로 개발한 스트리밍 서버의 메모리 사용량 문제에 대처

Server Side

  • 최흥배 - HTTP Response Body 내용을 로그로 남기기
  • PROMETHEUS - INSTRUMENTING A GO APPLICATION FOR PROMETHEUS
  • WATCHA 푸시 서버 개선하기
  • <go>fcm push 발송 (android, ios)
  • Golang으로 백엔드 개발하기 - 4. Custom Middleware(미들웨어) 작성해보기 (feat. fiber)
  • Golang으로 백엔드 개발하기 - 5. Error Handling. 에러 잘 처리하기 (feat. fiber)
  • Go CORS handler

Server Monitring

  • Fiber - Monitor
  • ssimunic/gossm - Server status monitor written in Go

API

  • google/jsonapi - jsonapi.org style payload serializer and deserializer

DataBase & ORM(Object Relational Mapping)

  • DB 마이그레이션 툴 migu 소개

BlockChain

  • mingrammer/blockchain-tutorial
    • 원본: Jeiwan/blockchain_go

GoRoutine

  • [Go] 동시성을 위한 GoRoutine과 Channel
  • 고루틴 순서대로 실행하기, 뮤텍스 이해하기
  • Go-Basic/go-basic-src/Concurrency Pattern/
  • Production Ready Go Concurrency

Go Garbage Collector

  • A Guide to the Go Garbage Collector

Google Cloud Platform

  • Deploy a Serverless Golang App to Google Cloud Run

gRPC

  • 개발자님 CS 드세요 - gRPC 소개 및 go 예제
  • DevJin-Blog - Golang gRPC server 구축하기 (1) - gRPC란 무엇인가?
  • banksalad 블로그 - 프로덕션 환경에서 사용하는 golang과 gRPC
  • LINE Engineering - 따로 놀던 슬랙봇, gRPC 통해 하나 되기
  • 한성민 - GDG Golang Korea 2019.05: gRPC와 Goroutine 각각은 대체 어떤 원리로 돌아갈까?
  • 당근마켓 개발팀 배상익 - 실전! gRPC 서비스 운영 노하우
  • “protoc-gen-go: program not found or is not executable Please specify a program using absolute path or make sure the program is available in your PATH system variable –go_out: protoc-gen-go: Plugin failed with status code 1.” Code Answer’s
    • protoc-gen-go 패키지와 관련된 오류 해결 방법에 대해서 서술 되어 있음, protoc-gen-go 패키지가 업데이트 되면 조금 달라진 점이 있는 것 것 같음, 추후 확인 필요.
    • 본 문제와 관련되어서 블로그 작성하였음. gRPC Protocol Buffer 문제 해결하기
  • REST API vs gRPC, which one should you use in breaking a monolith (Vladimir Dejanov)
  • vladimirvivien/go-grpc

TDD(Test-Driven-Development) / Test Code

  • Golang Korean Community - Golang 프로젝트에 TDD 도입하기
  • 당근마켓 개발팀 Marco - 유연하고 테스트 가능한 Go 코드 작성하기

Guides

  • uber-go/guide
    • TangoEnSkai/uber-go-style-guide-kr
    • Uber에서 Go코드 작성할 때 해야할 할 것과 하지 말아야할 것에 대해서 자세히 설명하여서 프로그래밍 컨벤션의 복잡성을 관리하고 있다. 업무에 쓰거나 협업을 할 때 보면 좋은 자료.
  • ultimate-go-korean/translation
    • 커뮤니티에서 알고 있으신 분들께서 많이 참여를 하셨다, 한 번 살펴보고 공부하면 좋을 것 같다.
  • golangkorea/effective-go
    • 효과적인 Go 프로그래밍에 대한 튜토리얼인 Effective Go를 Golang Korea에서 번역 해 주신 자료임.
  • Introduction to Golang Maps With Examples
  • Twelve Go Best Practices
  • tmrts/go-patterns
  • GoF Design patterns that still make sense in Go

Design Pattern

  • [Design Go] 좋은 코드와 디자인 패턴
  • DESIGN PATTERNS in GO
  • GO Design Patterns
  • golang design pattern #1 Builder

golangcli-lint

  • 당근마켓 - golangci-lint를 이용하여 코딩 스타일을 효과적으로 관리하기
  • golangci-lint 이해하기

Engineering Log

  • Uber Kai Wei - How We Built Uber Engineering’s Highest Query per Second Service Using Go
    • Uber에서 초당 최대 쿼리에 관련된 서비스를 개발하면서 있었던 내용들 남김.
  • AB180 김효준 - Golang on Analytics & Blockchain
  • golang을 이용한 구독 커머스 아키텍처 설계

Compouter Science

  • Go 언어로 적용해보는 Computer Science - Mutex와 Semaphore
  • Go 언어의 GC에 대해

Tips & Error Solution

  • Varun Kumar - How to make VScode Go work in a Multi-Module Repo
    • gRPC와 관련되어서 공부를 진행하던 도중 워크 스페이스와 관련된 오류가 발생되어서 질문을 드린 결과, 궁금증과 오류를 해결할 수 있는 글.
  • Stack Overflow Ayush Gupta - protoc-gen-go-grpc: program not found or is not executable
    • protoc-gen-go-grpc와 관련된 오류. APIv1에서 APIv2로 업데이트 하는 과정에서 APIv2의 경우는 역호환 되지 않아서 오류가 해결 되지 않음.
  • Logging in Go: Choosing a System and Using it
    • 로그를 기록 하기 위해서 만든 패키지
  • err import cycle not allowed
    • 개발을 하던 중 패키지와 관련된 오류가 발생하였음, 해결 방법과 Go에 대한 내용을 보고자 남김.
  • Go 1.18 build error on Mac: “unix/syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable”
  • Go언어 “import cycle not allowed” 편
  • fatih/color
    • Terminal 상에서 문자에 색상을 넣고 싶을 때 사용함.
  • spf13/cobra
    • CLI를 개발 프레임워크임.
  • grpc/grpc-go
    • gRPC 개발 시 필요한 라이브러리
  • haveyoudebuggedit/gotestfmt
    • Have you Debugged it? - gotestfmt: go test output for humans
    • go test output for humans
  • kongbong/ecsgo
    • Go 1.18 Generic 을 이용해서 ECS(Entity Component System)을 Go로 만들어 본 패키지
  • rakyll/goproxy-s3
    • AWS S3 Proxy Server
  • jobinbasani/golang-aws-lambda-ffmpeg
    • AWS Lambda + Golang + FFmpeg를 사용할 수 있도록 만들어진 패키지
  • line/garr
    • Collection of high performance, thread-safe, lock-free go data structures
  • devnw/gvm
    • Go Version Manager (gvm) enables seamless installing and swapping between Go versions with a single command.
  • livebud/bud
    • The Full-Stack Web Framework for Go
  • serverlesspub/ffmpeg-aws-lambda-layer
    • FFmpeg/FFprobe for AWS Lambda

Versions

  • Version 1.18
    • Go 1.18 Release Notes
  • Version 1.19
    • Go1.19rc1
      • Go 1.19 Release Candidate 1 is released
    • Go 1.19 is released!
      • 2022.08.02 공식적으로 릴리즈 되었음.
    • The Go Weekly Newsletter #423 - Go 1.19 Released