본문 바로가기

분류 전체보기77

Golang과 함께하는 테스트 여정 - 단위 테스트 큰 규모의 개발에서 테스트는 상당히 중요합니다. 어딘가의 코드 한 부분을 변경했는데, 예상치 못한 다른 곳에서 깨지는 경험을 해보면 테스트가 얼마나 중요한지 왜 없어서는 안 되는지 느끼리라 믿어 의심치 않습니다. 그렇기에 많은 언어 환경에서 테스트를 잘 할 수 있도록 라이브러리를 많이 제공하는 편인데요. 그중 사내에서 Golang 신규 프로젝트를 세팅하고, 이로 인하여 편리하고 좋은 테스트 환경을 구축하기 위하여 고민했던 것들을 두 편으로 나눠서 정리해보려 합니다. 그중, 오늘은 단위 테스트와 환경 세팅에 대하여 이야기해보려 합니다. 단위 테스트 테스트 환경을 세팅을 시작하며 어떤 환경이 먼저 세팅되어야 할지 고민했고, 가장 먼저 e2e 회귀 테스트를 보장하기 위한 통합테스트 환경을 먼저 구축하려 했습니.. 2023. 5. 5.
gin은 어떻게 요청을 받는가 golang에서 웹 어플리케이션을 만들기 위하여 다양한 라이브러리를 사용합니다. 그중 우리 팀은 Gin을 가장 많이 사용하고 있는데요. 문득 Gin은 자세히 어떻게 handler로 요청을 넘겨주는지 궁금해졌습니다. golang은 매지컬하게 뭔가를 끼워 넣는 것이 불가능하니, 추적하는 것이 크게 어려울 것 같지도 않아서 한번 시도해 보았습니다. 들어가기 전에 TL;DR 글 자체가 장황해져서, 간단하게 읽고 가고 싶으신 분을 위한 요약입니다. 요약은 글을 정리하면서 새로 알게 된 부분만 간단하게 정리합니다. 1. Server 생성 시, engine을 핸들러로 사용하여 request를 파싱한 후 넘겨준다. 2. gin의 context는 요청마다 생성되는 것이 아닌, pool이 있다. 이 pool에는 engin.. 2023. 4. 23.
속성 기반 테스트 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.