본문 바로가기
코딩 아카이브/Golang

TDD와 cleancode로 만들면서 배우면서 Golang backend -1

by SteadyForDeep 2022. 4. 10.
반응형

우선 이 글은 

https://miryang.gitbook.io/learn-go-with-tests/

 

Learn Go with Tests - learn-go-with-tests

프로그래밍 경험. if, 변수, 함수 등을 이해할 수 있는지

miryang.gitbook.io

위의 깃북을 참고하여 작성되었음을 알린다.

 

이전 글에서 `일단 동작하는` Go 서버를 만들어 봤으므로

이제는 조금 더 제대로 된 녀석을 만들어 보자.

 

우선은 Go를 잘 설치했다고 가정하고

Go작업을 위한 local repository 하나를 만들어 준다.

그리고 해당 위치를 GOPATH 외부에서 프로젝트 루트로 만들어 주기 위해

Modules를 초기화 해준다.

 

원래 Go를 실행하면 모든 패키지를 GOPATH에서 검색하는데

우리의 작업공간을 그때그때 GOPATH에 추가할 수 없으므로

Modules를 초기화하는 방법으로 내가 만든 패키지를 사용할 수 있다.

 

go mod init <name>

 

github 주소로 굳이 할 필요는 없지만 만약 원격 repo를 사용한다면

github 주소는 유일하기 때문인지 모듈 이름을 github 주소로 해주는 것을 많이 볼 수 있다.

이제 생성된 mod 파일을 수정해서 하위의 모든 패키지는 이 프로젝트에 포함되게 만들 수 있다.

 

 

디버거와 린트는 VSC로 일단 해결하고 넘어가보자.

 

맨 앞에서 설명한 교제는 TDD에 중점을 두고 작성되었다.

따라서 이번에는 TDD를 hello world 부터 적용하여 시작해보자.

TDD는 요약하자면

기능을 먼저 구현하는게 아니라 테스트를 먼저 구현하고

그 테스트를 통과할 수 있는 코드를 작성함으로

기능을 구현하는 과정을 말한다.

유튜브에 좋은 자료들이 많으니 참고.

 

TDD는 보통 3가지 단계로 진행하는데

테스트를 작성하고 에러가 발생하는 red 단계

작성된 테스트가 정상적으로 통과되는 green 단계

테스트의 통과가 유지되면서 readable한 코드로 바꿔가는 refactoring 단계

가 있다.

 

가장 핵심적인 요소는 바로 red를 먼저 띄우는 것이다.

거두절미하고 먼저 코드를 짜보면

 

이 코드를 먼저 짜는 것이 핵심이라 할 수 있다.

그러면 Hello 라는 기능이 어떤 수행이든 간에

우리는 어떤 출력을 내야하는지 정확하게 알고 시작하는 상황이 된다.

이런 방식은 너무 과한 엔지니어링을 줄여주고

두번째 프로젝트 딜레마에서 벗어날 수 있게 해준다.

 

testing을 위한 테스트 코드 작성에는 아래의 조건이 필요하다.

1. 테스트 파일 이름을 <원본>_test.go 로 지정할 것

2. 테스트 함수의 이름은 반드시 Test로 시작할 것

3. 테스트 함수의 argument는 오직 t *testing.T 만 받을 것

4. testing.T 를 사용하기 위해서 테스트 파일에서는 "testing"을 import 할 것

간단한 구조다.

 

테스트하고자 하는 코드를 작성하고

 

 

go test

를 통해서 해당 프로젝트의 테스트를 진행할 수 있다.

당연히 Hello 함수가 없으므로 테스트는 실패한다.

이런식으로 예상할 수 있는 에러를 계속해서 발생시킴으로

코드를 더 정밀하고 군더더기 없는 상태로 유지할 수 있다.

 

 

이제 이 상태에서는 원하는 함수는 존재 하지만

그 출력이 틀렸다는 에러를 확인할 수 있어야 한다.

테스트코드에서 에러메세지를 잘 짜둔 덕분에 어떤 문제가 발생한건지

한눈에 정확하게 알아 볼 수 있다.

 

출력을 고쳐주면 테스트를 통과하는 모습을 볼 수 있다.

반응형

댓글