개발언어/Go
-
[Golang] Mysql 연결하기개발언어/Go 2020. 10. 25. 20:00
1.DB 연결 Import "Github.com/go-sql-driver/mysql" // mysql 전용 라이브러리 import ... // 디비 커넥션 오픈 // 참고) func Open(driverName, dataSourceName string) (*DB, error) // 아래는 예시 db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/dbname?parseTime=true", os.Getenv("MYSQLUSERNAME"), os.Getenv("MYSQLPASSWORD"))) ... (sql 작업) defer db.Close() // db 커넥션을 다 사용하면 닫아준다. 2. 테이블 생성 및 조작 (DDL, DML) // DDL, DML은 db.Exec 명령..
-
[Golang] 마이크로서비스 공통패턴개발언어/Go 2020. 10. 14. 01:00
마이크로 서비스를 구성할 때에는 아래와 같은 패턴을 고려해서 설계하는 것이 좋다. 1. 이벤트처리 기존에 알려진 위치에 있을 수도 있고 없을 수도 있는 서비스에 직접 연결하는 대신, Kafka 같은 큐에 이벤트를 보내서 처리하는게 좋다. 특정 시점에 에러가 발생했을 경우, 그 특정 시점의 에러 메세지를 기반으로 메세지에 추가적인 정보를 보완해서 큐에 다시 추가할 수 있다. 메세지를 처리하지 못할 때마다 에러를 추가하는 것이 중요한데, 처리 시도 횟수를 기억하고 있다가 특정 횟수를 초과하면 이 메세지를 진단 정보를 사용하기 위한 두 번째 큐로 옮기게끔 설계하는게 좋다. 이 두번째 큐는 일반적으로 dead letter 큐라고 하며, 이 처리 불가 큐는 메세지가 처음 시작된 큐에 의해 지정된다. 2. Time..
-
[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] 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..