본문 바로가기

Zaccoding

(20)
[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..
[MySQL] 실행계획-1 해당 내용은 Real MySQL의 내용을 정리 ERD 아래와 같은 테이블을 가지고 실행 계획들을 분석 아래와 같이 실행 계획(EXPLAIN)을 확인해보면 id, select_type, table, partitions, type, key, key_len, ref, rows, Extra 등이 포함된 것을 확인할 수 있다. EXPLAIN SELECT e.emp_no, e.first_name, s.from_date, s.salary FROM employees e, salaries s WHERE e.emp_no = s.emp_no LIMIT 10; (1) id 컬럼 실행 계획에서 가장 왼쪽에 표시되는 id 컬럼은 단위 SELECT 쿼리별로 부여되는 식별자 값 하나의 SELECT 문장 안에서 여러 개의 테이블을 조..
[JPA] Persistence Context(영속성 컨텍스트) 해당 내용은 자바 ORM 표준 JPA 프로그래밍의 내용을 정리 Persistence Context 영속성 컨텍스트(Persistence Context)는 엔티티를 영구 저장하는 환경이라는 뜻 엔티티 생명주기 Entity에는 아래와 같은 4가지의 상태가 존재한다. 1. 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 2. 영속(managed): 영속성 컨텍스트에 저장된 상태 3. 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제(removed): 삭제된 상태 비영속 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 em.persist(member)..
[JVM-02] JAVA Garbage Collection (GC) GC 개요 Garbage Collection은 시스템에 있는 객체들의 수명을 정확히 몰라도 런타임이 대신 객체를 추적하며 쓸모없는 객체를 제거하는 것이다. GC는 Pluggable Subsystem으로 고려되며 JVM Spec 에도 객체용 힙 공간은 자동 저장소 관리 시스템으로 회수한다. 어떤 일이 있어도 객체를 명시적으로 해제해서는 안된다 라고만 적혀있다. 즉 같은 자바 프로그램 이라도 코드 변경 없이 다양한 GC에서 돌려 볼 수 있다. 모든 GC 구현체는 아래와 같은 두가지 기본 원칙을 준수해야한다. 알고리즘은 반드시 모든 가비지를 수집해야 한다. 살아 있는 객체는 절대로 수집해선 안된다. 또한 Weak Generational Hypothesis는 JVM 메모리 관리의 이론적 근간을 형성하였다. 대부..
[JVM-01] JVM Architecture 해당 내용은 Naver D2 Hello에 포스팅 된 JVM Internal과 자바 최적화를 기반으로 내용을 정리하였습니다. Table of Contents JVM Architecture 1. Class Loader 1.1 Loading 1.2 Linking 1.3 Initialization 2. Runtime Data Area 3. Execution Engine JVM Architecture (출처: https://dzone.com/articles/jvm-architecture-explained) JVM 특징 스택 기반의 가상 머신: JVM은 스택 기반으로 동작한다. 심볼릭 레퍼런스: Primitive data type을 제외한 모든 타입(클래스, 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아..
Spring Cloud Service Discovery - Netflix Eureka (2) 전체 내용은 Github에 있습니다 :) Netflix Eureka Server HA 이전 포스팅에서 Eureka에 대한 개요를 살펴보았다. 이번엔 Eureka Server에서 HA 구성을 어떻게 하는지 살펴보자. Peer Awareness Eureka Cluster에서 Eureka Server는 peer 라고 표현하고 아래와 같은 행위를 Peer Awareness라고 부른다. 각각의 Eureka Server는 Eureka Client를 이용하여 Register와 Fetch Registry 작업이 이루어진다. 또한 Register, Renew 등 모든 Operation이 발생하면 다른 Peer에게 동일한 요청을 시도한다. 아래와 같이 PeerAwareInstanceRegistryImpl를 살펴보자. Re..
[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..