gRPC가 얼마나 빠른지는 이 포스트에서 알아봤었고 스트리밍 방식의 종류는 이 포스트로 알아봤습니다.이제는 동영상 전송에서의 예시를 작성해 봅시다. 1. Idea 동영상 파일을 단순히 전송하는 것을 넘어, 동영상 청크를 서버로 전송할 때마다 서버가 실시간으로 처리 상태(예: 처리 시간, 상태 코드 등)를 클라이언트에 전송하도록 구현해 봅니다.이를 통해 중간 오류 감지, 타임아웃, 재시도 등의 기능을 활용하여 안정적인 동영상 스트리밍 시스템을 구성합니다. gRPC 활용양방향 스트리밍 활용클라이언트는 동영상 파일을 일정 크기의 청크로 나누어 서버로 전송하고, 서버는 각 청크를 처리한 후 즉시 처리 결과(청크 순서, 처리 상태, 소요 시간 등)를 스트리밍으로 응답합니다.실시간 모니터링클라이언트에서는 서버로부터..
gRPC는 대부분의 언어에서 동기 및 비동기를 전부 제공합니다.제공하는 방법은 아래의 통신 패턴들과 같죠 Unary RPC (단일 요청-응답) 클라이언트가 서버에 요청을 한 번 보내고, 서버도 한 번 응답ex ) "A야, 지금 몇 시야?" → "지금 3시야" 사용 예시 ) 로그인 요청, 사용자 정보 조회와 같은 REST API에서 다루던 동작 protorpc GetUser (UserRequest) returns (UserResponse);go clientres, err := client.GetUser(context.Background(), &pb.UserRequest{Id: "123"})if err != nil { log.Fatalf("could not get user: %v", err)}fmt...
최근 많은 시스템이 마이크로서비스 구조를 전환하면서, 서비스 간 통신 방식도 REST API가 아닌 gRPC 고려해야 하는 상황이 늘고 있습니다. 본 글에서는 두 기술의 개념과 쓰임새를 정리하고, Go 언어를 사용한 예제와 벤치마크 테스트를 통해 어떻게 다른지를 비교해보려 합니다. 사실 gRPC를 다 쓰길래 얼마나 좋으면 그렇게 쓰는지가 궁금했고이미 형태가 정형화돼서 생산성이 좋은 REST API와의 차이점이 궁금했는데 이점이 글을 쓴 이유입니다. RPCRPC부터 짚고 넘어가죠RPC, Remote procedure call : 원격 프로시저 호출로 원격 호출(remote invocation) 또는 원격 메소드 호출(remote method invocation)로도 불립니다. 분산 네트워크 환경에서 쉽게 ..
개요go의 context 기능은 go 커뮤니티에서도 논쟁이 많고 이야기가 여러 가지가 있습니다.정리하면 주로 아래와 같죠 작업 취소와 타임 아웃의 유용성 : 고루틴 작업에서의 취소와 타임아웃에서는 리소스 누수 방지와 응답 개선의 효과가 있음사용에 대한 어려움 : 초기 학습의 혼란과 올바른 패턴에 이해 필요매개변수 남용 우려 : context로 값을 전달하는 과정이 오히려 가독성을 해칠 수 있다로깅과 통합 : 고유 값을 context에 담아서 로깅에 사용, 매개변수 남용이 될 수 있음동시성에서 필요하고 쓰기는 좋은 건 맞지만, 올바른 패턴의 필요성을 강조하고 있습니다.남발하면 가독성을 그만큼 해쳐지기 때문이죠 저 같으 경우 아직 Context의 존재와 기능은 머리로는 알고 있습니다만회사 소스 중에 어디에 ..
개요https://seung.tistory.com/entry/GoLang-Go%EC%97%90%EC%84%9C-%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EB%9E%80 [GoLang] Go에서 동시성이란Go 스케줄링고루틴 : Go의 최소 실행 단위로, main도 profile도 모든 게 다 고루틴고의 동시성에서는 Go 스케줄러로 어떻게 효율적으로 관리하느냐에 크게 의존합니다. goroutine 생성새로운 작업(Gorouseung.tistory.com요즘 고루틴에 대한 기억을 다시 떠올리며 공부하고 있습니다.생각해 보니 GoLang을 http 서버로 이용할 때도 고루틴으로 선언 안 해도 모든 요청을 고루틴으로 돌리더군요.즉 샘플 코드를 안만들어도, 이렇게 가까이에 좋은 예제가 있..
인상 깊은 포인트책은 "나"라는 인물의 과거 경험 담은 짤막한 6편의 단편으로 이뤄졌습니다.주된 내용은 본인의 과거 이야기나, 일상생활에서 흔히 볼법한 사람들 이야기로 구성되어 있고더 이야기를 보태자면 "나"를 통해 과거의 선택과 그로 인해 발생할 수 있었던 가능성에 대해 생각하게 만들어 줍니다.자신의 잃어버린 기회나 여태까지 걸어온 인생의 방향을 되돌아보게 끔 해주는 전개와 약간 철학적이고 사색적인 이야기를 담고 있죠. "나"를 통해 성공과 타인의 인정 욕구를 위해 불나방처럼 달려드는 사람들의 모습을 간접적으로 보게 되는데.이 과정에서 위에서 언급했던 점들을 잘 느껴지게끔 녹여낸 게 좋았습니다.중간중간 "나"는 자신의 직업이었던 작가라는 업에 계속 질문을 계속 되뇌는 데이게 책을 읽으면 자신도 모르게 ..
읽게 된 동기저번에 프로젝트 헤일메리를 너무 재밌게 읽었다 보니, 이 작가의 원조 히트작인 마션도 궁금해졌습니다.결론부터 말하면 프로젝트 헤일메리보다는 살짝 별로네요. 왜 그런지 생각해 보니, 낙관적인 주인공으로 일련의 사건들을 해결하는 모습을 보면서 계속 헤일메리의 주인공이었던 그레이스와 비슷하다는 느낌이 들었고 이게 자연스럽게 둘을 비교하게 됩니다.거기서 문제가 되는게, 두 주인공의 성격이 너무 똑같아요.그렇다 보니 마션을 읽는 데, 계속 그레이스가 느껴지는 마법이 벌어지게 됩니다 분명 마션도 나쁘진 않은데, 굳이 두 책을 두고 무엇을 읽을지 고민한다면 무조건 프로젝트 헤일메리를 추천할 것 같습니다.프로제트 헤일메리가 이야기의 완성도, 엔딩, 흥미, 재미 등 여러 부분에서 훨씬 좋습니다. 그래도 이 ..
개요지난번 글에서 이어져서, 튜닝을 직접 해보는 글입니다.https://seung.tistory.com/entry/GoLang-Garbage-Collector-%EA%B0%9C%EB%85%90 [GoLang] Garbage Collector 개념GC, Garbage Collector Garbage Collector(GC)은 프로그램 실행 중 사용되지 않는 메모리를 자동으로 회수하는 메모리 관리 기법이다.이를 통해 개발자는 명시적으로 메모리를 해제할 필요 없이, 안전하고seung.tistory.com 저번 글에서 GC, CMS, STW, GC의 청소 대상, TCMalloc 등을 알아보았는데 GC 튜닝은 메모리 사용량, CPU 사용량 그리고 STW(Stop-The-World) 시간 사이의 trade-off(..
읽게 된 계기요즘 책을 이것저것 탐색해 보고, 살짝씩 읽어보면서 재밌는 책을 찾아보고 있었습니다."소유냐 존재냐", "우리가 작별 인사를 할 때마다", " 라스트 젤리 샷" 등등 여러 개를 봤었는데.그다지 책을 읽고 싶은 감정이 안 들더군요. 실용서를 통한 공부도 좋지만, 취미로 읽는 책은 첫 번째로 흥미를 돋우게 해줘야 하고두 번째로 새로운 발상이나, 접근같이 생각을 하게끔 만들어주면 좋고마지막으로 이건 필수는 아닌데, 여운을 주면 최고라고 생각합니다. 그런 의미에서 앞선 책들은 첫 번째 단계에서 탈락이 된 거죠그러던 중 리디라는 도서 사이트에서 추천하는 책 리스트를 보던 중 유일하게 눈이 가는 책이 한 권 있더군요 이게 이 책입니다.바로 근처 교보문고에 가서 100쪽 정도 읽고 마음에 쏙 들어서 구매..
GC, Garbage Collector Garbage Collector(GC)은 프로그램 실행 중 사용되지 않는 메모리를 자동으로 회수하는 메모리 관리 기법이다.이를 통해 개발자는 명시적으로 메모리를 해제할 필요 없이, 안전하고 효율적인 메모리 관리를 수행할 수 있습니다. Go에서는 이런 GC를 Concurrent Mark and Sweep(CMS) 방식을 채택하여 애플리케이션과 GC 작업을 동시에 수행합니다, Go는 STW의 Latency 시간을 최소화하는 방향으로 발전해 왔습니다.Golang GC 튜닝의 핵심은 STW가 덜 발생하도록, 발생해도 빨리 해소되도록 하는 게 목표입니다. Concurrent Mark and Sweep, CMS CMS는 Tri-color Marking 기법으로 GC 작업을 수..