본문 바로가기

전체 글333

gRPC with protobuf - 출처: https://grpc.io/docs/what-is-grpc/introduction/ - 출처: https://grpc.io/docs/languages/go/quickstart/ - 출처: https://github.com/grpc/grpc-go/tree/master/examples/helloworld - 개요 google에서 개발한 Remote Procedure Call이다. IDL(Interface Definition Language) 및 기본 메시지 교환형식으로 protocol buffer를 사용할 수 있다. RPC와 비슷하게 서버측에서는 interface를 구현하고 gRPC 서버를 실행하면 클라이언트에서는 서버와 같은 메소드의 stub을 갖는 구조이다. gRPC는 여러 언어를 지원하는데.. 2022. 3. 13.
RPC(Remote procedure call) - 출처: https://en.wikipedia.org/wiki/Remote_procedure_call#Analogues - 출처: https://pkg.go.dev/net/rpc - RPC란 무엇인가 gRPC에 관해 알아보기 전에 RPC란 개념부터 알아보기로 하자. RPC란 Remote procedure call 의 약자이다. 다른 주소공간(일반적으로는 같은 네트워크를 공유하는 다른 컴퓨터)의 procedure를 실행할 때, 원격 세부사항에 관한 명시적인 코딩없이 마치 local 컴퓨터의 procedure를 호출하는것처럼 사용하는 방식이다. OOP에서는 RMI(Remote method invocation)으로 표현하기도 한다. Go에서는 package rpc를 제공하며 Java에서는 Java RMI를 .. 2022. 3. 13.
Go - Reading files - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/reading-files - test-double: https://tecoble.techcourse.co.kr/post/2020-09-19-what-is-test-double/ - 개요 이번 챕터에서는 file을 읽고 데이터를 얻는 방법에 대해 알아본다. 만약 친구와 blog 소프트웨어를 만든다고 가정해보자. 저자들은 게시물을 markdown으로 작성하며 file의 상단에는 메타데이터가 존재한다. 시작시에 웹서버는 게시물을 생성하기 위해 folder를 읽고, 별도의 NewHandler 함수가 해당 게시물들을 blog의 웹서버를 위한 데이터소스로서 사용할것이다. - Example blog .. 2022. 3. 13.
아키텍처 - 아키텍처 사고 - 출처: 이 글은 도서 '소프트트웨어 아키텍처 101'을 참조하여 작성된글입니다. - 개요 아키텍처 사고는 단순히 '아키텍처를 생각하는것'이라고 많은 오해를 하지만 아키텍처 관점에서 사물을 바라볼줄 알아야 하는것을 의미한다. 아키텍트의 사고방식은 크게 4가지 사고방식으로 나눌 수 있다. 아키텍처와 설계 차이의 이해 기술의 깊이보다는 폭넓은 지식의 이해 다양한 솔루션과 기술간의 Trade off 이해 비즈니스 동인(행동을 촉발시키는 내적 원인의 총칭)의 중요성이해(이 글에서는 다루지 않는다.) - 아키텍처 vs 설계 아키텍처와 설계의 차이점은 모호한 경우가 많다. 이를 이해하기 위해 전통적인(기존 시각의) 아키텍트와 개발자의 책임을 이해해보자. 아키텍트 비즈니스 요구사항을 분석하여 아키텍처의 특성(~성).. 2022. 3. 9.
Go - Context - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/context - 출처: https://pkg.go.dev/context - 출처: https://go.dev/blog/context - 출처: https://faiface.github.io/post/context-should-go-away-go2/ - Context Software를 구축하다보면 긴 생명주기를 갖거나 자원 집약적인 process들을 실행시켜야 하는 경우가 있다. 어떤 이유에 의해 이런 행위를 발생시킨 요청이 취소되거나 실패한 경우, application을 통해 일관된 방식으로 이런 프로세스들을 멈추도록 해야 한다. 이런 조치를 취하지 않으면 성능 문제를 디버깅 하느라 상.. 2022. 2. 27.
Go - Sync - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/sync - 개요 병렬 프로세스에 안전한(thread-safe) counter를 만들어본다. single-thread에서 동작하는 counter를 만들고 난 후, 여러 개의 goroutine으로 unsafe함을 확인하고 Sync를 이용해서 이를 고쳐보자. race condition을 해결하기 위한 Mutex도 사용해본다. - Counter Counter를 증가시키는 메소드와 Counter의 값을 반환하는 메소드를 만들었다고 가정한 후 test 코드를 작성해보자. func TestCounter(t *testing.T) { t.Run("incrementing the counter 3 time.. 2022. 1. 20.