본문 바로가기

전체 글42

golang에서 inheritance structure 코딩을 하다보니, db와 api request의 변수들을 유기적으로 저장하기위해서 관련 structure를 정의내렸다. 예를 들면, tag정보를 담는 tag structure를 다음과 같이 정의했다. var Tag struct { ResourceArnstring TagKey string TagValuestring } 하지만, db에 저장하는 데이터의 형식은 Tag structure에 Owner라는 생성자 항목을 추가해야되는 상황이였다. Tag는 변경될 수 없는 고정의 structure라는 조건이 있었기때문에, Tag를 inheritance하고 거기에 owner를 추가해서 쓰려고 했다. 일단, golang은 객체를 지원하지않는 언어이며, 그에따라 상속과 같은 기능도 없다. 그리고 검색해본 결과, 1번같이 .. 2022. 8. 24.
gRPC 동작 원리 실질적으로 gRPC의 경우, proto에서 정의내려준 message의 종류와, service의 종류에 맞춰서 client와 server에서 들어온 데이터를 처리하는 것에만 신경쓰면 되기때문에, gRPC가 어떻게 구현되고, 인코딩되며, 네트워크에서 작동하는 세부방식에 대해서는 몰라도 무관하다. 하지만, 알고있는게 나쁜것은 아니고, 어디가서 아는척도 할 수 있다? 첫번째로 gRPC의 흐름에대해서 살펴보자. 1. client는 프로시저를 호출한다. service("input message") 2. client stub은 그에 맞춰서 HTTP POST 요청을 인코딩 메세지로 생성한다. 3. HTTP/2프로토콜을 이용해서 server에 전달된다. 4. server는 메세지 헤더를 통해서 알맞는 server stu.. 2022. 8. 22.
gRPC의 통신 패턴 https://www.youtube.com/watch?v=KGAernd-42M gRPC기반의 통신 패턴은 4가지가 있다. 1. 단일 RPC client는 단일 request를 서버로 보내고, 서버는 그에대한 세부정보를 response로 보내는 단순한 형태 package ecommerce; service OrderManagement { rpc addOrder(Order) returns (google.protobuf.StringValue); } message Order { string id = 1; repeated string items = 2; string description = 3; float price = 4; string destination = 5; } 와 같은식으로 기존과 동일하게 작성해주면 된.. 2022. 8. 20.
0.1 + 0.2 == 0.3 is false print ( 0.3 - 0.2 ) print ( 0.3 - 0.2 == 0.1) #output 0.09999999999999998 False 위와같은 문제는, 부동소수점에대한 고려를 하지않았기때문에 발생한 문제이다. 부동소수점이란, 표시되는 숫자는 10진법에 의해서 표시되지만, 실제 소수를 나타내는 부분은 2진법에의해서 구성되어있는 부분에서 생기는 차이이다. 이때, 지수부(소수점 앞에 부분)는 2진법의 표현으로 10진법의 모든수를 표현할 수 있지만, 가수부(fraction,소수점 뒤에 부분)는 2진법의 표현으로 10진법의 모든수를 표현할 수 없고, 그에따라서 부동소수점 문제가 발생하게 된다. fraction부분은 각 소수점 자리가 1/2, 1/4, 1/8, 1/16, ... 의 크기를 가지고 있으며, .. 2022. 8. 18.