본문 바로가기

Golang8

Functional Option Pattern in Go Go 언어로 서버 프레임워크를 개발한다고 가정해봅시다. 서버는 다양한 옵션을 가질 수 있으며, 생성자를 통해 이를 설정할 수 있어야 합니다. 예를 들어 서버의 주소, 읽기 타임아웃, 로깅 등의 옵션을 설정할 수 있어야 하는데요. 예시를 들어보겠습니다. // 예시 위와 같이 이러한 옵션은 필수적이거나 선택적일 수 있습니다. 그렇다면 저 상황에서 다른 옵션이 추가된다면 어떨까요? 그에 맞게 생성자를 추가해야하고, 각 옵션이 optional하다면 추가해야하는 생성자가 기하급수적으로 늘어납니다. 물론 메서드 오버로딩을 지원하지 않는 특성 상, 네이밍도 상당히 어렵습니다. 오늘 이야기 해보려 하는 Functional Option Pattern은 이러한 문제를 해결하고자 등장한 패턴입니다. Functional Op.. 2023. 7. 2.
Golang과 함께하는 테스트 여정 - 통합 테스트 위 글에서 단위 테스트에 대하여 이야기 해보았습니다. 하지만, 테스트는 단위 테스트만으로 완벽하게 보장되지 않습니다. 예를 들면 어떠한 모듈을 모킹해둔 상태에서 그 모듈을 변경한다면 잘못되었지만 테스트는 잘 돌아가는 위양성 문제가 발생할 수 있으며, 회귀 테스트가 보장되지 않을 수 있습니다. 이를 보장하기 위해서는 다양한 모듈이 참여하는 통합 테스트가 필요한데요. Golang으로 통합 테스트를 작성하는 과정을 설명해보겠습니다. Pre-Condition 팀에서는 DI를 편하게 사용하기 위하여 fx라는 의존성 주입 프레임워크를 사용합니다. 여기서 만들어주는 것을 기반으로 글을 진행합니다. 생성의 책임을 위임한 서버 띄우기 최초에 테스트 환경을 어떻게 구축할지 고민을 많이 했는데요. 결론은 서버를 띄워서 ap.. 2023. 5. 21.
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.