본문 바로가기

Go46

Go - mocking - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/mocking - 개요 mocking에 대해 알아보고 mocking를 사용할 때 장점에 대해 알아본다. - Countdown 프로그램 3부터 하나씩 줄어드는 숫자를 출력하는 프로그램을 만들어보자. 단 각 숫자를 출력하기전에 1초를 멈추고 나서 출력한다. 0에 도달할 때는 0대신 Go!를 출력한다. package main func main() { Countdown() } 사실 프로그램이 맞나 싶을 정도로 보잘 것 없는 요구사항이지만 언제나 작은 단계의 성공적인 소프트웨어를 구축한 후, 이를 점차 반복적인 테스트 접근법을 통해 구축해야 한다. 이렇게 하려면 요구사항을 가능한 잘게 쪼갠 후 동.. 2022. 1. 2.
Go - dependency injection - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/dependency-injection - 개요 Go의 표준 라이브러리의 인터페이스인 Writer를 이용하여 Dependency injection(이하 'DI')에 대해 알아본다. DI를 이용하면 test에 얼마나 많은 도움이 되는지 이해한다. - Dependency injection 한국의 국룰 프레임워크인 Spring을 써본적이 있다면 DI 라는말을 들어본적이 있을것이다. 용어도 멋있기 때문에 오해가 있는데 DI에 관한 약간의 오해를 줄이고자 한다. 우선 DI를 하기 위해 반드시 프레임워크가 필요한것은 아니다. 또한 코드나 디자인을 복잡하게 하지 않는다. test를 용이하게 하고, 함수.. 2021. 12. 31.
Go - maps - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/maps - 개요 array와 slice에서는 데이터를 순차적으로 저장한다. go에서는 key를 기반으로 데이터를 저장할 수 있는 map을 제공한다. dictionary를 만들어 보면서 map에 대해 알아보도록 하자. - map package main import "testing" func TestSearch(t *testing.T) { dictionary := map[string]string{"test": "this is just a test"} got := Search(dictionary, "test") want := "this is just a test" if got != want .. 2021. 12. 31.
Go - pointers & errors - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/pointers-and-errors - 개요 struct의 상태를 갱신하거나 크기가 큰 객체에 대해 값 복사를 하지 않고 참조하기 위한 pointer를 알아본다. 타 언어에서 null에 해당하는 개념인 nil을 알아본다. 또한 Error 처리를 간단하게 살펴본다. 이번에는 간단한 Bitcoin 입출금 시스템 구현 하면서 위에서 언급한 개념들을 살펴보자. - Pointer struct를 사용할 때 마치 Java의 setter처럼 상태를 관리하거나 상태를 변경하도록 메소드를 외부로 노출해야하는 경우가 있다. 이전 struct에서는 field에 직접 접근할 수 있었지만 이번에는 내부 상태를 외.. 2021. 12. 26.
Go - struct, method, interface 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/structs-methods-and-interfaces - 개요 Go에서 관련있는 데이터를 연관시켜 표현할 수 있는 struct에 대하여 알아본다. structd의 method와 interface를 통한 다형성을 알아본다. - struct example 사각형의 너비와 높이가 주어졌을 때 둘레를 구하는 코드를 작성해보자. func TestPerimeter(t *testing.T) { got := Perimeter(10.0, 10.0) want := 40.0 if got != want { t.Errorf("got %.2f want %.2f", got, want) } } Perimeter를 구현.. 2021. 12. 24.
Go - array, slice, test coverage 참조: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/arrays-and-slices - 개요 Go 에서 하나의 데이터 타입을 여러 개 저장할 수 있는 array 와 slice 에 대하여 알아본다. 또한 test coverage 와 array, slice 를 비교하는 reflect.DeepEqual 에 대해서도 알아본다. - Array & Slice Example array 의 수를 모두 더하면 얼마인지 구하는 기능을 구현해보자. 기능을 완성하고 나면 아래와 같이 array 를 인자로 받아서 단일값으로 반환하는 Sum 과 같은 함수를 호출할 것이다. test 값은 1,2,3,4,5 의 합이므로 기대값은 15이다. package main impo.. 2021. 12. 4.
Go - Iteration & Benchmark 참조: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/iteration - 개요 Go 에서는 반복을 수행할 때 for 문을 이용한다. Go 에는 while, do, until 문이 없으며 for 문만 사용가능하다. 또한 단순한 Test 뿐만 아니라 자체적으로(표준 library로) 성능을 측정하는 Benchmark 도 지원하는데 이를 알아본다. - Example Code 특정 문자를 5번 반복하는 코드를 작성해본다. 우선 테스트 코드를 작성하자. TDD 접근법의 첫단계에서는 기능을 구현 했다고 가정한 후, 실제 결과값과 기대값을 비교하는 테스트 코드를 먼저 작성한다. 성급하게 구현을 어떻게 할지 미리 생각하지 않는다. iteration pack.. 2021. 12. 4.
Go - Go with TDD 참조: https://quii.gitbook.io/learn-go-with-tests/ - 개요 Go 는 자체적으로 testing 모듈을 내포하고 있기 때문에 TDD 를 이용하여 배우기가 수월하다. 참조의 URL 에서는 TDD 를 이용하여 Go 언어의 문법과 유용한 기능들을 다루고 있다. Go 의 공식문서인 A Tour of Go (https://go.dev/tour/list) 를 보고 참조를 학습해도 되지만 다른 프로그래밍 언어에 대한 개념이 있다면 오히려 더 자세한 설명을 해주기 때문에 처음부터 봐도 괜찮다고 생각한다. Go 에 대한 기본적인 모듈, package 개념과 기본적인 실행은 할 수 있다고 가정한다. - TDD cycle 해당 Site 에서는 TDD 의 프로세스 주기인 RED, GREEN,.. 2021. 12. 4.
Go - Go 와 Gin 을 활용한 RESTful API 개발 참조: https://go.dev/doc/tutorial/web-service-gin - 개요 이번 튜토리얼에서는 Go와 Gin Web Framework(Gin) 을 활용하여 RESTful 웹 서비스 API 의 기본작성법을 알아보도록 한다. Gin 은 웹서비스를 포함한 웹 어플리케이션을 구축하는데 있어 연관된 많은 작업들을 간소화시킨다. 이번 튜토리얼에서는 Gin을 이용해서 요청을 route 하고, 요청 세부사항을 추출하고 응답을 위해 JSON 을 마샬링한다. - API endpoints 설계 빈티지 레코딩을 파는 상점에 접근하는 API 를 제공해야 한다고 가정해보자. 이를 위해 사용자가 앨범을 가져오거나 추가할 수 있는 endpoint 를 제공하도록 한다. API 를 개발할때에는 일반적으로 endpoi.. 2021. 11. 28.
Go - compile 과 install 참조: https://go.dev/doc/tutorial/compile-install - 개요 이번에는 go 의 새로운 명령어 2 가지를 배워보도록 한다. go run 명령어는 프로그램을 자주 변경할 때 프로그램을 compile 하고 실행 시키는데 유용한 단축 명령어(shortcut)지만 실행 가능한 binary 를 생성하지는 않는다. go build 명령어는 package 를 compile 하지만 결과물을 설치하지는 않는다. go install 은 package 를 compile 하고 설치한다. - build hello directory 에서 go build 명령어를 실행하여 코드를 compile 하고 실행가능한 파일을 생성한다. go build ls go.mod hello hello.go ./hell.. 2021. 11. 28.