3일
- istio의 rate limit의 기준
8일
리소스 효율화에 대한 단상
리소스 효율화는 운영 비용을 낮추는 것을 의미하지 않는다. 단지 비용을 낮추는데 도움이 될뿐이다.
예를 들어서 땅파는 사업을 하는 회사가 있다고 해보자. 그 회사는 전통적으로 인부들의 손과 삽으로 땅을 파왔다. 사장은 사업규모가 점점 커지고 작업을 효율적으로 일하기 위해서 포크레인을 도입한다. 문제는 이 회사가 포크레인을 써본 경험이 없다는 것이다. 그래서 테스트 삼아 화단에 꽃을 심기 위해 포크레인으로 땅을 판다. 당연히 조그마한 화단은 포크레인으로는 힘들다. 그래서 작업이 늦어진다. 대책회의가 열리고 한 대로는 빠르게 못파니 여러 대를 투입해서 파기로 결정 한다. 이제 비효율적이다 못해 서로 엉켜서 더 작업이 안된다. 그러고서는 사장이 그렇게 말하는 것이다. “포크레인이 효율적이라더니 영 아닌데..” 그러고서는 다시 인부들에게 삽을 쥐어줄것이다. 그리고 아마 그 회사는 영원히 큰 토목공사는 못할것이다.
말도 안되는것 같다고? IT 세상에서는 워낙 비일비재한 일이다. 무언가 효율을 위해 도입하면서, 정작 자신들이 해오던 관습과 생각과 레거시를 버리질 못한다. 그 결과 더 큰 비효율을 가져온다. 큰 회사일수록 더더욱 그렇다. 포크레인을 왜 써야 하는지 모르고 알고 싶지도 않아 한다. 그져 포크레인이 문제라며, 저 커다란 덩치와 먹는 기름을 보라며 욕을 할 뿐이다.
리소스 효율화로 비용을 낮추고 싶다면, 뭐 하나 도입해서 짜잔 하고 될 생각을 버리고 자신의 생각 부터 바꿔야 한다.
9일
grpc-go 관련
- gprc-go 는 Server의 구현상 HTTP 와 GRPC의 TCP Port 를 공유해서 사용 하기 어렵다.
- 이유는 grpc-go 의 serveHTTP 구현이 HTTPS에서만 가능 하도록되어 있기 때문이다.
- https://github.com/grpc/grpc-go/issues/75
- https://github.com/grpc/grpc-experiments/issues/284
- https://github.com/grpc/grpc-go/pull/514
- serveHTTP 에서 (http/2를 쓰기 위한) upgrade 구문을 TLS 가 아닌경우를 배제하고 작성이 되어 있다.
- 이는 코드의 복잡성과 2stage의 upgrade 지원이 어렵기 때문이다.
- 만약 HTTP 와 GRPC를 같은 TCP port 로 제공 해야 한다면 cmax 같은것을 써야 한다.
- 사실 HTTP와 Grpc를 반드시 같은 포트로 제공 해야 하는 이유는 상대적으로 우선순위가 낮다.
- 보안적으로도 당연히 그러하고
- HTTP와 같이 제공하는 경우에는 어차피 grpc-web 또는 grpc-gateway 를 사용해야 해서 중간 proxy를 따로만들어야 하고,
- 필요시에는 서버는 따로 두고 envoy같은 L7 proxy에서 라우팅 해도 되기 때문이다.
- 특히 grpc 같은 경우에는 MSA 구조가 따라오므로 L7 이 필요할떄가 많기도 하다.
- 대안은,
- grpc-web: Type script client lib와 server에 grpc wapper를 제공
- grpc-gateway: grpc 호출을 json 호출로 변환. client lib 을 만들어 주진 않음.
17일
- Table Header 가 복잡할경우 이런식으로 45도 돌린 header 가 적절해 보인다.
- Webpack, rollup 등 js, css를 bundle 해주는 것은 js module을 사용 하면 그닥 적절치 않은 선택일수 있다.
- 그럴떄는 https://www.skypack.dev/ 같은 module 제공 CDN을 사용하면, bundler는 물론 npm 이나 yarn 같은 package 관리지를 사용 안해도 되며, version 문제, cache문제 등도 해결 할수 있다.
23일
29일
- https://medium.com/swlh/distributed-request-logging-in-go-with-context-api-16040688ed36
- https://blog.gopheracademy.com/advent-2016/context-logging/
- https://gist.github.com/dnephin/4b8106cf5b09494d1caecdf8f74ce88e
- https://github.com/sirupsen/logrus/issues/681
- https://www.youtube.com/watch?v=gfh-VCTwMw8
31일
- https://youtu.be/Td7w0_nD5_4?list=PLwy1zbNBWdrvVfLDb9QEfAXxaM-G4SnRT
- private repo에 있는 go package를 써야 할 경우 go 설정법