twirp : 간단한 RPC 프레임워크

GHTS 2020. 9. 29. 22:42 Posted by 정직한 UnHa Kim

GHTS가 RPC에 사용하는 nanomsg 관련 코드는 AST(Ahnlab Safe Transaction : 안랩 세이프 트랜잭션)에서  악성코드라고 오진하는 문제가 있어서 HTTP 기반의 RPC를 사용해서 오진을 피해야겠다고 생각하고 있었다.

그러나, 귀차니즘으로 인해 오랜 기간 미적대면서 시간이 흐르던 와중에

사용하기 쉬운 HTTP 기반 RPC 프레임워크를 발견했다.

 

github.com/twitchtv/twirp

 

twitchtv/twirp

A simple RPC framework with protobuf service definitions - twitchtv/twirp

github.com

 

트위치TV에서 대규모로 사용 중이라고 하니 안정성도 검증되었다고 봐야하고,

HTTP 1.1도 지원하니 프로그래밍 언어 간 호환성도 좋을 것 같다.

 

소개 문서를 읽고 있는 데 왠지 마음에 든다.

조만간에 nanomsg에서 twirp로 이전을 시도해 봐야겠다.

댓글을 달아 주세요

HTTP/2는 알고보니 RPC프레임워크 이었다.

GHTS 2019. 10. 12. 15:58 Posted by 정직한 UnHa Kim

HTTP는 문자열에 기반한 요청과 응답이 1:1 대응되는 프로토콜로만 알고 있었는 데,

뒤늦게 HTTP 2.0에 대해 알아보니,

바이너리에 기반한 M:N의 양방향 RPC프로토콜로 변해있었다.

 

참고 : https://developers.google.com/web/fundamentals/performance/http2

 

GHTS에서 API호출 프로세스와 나노메시지(nanomsg)를 RPC프레임워크로 사용하고 있다.

 

애초에는 zeroMQ를 사용했으나,

zeroMQ가 C++기반이라서 컴파일이 너무 느려서 개발 작업에 많은 방해가 되던 차에

nanomsg는 zeroMQ와 비슷한 기능을 가지면서도,

Go언어 구현체인 go-mangos의 존재 덕분에 컴파일 속도가 확연히 빨라져서,

개발 속도 향상에 많은 도움을 받았으며 그간 나름 만족스럽게 사용하고 있었다.

 

그러나, nanomsg는,

- 적은 수의 개발자

- 충분히 증명되지 않은 안정성

- 충분히 증명되지 않은 최적화

등의 문제로 인해서 찜찜한 면이 있었다.

 

HTTP/2는 구글의 SPDY를 토대로 수많은 수정과 초안을 거치며 규격이 정해진 데다가,

여러 인터넷 기업에서 사용되면서 안정성과 최적화 문제가 자연스럽게 해결된 상태인데다가,

Go언어 표준라이브러리에 포함되어 있기에 컴파일 속도까지 향상되므로,

여러모로 유리할 것 같아서,

RPC프레임워크를 nanomsg에서 HTTP/2로 바꾸는 게 낫겠다는 생각을 하게 되었다.

 

물론, 구글에서 gRPC라고 HTTP/2기반의 RPC프레임워크를 공개해 놨지만,

protocol buffer로 자료 변환을 하는 방식이 오히려 불편하게 느껴져서,

gRPC는 현 상황에서는 불필요한 복잡성만 도입하는 듯 하여 고려 대상에서 제외했다.

 

HTTP/2에 기반한 간단한 양방향 호출 예제는 h2conn을 참고하였다.

 

https://github.com/posener/h2conn

 

정말 단순하게 IPC를 실행하는 게 감동적이었다.

 

h2conn 예제는 json, gob 인코딩을 사용해서 문자열을 주고 받도록 되어 있는 데,

encoding/binary 패키지를 사용해서 바이너리 데이터를 주고받도록 변경하면,

그 즉시 RPC프레임워크로 바로 사용할 수 있을 듯 하다.

 

 

 

댓글을 달아 주세요

어제, 오늘, 금일, 당일, 전일.

GHTS 2019. 10. 10. 12:17 Posted by 정직한 UnHa Kim

간단한 용어이지만 혼동을 유발하는 경우가 있어서 메모해 놓는다.

 

금일, 어제는 주말, 공휴일등 모든 일자를 포함해서 지칭하지만,

 

주식매매에서 '당일', '전일'은 증시 개장일만 고려해서 지칭한다.

 

 

금일 : 오늘 

 

당일 : 가장 최근 영업일.

 

금일이 개장일이면 '당일 == 금일'이다.

 

금일이 (주말, 공휴일 기타 이유로) 개장일이 아니면 '당일 != 금일'(!!)이므로 주의를 요한다.

 

 

전일 : 당일 이전 가장 최근 영업일.

 

이것도 일자 상으로 어제와 전일이 다른 경우가 종종 있다.

 

만약, 오늘, 어제 모두 개장일이었다면, '전일 == 어제' 이다.

 

그러나, 만약 오늘은 개장했지만, 어제는 공휴일이었고, 그저께 개장일이었다면,

 

'전일 == 그제'가 된다.

 

만약, 중간에 연휴가 끼어있었다면?? -> 연휴 이전 마지막 개장일이 전일이 된다.

 

 

간단하지만 혼동되는 용어라서 정리를 해 보았다.

 

 

댓글을 달아 주세요