GOLANG

2021-08-13
요즘은 프론트엔드, 백엔드 등으로 개발이 분업화 되었고 또한 최근 많은 곳에서 마이크로서비스 아키텍처 Microservice Architecture 를 도입하면서 하나의 언어가 아닌 여러 언어로 개발하는 것이 추세인 듯하다. 여러 언어로 개발하다 보면 테스트 커버리지와 코드 코드 정적 분석 Static program analysis 결과를 각각 보면 매우 불편한데 통합하여 한곳에서 볼 수 있으면 편할 것 이다. SonarSouce 에서 만든 SonarQube 는 코드를 분석하여 중복, 테스트 커버리지, 코드 복잡도, 버그, 보안 취약성 등을 보여주는 도구이다. 특히...
2021-07-29
테스트 자동화 Test automation 의 일환으로 필자는 Golang으로 테스트 코드를 작성할 때 먼저 통합 테스트 Integration Test [1] 를 작성한다. 통합 테스트 코드를 작성하다 보면 주요 테스트 시나리오 외의 케이스를 촘촘하게 테스트 하기 어려운데 그 이유는 테스트 실행 비용(예. 웹 서버, 데이터베이스 등등)이 비싸고 비슷한 케이스를 작성하다 보면 코드 중복이 많이 발생하여 유지 보수가 어렵기 때문이다. 통합 테스트를 보완해 주는 것은 단위 테스트 Unit Test...
2021-07-19
소프트웨어에서 말하는 불변성 Immutability 이라는 것이 있다. 즉 변하지 않는다는 것 이다. 다른 말로는 읽기 전용이라고도 해석할 수 있다. 무엇이 변하지 않는다는 것일까? 객체 지향 프로그래밍으로 좁혀서 생각해 보면 한번 만들어진 객체가 변하지 않다는 것을 의미 한다. 불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스다.(중략)불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. - 이펙티브 자바 3판, 105 쪽...
2020-12-24
xORM 은 필자가 선호하는 ORM Object–relational mapping 프레임워크이다. 주요 특징 Features 은 아래와 같다. [caption id="attachment_28157" align="alignnone" width="600"] https://gobook.io/read/gitea.com/xorm/manual-en-US/[/caption] [caption id="attachment_28158" align="alignnone" width="600"] https://gobook.io/read/gitea.com/xorm/manual-en-US/[/caption] xORM은 대부분의 ORM에서 지원하는 테이블 간의 연관 관계 처리를 지원하지 않는다. 필요하면 직접 구현해야 한다. 언뜻 생각하면 불편할 것 같은데 연관 관계를 포기함으로써 기능들이 단순화되어 익히는데 시간이 짧게 걸리고 쓰기 쉽다는 장점이 있다. 이 글은 필자가 xORM을 사용하며 편리하다고 느낀 기능을 소개한다....
2020-08-11
최근 중국 전자 상거래 동향 중 하나는 모바일 거래 와 해외 직구 가 크게 성장하고 있다는 것이다. [1] 이런 상황에서 필자는 중국인들이 모바일을 통해 한국 상품을 구매할 수 있는 역직구몰을 만들고 있다. 모바일이라고 하면 안드로이드나 아이폰 앱을 떠올릴 수 있겠지만 앱 스토어 같은 곳에서 다운로드해 설치해야 하는 불편함과 서비스를 이용을 위한 회원 가입을 시키는 것은 쉬운 일이 아니다. 또한 앱을 개발하는 입장에서 안드로이드와 아이폰 코드를 함께 만들고 유지하는 것 역시 쉽지 않다. 위와 같은 문제를 해결하기 위해 선택한 것이...
2020-07-31
필자는 마이크로서비스 아키텍처 Microservice Architecture (이하 MSA) 기반으로 커머스 시스템을 만들고 있다. MSA에서 어려운 점 중 하나는 데이터 일관성을 유지하는 일 이다. 예를 들어 주문 프로세스(결제, 주문 원장 기록, 재고 차감 등등)는 모두 성공하거나 하나라도 실패한다면 이전 상태로 되돌아가야 한다. 모놀리틱 아키텍처 Monolithic Architecture 와 관계형 데이터베이스를 사용하는 전통적인 시스템은 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장한다. 반면 마이크로서비스마다 데이터베이스를 따로 사용하는 MSA는 데이터베이스 트랜잭션만으로 보장이 안된다. 왜냐하면 통합된 하나의 데이터베이스를 사용하지 않기 때문이다. 물론...
2020-06-08
들어가기 앞서 이 글을 쓰는데 도움을 주신 cp949 님, 김형준 님 그리고 장재휴 님에게 감사드립니다. 필자는 커머스 코드 자산화 개발일지 를 연재하고 있다. 구현 과정에서 Golang을 기반으로 마이크로서비스 아키텍처를 차용하였고 대부분의 마이크로서비스(회원, 장바구니, 결제, 주문)의 데이터 저장소로 MongoDB 를 사용했다. MongoDB를 사용한 이유는 크게 두 가지였다. 집합적 데이터 모델 객체/관계형 패러다임 불일치 예를 들면 주문 도메인에서 주문을 아래와 같이 객체 모델링 할 수 있다. 그리고 여러 가지 이유로...
2020-04-13
이번 글에서는 Golang enum 사용후기와 개선점에 대해서 이야기 하겠습니다. 정의 In computer programming , an enumerated type (also called enumeration , enum , or factor in the R programming language , and a categorical variable in statistics) is a data type consisting of a set of named values called elements , members , enumeral , or enumerators of the type. The enumerator names are usually identifiers that behave as constants in the language. 위키피디아 에서는 enum 자료형 을 식별성 을 갖는 상수로 정의하고 있습니다. Golang 에서 enum을 사용하기...
2020-04-03
지난 글 에서 오퍼를 장바구니에 담았다. 이제는 결제다. 대부분의 온라인 상점에서 결제는 전자 지급 결제 대행 서비스 Payment Gateway [1] (이하 결제 대행 서비스, PG)와 연동하는 것을 의미한다. [caption id="attachment_27047" align="alignnone" width="512"] 출처 : http://internationalpaymentgateway.net/international-payment-gateway-vietnam/[/caption] 온라인 상점이 결제를 위해 다양한 카드사나 은행과 직접 계약을 하고 각각의 시스템을 연동하는 것은 매우 비효율적인 작업이다. 결제 대행 서비스는 다양한 결제사와의 인터페이스 작업을 대신해 주고 일관된 API를 제공한다. 따라서 온라인 상점은 결제 대행 서비스하고만 계약하고 인터페이스 하면 되니 효율적이다. 아래는 웹 사이트에서 결제할 때 마주치는 결제 대행 서비스 예시 화면이다. [caption id="attachment_27048" align="alignnone" width="600"]...
2020-03-23
필자가 주로 사용하는  개발 언어는 자바입니다. 실제로 여러 프로젝트에서 성능 튜닝 관련 업무를 수행하였습니다. 최근 몆년 동안에는 일반적인 API 서버 개발 시에는 주로 Go 언어를 사용하고 있습니다. 이유는 간단함과 Docker 패키징하기 쉽고, 부족한 서버 예산으로 메모리, CPU 를 작게 사용하는 언어라고 봤기 때문입니다. 간단하고, 쉬운 Docker 패키징 등은 개발자의 경험으로 확인할 수 있지만 서버의 메모리나 CPU의 사용에 대해서는 "대충 이럴 것이다" 라는 감만 있었지 확실한 테스트를 수행해 보지는 않았습니다. 마침 저와 비슷한 경험을 가진 개발자가 자바와 Go 언어에 대해 서버의 CPU, Memory 사용과, 응답 시간 등 성능에 대한 테스트를 수행한 글이 있어 간단하게 소개해보고자 합니다....
더보기