분류 전체보기
-
[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) 대신 통신을 위한 맞춤형 오브젝트를 사용한다. 마셜링의 반대 개념으로 언마셜링..
-
[golang] 인터페이스(Interface)개발언어/Go 2020. 9. 24. 23:47
Go의 Interface는 흔히 알고있는 Java의 Interface 개념과는 많이 다르다. 보통 Java에서 Interface라고 하면 반드시 구현이 필요한 메서드 정도로 이해되는데, Go의 Interface는 메서드들의 집합체라고 정의될 수 있다. 아마 이렇게 글만 읽어서는 무슨말인지 모를테니... 간단하게 코드를 보면서 이해해보자. package main import "fmt" // 1. 인터페이스를 정의한다. type Figure interface { // interface에서 공통으로 묶을 메서드를 정의한다. Area() float32 } // 2. 구조체를 정의한다. type Square struct { Width float32 Height float32 } type Triangle struc..
-
7. Kafka 운영SW개발/Kafka 2020. 9. 21. 02:03
1. 필수 명령어 더보기 1.1 토픽 생성 $ kafka-topics.sh --zookeeper ${list} --replication-factor 1 --partitions 1 --topic test-topic --create 1.2 토픽 리스트 확인 $ kafka-topics.sh --zookeeper ${list} --list 1.3 토픽 상세보기 $ kafka-topics.sh --zookeeper ${list} --topic test-topic --describe 1.4 토픽 설정 변경 $ kafka-configs.sh --zookeeper ${list} --alter ${이하 alter에서 사용가능한 옵션들} 예시1) 보관주기(retention) 변경 $ kafka-configs.sh --zo..
-
6. ConsumerSW개발/Kafka 2020. 9. 20. 23:45
1. 주요기능 특정 파티션을 관리하고 있는 파티션 리더에게 메세지 가져오기 요청을 함 2. 종류 2.1 Old Consumer Consumer의 Offset 저장을 주키퍼에 함 2.2 New Consumer Consumer의 Offset 저장을 토픽에 함(0.9 버전 이후) 3. 주요 옵션 bootstrap.servers fetch.min.bytes - 한 번에 가져올 수 있는 최소 데이터 사이즈 group.id - consumer가 속한 consumer group 식별자 enable.auto.commit auto.offset.reset (3개 방식 존재) earliest - offset이 없는 경우 가장 초기의 offset으로 설정 latest - offset이 없는 경우 가장 마지막의 offset으로..