본문 바로가기

Golang

(4)
[Golang] Mock, Mockery를 이용하여 단위 테스트 하기 전체 소스 코드는 Github 있습니다 :) 단위 테스트를 진행할 때 의존성이 있는 컴포넌트는 해당 의존성 객체를 Mock으로 사용할 수 있습니다. 이때 Golang에서 Mock을 생성하는 방법이 (1) 직접 생성 / (2) stretchr/testify 이용 / (3) golang/mock 이용 하는 방법 정도가 있습니다. 이번 글에서는 (2)번에 있는 testify의 mock 패키지와 mockery(mock 코드 자동 생성)를 이용하여 테스트 하는 방법에 대해 소개하겠습니다. 테스트용 코드 간단한 기능 테스트를 위해 아래와 같이 사용자 모델(User)를 정의하고 저장하는 기능을 구현합니다. import ( "context" "errors" ) // ErrKeyConflict insert or upda..
[Golang] Go, Echo, GORM으로 RealWorld Backend 구현하기(1) - 소개 전체 소스 코드는 Github에 있습니다 :) 1년 전부터 고언어로 전환하면서 나름대로 어떻게 하면 더 좋은? 고언어스러운? 코드로 구현할 수 있을지 많이 고민하고 있습니다.(지금도..) 다른 많은 프로젝트를 꾸준히 참조하고 있지만, 아무래도 직접 만들 때 가장 와닿아서 Golang 기반으로 예제 애플리케이션을 만들고자 했습니다. 그러던중 이전에 봤던 RealWorld라는 프로젝트가 생각났고, 해당 스펙을 고언어로 구현 후 포스팅을 하게 되었습니다(해당 프로젝트로 PR은 하지 않았습니다) RealWorld 프로젝트는 정의된 스펙이 있고 해당 스펙에 맞춰서 Frontend/Backend/Fullstack 별로 아래와 같이 구현 리스트가 있습니다. ) (https://codebase.show/projects..
[gorm] gorm.Model 사용 및 삭제 시 주의할 점 gorm.Model 구조체에 대하여 기본적인 사용 방법과 Unique 속성을 가진 테이블에 대하여 gorm의 Delete(Soft delete) 함수 실행 시 어떤 문제가 발생할 수 있고 해결할 수 있는지에 대해서 살펴보겠습니다 :) gorm.Model 사용하기 gorm에서는 CreatedAt, UpdatedAt 등의 Auditing을 하기 위해 아래와 같은 gorm.Model을 제공합니다. type Model struct { ID uint `gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt DeletedAt `gorm:"index"` } 위의 gorm.Model을 Embedded 구조체로 아래와 같이 이용할 수 있습니다. type..
[Gin] 바인딩 및 에러 처리하기 gin 은 golang의 인기있는(스타가 많은?) web framework 중 하나이며 http request의 header, uri, query, json body 등을 바인딩 하는 방법을 살펴보고 주의해야 할 점에 대해 알아보겠습니다. 목차 바인딩 할 태그 정의 Validation 추가 ShouldBindXXX 이용하기 전체 소스 코드 테스트 진행하기 에러 핸들링하기 마무리 1. 바인딩 할 태그 정의 우선 아래와 같이 태그를 이용하여 바인딩 할 필드를 정의할 수 있습니다. header : header:"header-key" uri : uri:"uri-path" query : form:"query-parameter-name" type HeaderParameter struct { XRequestID st..