Search

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

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

 

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

 

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

 

 

금일 : 오늘 

 

당일 : 가장 최근 영업일.

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

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

 

 

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

 

 

댓글을 달아 주세요