-
[Golang] 마이크로서비스 공통패턴개발언어/Go 2020. 10. 14. 01:00
마이크로 서비스를 구성할 때에는 아래와 같은 패턴을 고려해서 설계하는 것이 좋다. 1. 이벤트처리 기존에 알려진 위치에 있을 수도 있고 없을 수도 있는 서비스에 직접 연결하는 대신, Kafka 같은 큐에 이벤트를 보내서 처리하는게 좋다. 특정 시점에 에러가 발생했을 경우, 그 특정 시점의 에러 메세지를 기반으로 메세지에 추가적인 정보를 보완해서 큐에 다시 추가할 수 있다. 메세지를 처리하지 못할 때마다 에러를 추가하는 것이 중요한데, 처리 시도 횟수를 기억하고 있다가 특정 횟수를 초과하면 이 메세지를 진단 정보를 사용하기 위한 두 번째 큐로 옮기게끔 설계하는게 좋다. 이 두번째 큐는 일반적으로 dead letter 큐라고 하며, 이 처리 불가 큐는 메세지가 처음 시작된 큐에 의해 지정된다. 2. Time..
-
Prometheus OperatorSW개발/Prometheus 2020. 10. 13. 01:00
Operator Framework Prometheus Operator를 이야기하기 전에 먼저 Operator Framework가 뭔지 알아보자. 보통 k8s에서 configmap을 수정하면, workload(deployment, statefulset 등)를 재기동해야하는 문제가 있다. 단순히 하나의 설정만 바꾸었음에도 운영중인 환경의 파드를 재배포해야하는 문제가 발생하는데, 상황에 따라서 굉장히 위험한 작업이 될 수 있다. CoreOS에서는 이러한 부분을 해소하기 위해 Operator Framework라는 개념을 고안하였고, 이를 통해 설정변경에 민감하지 않은 k8s 환경을 구성할 수 있게하였다. 한 마디로 말하면, 운영중인 application의 설정을 변경하더라도 application을 지속사용 가능..
-
[Golang] RPC API개발언어/Go 2020. 10. 12. 01:00
간단 설명 RPC는 Remote Protocol Call의 약자로 원격 장비에 있는 함수나 메서드를 실행하는 방법이다. RPC에는 여러가지 다른 유형의 RPC 기술이 있으며, 인터페이스 기술(SOAP, Thrift, Protocol Buffer)이 필요하다. 일반적으로 인터페이스는 DSL(Domain Specific Language, 도메인 특화 언어)을 사용해 정의되며, 생성 프로그램은 이를 이용해 애플리케이션 클라이언트와 서버를 만든다. REST API가 HTTP를 전송 계층으로 사용해야 하는 것과는 달리 RPC는 이러한 제약이 없으며, HTTP뿐만 아니라 TCP, UDP 소켓도 사용가능하다. RPC 메시지 프레임워크 RPC는 RPC 메시지 프레임워크를 사용하여 기능한다. 1. Gob Go는 Gob ..
-
[Golang] go에서 RPC 다루기개발언어/Go 2020. 10. 11. 18:47
간단한 RPC 1. HelloWorldHandler라는 구조체와 구조체에서 사용하는 메서드 type HelloWorldHandler struct{} func (h *HelloWorldHandler) HelloWorld(args *contract.HelloWorldRequest, reply *contract.HelloWorldResponse) error { reply.Message = "Hello " + args.Name return nil } => 빈 구조체를 하나 만들고, 해당 구조체는 HelloWorld라는 메서드를 가지고 있다. 2. 서버 시작 func StartServer() { helloWorld := &HelloWorldHandler{} rpc.Register(helloWorld) // ① l..
-
[golang] JWT 활용하기카테고리 없음 2020. 10. 7. 22:28
JWT란? JWT는 JSON Web Token의 약자로, 특정 환경에 있는 사용자의 권한 요청이나 데이터를 안전하게 전달하는 표준이다. JWT에는 두 가지 주요 장점이 있는데, 하나는 여러 프레임워크에서 사용할 수 있다는 점이고, 또 다른 하나는 비대칭 암호화를 사용한다는 점이다. 즉, 토큰이 서명돼 있으므로 서명자의 공개 키만 있으면 수신자는 토큰이 실제로 신뢰할 수 있는 출처에서 왔는지 확인할 수 있으며, 이를 통해 인증 서버의 개인 키에 대한 불필요한 접근을 막을 수 있다. JWT의 형식 JWT 토큰은 URI에서 파라미터로 사용할 수 있도록 URL-Safe한('+','=','/' 등의 기호를 특정 문자로 대체하고, 패딩을 제거한 후 base64로 암호화시킴) Base64url 인코딩을 사용한다. 헤..
-
[Golang] net/http 패키지개발언어/Go 2020. 9. 30. 23:58
1. net/http 기본사용 net/http 패키지는 HTTP 클라이언트와 서버를 작성하는 데 필요한 모든 기능을 제공한다. package main import ( "fmt" "net/http" ) func main() { port := 8080 http.HandleFunc("/index", indexHandler) http.ListenAndServe(fmt.Sprintf(":%v", port),nil) } func indexHandler(resp http.ResponseWriter, req *http.Request) { fmt.Fprint(resp, "Index Page\n") } net/http 패키지를 사용할 때, 첫 번째로 하는 작업은 http 패키지에서 HandleFunc 메서드를 호출하는 것..
-
[golang] 마샬링(Marshaling)개발언어/Go 2020. 9. 26. 01:30
1. 일반적인 관점에서의 마샬링 참고) 위키백과에서의 Marshaling 정의 더보기 컴퓨터 과학에서 마셜링(marshalling, l을 하나만 사용하여 marshaling이라고도 표기)이란 한 객체의 메모리에서 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다. 또한 이는 데이터를 컴퓨터 프로그램의 서로 다른 부분 간에 혹은 한 프로그램에서 다른 프로그램으로 이동해야 할 때도 사용된다. 마셜링은 직렬화(serialization)와 유사하며 한 오브젝트, 여기서는 직렬화 된 오브젝트로 멀리 떨어진 오브젝트와 통신하기 위해 사용된다. 이는 복잡한 통신을 단순화 하기 위해, 기본 요소(primitives) 대신 통신을 위한 맞춤형 오브젝트를 사용한다. 마셜링의 반대 개념으로 언마셜링..