분류 전체보기333 RabbitMQ vs Apache Kafka - 원글: https://www.cloudamqp.com/blog/when-to-use-rabbitmq-or-apache-kafka.html - 개요 두 메시지큐는 queue나 topic을 통해 생산자와 소비자간의 메시지를 전송한다. 메시지는 어떤 것이든지 될 수 있는데, 웹사이트에서 일어나는 이벤트에 관한 정보라던가 다른 Application의 이벤트를 발생시키는 간단한 메시지와 같은 형태일 수도 있다. 이런 종류의 시스템은 다른 component를 연결 시키거나, 마이크로 서비스를 구축하거나, data의 실시간 스트리밍 또는 원격 작업자에게 특정 작업을 전달하는데 적합하다. 그래서 언제 Kafka를 사용하고 또 어떨 때 RabbitMQ를 사용하는가? - Message handling Kafka가 다른.. 2022. 3. 24. Protocol buffer - 출처: https://developers.google.com/protocol-buffers/docs/overview - 개요 Protocol buffer는 언어 및 Platform에 중립적이며 구조화된 데이터를 직렬화하거나 그 반대 방향으로도 변환가능한 확장 매커니즘이다. JSON과 비슷하지만 더 작고 빠르며 지원하는 언어라면 해당 언어에 맞는 코드를 생성한다. Protocol buffer는 정의하는 부분(.proto 파일)과 proto 컴파일러가 생성하는 코드 부분으로 구성되어 있다. - Protocol buffer를 사용하여 어떤 문제를 해결할 수 있는가? Protocol buffer는 최대 몇 MB정도 되는 구조화되거나 형을 갖는 데이터 package을 위한 직렬화 형태를 제공한다. Protoc.. 2022. 3. 13. 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. Go - reflection - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/reflection - 개요 reflect package에 대해 알아본다. struct x을 받고 fn을 호출해서 재귀적으로 내부의 string field들을 모두 순회하는 함수 walk(x interface{}, fn func(string))를 작성해보자. 이번 챕터에서는 이 요구사항을 구현하기위해 reflection을 사용해볼것이다. - interface 여태까지는 string, int 형 처럼 Go에서 제공하거나, BankAccount와 같이 형을 정의한 type-safety만 다루었다. 그래서 참조할 문서를 쉽게 찾을 수 있었고, 만약 잘못된 형을 함수에 넘기면 컴파일러가 이를 미.. 2022. 1. 15. Go - select - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/select - 개요 http 요청 test를 작성하는법을 알아본다. goroutine 사용시 동기화를 위해 select를 이용해본다. - WebsiteRace example 두 URL을 받아서 HTTP GET 요청을 날렸을 때 먼저 응답한 URL을 반환하는 WebsiteRace 함수를 작성해보자. 만약 두 URL 모두 10초내로 답변이 없으면 error를 반환한다. 우선 요구사항에 맞게 간단하게 test 코드를 작성해보자. func TestRacer(t *testing.T) { slowURL := "http://www.facebook.com" fastURL := "http://www.q.. 2022. 1. 12. 이전 1 ··· 8 9 10 11 12 13 14 ··· 34 다음