Domain-Driven Design  [draft]

동작하는 도메인 만들기 도메인(domain): 사용자가 사용하는 프로그램을 사용하는 영역 도메인 모델: 도메인 지식을 엄격하게 구성하고 선택적으로 추상화 하는 것 도메인 주도 설계에서 모델의 유용성 모델과 핵심 설계는 서로 영향을 주며 구체화 된다. 모델을 의미 있게 만들고 모델의 분석이 최종 산출물인 동작하는 프로그램에 적용 되게끔 보장하는 것이 다름 아닌 모델과 구현간의 긴밀한 연결이다. 이러한 모델과 구현의 연결은 유지보수와 계속되는 기능 개선에도 도움이 되는데 그 이유는 바로 모델을 이해한 바에 근거해 코드를 해석할 수 있기 때문이다....

July 6, 2020 · 5 min · 856 words · Hillfolk

Go 동시성 프로그래밍 하기  [draft]

Goroutine 고루틴은 함수를 동시에 실행시키는 기능이다. 다른 언어의 쓰레드보다 운영체제의 리소스를 적게 사용한다. 클로저 클로저를 고루틴으로 실행할 때 반복문에 의해 바뀌는 변수는 반드시 매개변수로 넘겨 준다. 멀티코어 활용 체널 사용 채널은 고루틴끼리 정보를 교환하고 실행의 흐름을 동기화하기 위해 사용한다. 채널 생성시 보내기 전용 이나 받기 전용으로 생성 가능한다. package main import "fmt" func sum(a int, b int, c chan int) { c <- a + b } func main() { c := make(chan int) go sum(1 ,2 ,c) n := <-c fmt....

May 3, 2019 · 2 min · 289 words · Hillfolk

Go Messaging System  [draft]

Nats Message Echo System Intro Nats Server는 IoT 메시징 및 마이크로 서비스 아키텍처를 위한 간단하고 고성능의 오픈소스 메시징 시스템 입니다. go로 작성되어 있으며 Python, Java, Ruby, Node.js 등으로 작성된 클라이언트가 있습니다. NATS Design Goals The core principles underlying NATS are performance, scalability, and ease-of-use. Based on these principles, NATS is designed around the following core features: Highly performant (fast) Always on and available (dial tone) Extremely lightweight (small footprint) Support for multiple qualities of service (including guaranteed “at-least-once” delivery with NATS Streaming) Support for various messaging models and use cases (flexible) Pub Code var urls = flag....

May 2, 2019 · 2 min · 248 words · Hillfolk

Go Cobra 사용하기  [draft]

Cobra는 강력한 Cli 라이브러리로서 Go 기반에서 구동된다. 해당 모듈은 docker, kubernetes, hugo 등에서 사용될 정도로 안정적인 라이브러리 이다. cobra github Install go get을 이용해서 package를 설치하고 코드에 import 해준다. go get -u github.com/spf13/cobra/cobra import "github.com/spf13/cobra" Cobra Generator Cobra Generator를 사용하면 손쉽게 Cobra를 적용할수 있다. cobra 팩키지가 설치된 경우 자동으로 cobra 프로젝트를 추가하거나 Command을 추가하는 명령을 사용할 수 있다. Generator는 $GOPATH 하위 리소스에서 사용가능하다. 초기화 init 명령으로 cobra에게 적합한 프로젝트 구성 및 자동으로 cobra 코드를 생성해 준다....

May 1, 2019 · 1 min · 121 words · Hillfolk

Go MongoDB 사용하기  [draft]

MongoDB MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 적 Cross-platform 데이터베이스이며, 뛰어난 확장성과 성능을 가지고 있다. Go용 MongoDB 드라이버 Go 에서 Mongodb 용 라이브러리는 몇개 정도 지원 되는것으로 보인다. 그중에 mongo-go-driver 공식 Go 드라이버를 기준으로 작성 하였습니다. Install go get go.mongodb.org/mongo-driver/mongo import & Create client import시 주소에 주의해야한다. 일부 문서에는 이전 github 주소로 되어 있는 경우가 있다. import "go.mongodb.org/mongo-driver/mongo" import "go.mongodb.org/mongo-driver/mongo/options" client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017")) MongoDB Connect MongoDB 연결시 일정시간이 지나면 연결 종료 신호를 보낼수 있도록 context....

May 1, 2019 · 2 min · 400 words · Hillfolk