본문 바로가기

Golang8

속성 기반 테스트 in Golang (Property Based Testing) 대체적으로 개발할 때, 우리는 예제를 기반으로 테스트 하는 것을 선호합니다. 예제 기반 테스트는 앞선 설명과 같이 테스트 케이스를 예제를 통해 생성하는 방식으로, 특정 입력에 대해 기대되는 출력 값을 예제로 제공하고, 테스트 대상 코드의 출력 값이 기대되는 값과 일치하는지 여부를 검증합니다. 이 방식은 테스트 케이스를 생성하기 쉽고, 이해하기 쉽기 때문에 많이 사용되어 왔습니다. 아래와 같이 add라는 함수를 만들고 사례를 기반으로 테스트를 진행해보겠습니다. // 두 개의 정수를 받아서 두 수의 합을 반환하는 함수 func add(a, b int) int { return a + b } // test func TestAdd(t *testing.T) { tests := []struct { a, b, expe.. 2023. 3. 26.
Datadog APM with Golang 1 - 배경 이야기 원활한 서비스 운영을 위하여 트레이싱 툴은 선택이 아닌 필수라고 생각합니다. 그런 만큼 저희 회사 또한 트레이싱 툴을 사용하는데요. 바로 datadog이라는 SaaS 툴을 사용하고 있습니다. 이 중 어플리케이션 성능을 모니터링해주는 APM 기능을 정말 잘 사용하고 있습니다. 이 datadog APM을 Java환경에서 사용할 때는 고민이 적었습니다. 에이전트부터 트레이싱까지 아래와 같이 pre-build 된 jar 파일을 끼워 넣어서 해결할 수 있었기 때문입니다. java -javaagent:/path/to/dd-java-agent.jar \ -Ddd.logs.injection=true \ -jar path/to/your/app.jar 이와 유사한 환경을 기대하며 golang datadog 세팅을 시작한 .. 2023. 2. 25.
SQLBoiler boiler 객체에 update가 제대로 되지 않는 이슈 추적 문제 제기 insert 시, 해당 model의 boiler 객체에 업데이트 된 값이 들어오는 것을 확인 함. (id가 채워져 있는 것을 확인) 이를 보고 해당 객체의 fetch를 다시 해오는 것이라고 생각했음. 그런데, timestamp without timezone으로 인하여 db에 insert된 결과 값과 insert의 결과로 받은 값이 다른 현상이 발생. 본론 boiler 구현체 내부에서 default 값이 있는 컬럼들을 정의해둔다. ({model}ColumnsWithDefault) insert 연산 시, insert 요청을 받은 model을 확인하여 non zero value를 가진 column들을 찾는다. 이를 1 에서 확인한 column들과 비교하여 default 값이 있으나 zero valu.. 2023. 1. 11.
Gin / time 타입 parsing 오류 (parsing time "~~~" as "~~~": cannot parse "~~~" as "~~~") 평화롭게 Gin을 가지고 놀던 어느 날, 시간 Field를 Request로 받아서 작업해야 할 일이 생겨서 관련하여 공부해보았습니다. 대충 format 지정해주고 넘기면 알아서 찰떡같이 parsing 해주리라 생각했던 것과는 달리, 꽤나 골치가 아팠어서 블로그에 정리해봅니다. 위에 이야기를 한 것과 같이 시간 정보를 parsing 해주기 위한 format을 어떻게 지정해주는지 알아봤습니다. 그리고 금세 나오는 정보는 아래와 같은 코드였습니다. type Person struct { Birthday time.Time `json:"birthday" time_format:"2006-01-02 15:14:13"` } 아하! 이런 식으로 bind할 structure에 time_format을 지정해주면 되는구나! 그.. 2021. 9. 25.