Go Lang/Study

https://seung.tistory.com/entry/GoLang-gRPC%EB%A5%BC-%ED%86%B5%ED%95%9C-%EB%8F%99%EC%98%81%EC%83%81-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D-%EB%B0%8F-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81 [GoLang] gRPC를 통한 동영상 스트리밍 및 모니터링gRPC가 얼마나 빠른지는 이 포스트에서 알아봤었고 스트리밍 방식의 종류는 이 포스트로 알아봤습니다.이제는 동영상 전송에서의 예시를 작성해 봅시다. 1. Idea 동영상 파일을 단순히 전송하는seung.tistory.com이전 글을 했다는 가정하에 해당 글을 진행합니다. 1. Idea이전에는 단순히 영상을 청크로 나눠서 g..
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 서버로 이용할 때도 고루틴으로 선언 안 해도 모든 요청을 고루틴으로 돌리더군요.즉 샘플 코드를 안만들어도, 이렇게 가까이에 좋은 예제가 있..
개요지난번 글에서 이어져서, 튜닝을 직접 해보는 글입니다.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(..
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 작업을 수..
추상 팩토리 디자인 패턴추상 팩토리 디자인을 사용해 보겠습니다.아마 여러분이 디자인 패턴을 한 번이라도 봤다면 이 패턴을 가장 처음 보게 될 텐데이게 디자인 패턴 중 가장 친근할 겁니다. 요약하자면 일정한 패턴을 가진 객체들을 자주 사용할 때공통된 함수나 변수로 묶어서 인터페이스를 만들고, 이 인터페이스를 잘 활용을 하는 방법입니다. 이걸 구현하는 하위 객체들을 사용하는, 호출 부에서는 객체 하나하나의 생성을 로직을 몰라도 바로 쓸 수 있습니다.이로써 객체 생성의 추상화가 구현됨으로써 유연성과 확장성을 높여 줍니다. 개념추상화라는 말이 들어가는 걸로, 알 수 있듯이 객체 지향 언어에서 인터페이스를 사용해서 주로 구현합니다.여러 객체를 생성하기 위해 이들을 묶는 상위 개념의 인터페이스 제공각 객체는 Fac..
GraphQL이 뭔지 궁금하다면 다음 주소를 참고 ㄱㄱ https://seung.tistory.com/entry/GraphQL%EC%9D%B4-%EB%AD%94%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%BC%EA%B9%8C Go에서는 GraphQL을 지원하는 라이브러리는 참 많던데 주로 쓰이는 건 아래와 같다 99designs/gqlgen: https://github.com/99designs/gqlgen graphql-go/graphql: https://github.com/graphql-go/graphql graph-gophers/graphql-go: https://github.com/graph-gophers/graphql-go 뭘 할까.. 대충 아래 목록을 기준으로 고르도록 했다 해..