Go언어를 쓸 때 DB 스키마와 코드를 연동하는 가장 쉬운 방법: golang-migrate + sqlc
·
툴, 프레임워크, 기술
지난 글에서는 golang-migrate를 이용해 DB 버전을 관리하는 방법에 대해 알아보았다. 이번 글에서는 지난 글에서 예고한 대로 golang-migrate에 sqlc를 더해 DB 스키마 - Go언어 코드간 연동과 DB 마이그레이션을 동시에 진행하는 방법에 대해 소개하고자 한다.사용 방법1. 설정사실 이부분을 제외하면 golang-migrate를 쓸 때와 크게 바뀌는 점이 없다. 우선 프로젝트의 루트에 sqlc 설정 파일인 sqlc.yaml파일을 다음과 같이 작성한다.version: "2"sql:- schema: {마이그레이션 파일 경로} queries: {쿼리 파일 경로} engine: "postgresql" ...sql의 schema 항목만 golang-migration에 쓰이는 마이그레이..
golang-migrate란?
·
툴, 프레임워크, 기술
DB 스키마를 관리하는 것은 매우 중요하지만 귀찮은 부분이 있다. 특히 변경 히스토리를 관리하는 부분과 변경 사항을 코드에 반영하는 부분은 작업량이 많을 뿐만 아니라 실수의 여지가 많다. 다행히도 golang에서는 이 문제를 golang-migrate를 통해 해결할 수 있다. 이번 글에서는 이 golang-migrate에 대해 소개하고자 한다.마이그레이션들어가기에 앞서서 여기서 말하는 마이그레이션, DB 마이그레이션에 대한 정의를 확실히 하고자 한다. DB 마이그레이션은 상황에 따라 여러가지 의미로 쓰인다. 주로는 DB 종류 변경 작업을 의미하고 그 외에 DB 스키마 버전 및 변경 이력 관리, 코드 내의 객체를 DB 테이블로 변환하는 작업 등으로 쓰인다. 이번 글에서의 마이그레이션은 DB 스키마 버전 관..
golang에서 사용 경험이 좋았던 패키지들
·
툴, 프레임워크, 기술
프로그래밍 언어를 익히는 과정에서 가장 큰 난관은 기본 문법을 익힌 후에 실제 프로그램을 만드려고 할 때 맞닥뜨린다. CLI 툴 이상의 프로그램을 만들기 위해서는 프레임워크가 필수적이다. 요즘은 프로그래밍 언어보다는 킬러-프레임워크(그 자체가 언어 선택의 기준이 되도록 하는 프레임워크)를 중심으로 배우는 것이 기본으로 변해가는 추세라 이러한 어려움을 겪는 사람이 적을 것이다. 하지만 golang은 JS 진영의 React나 express와 같은 킬러-프레임워크가 존재하지 않다보니 언어 중심으로 배우게 된다. 이렇게 프레임워크 없이 바로 CLI 너머의 프로그램을 만드려다 보니 어려움을 겪을 수 밖에 없다.이번 글에서는 이런 어려움에 처해 있는 입문자들이 실제 프로그램을 만드는 데에 도움을 주고자 대중적이면서..
Modbus란? - 심화편
·
툴, 프레임워크, 기술
지난 글에서는 Modbus란 무엇인가에 대해 간단히 알아봤다. 이번 글에서는 Modbus의 상세한 명세에 대해서 설명하고자 한다.통신 과정Modbus의 통신은 요청-응답 형식으로 이루어진다.요청 처리요청은 다음과 같은 과정을 거쳐 처리된다.정상통신이 원활하게 이루어지고 요청을 처리하는 데에 이상이 없으면 요청과 같은 function code와 응답 데이터를 반환한다.오류Modbus의 오류 상황은 크게 통신 오류와 요청 처리 오류로 분류할 수 있다. 통신 오류의 경우 통신 계층에서 처리하며, 이 경우 Modbus에서는 응답을 보내지 않으며 클라이언트에서는 타임아웃을 통해 통신에 오류가 발생했음을 감지할 수 있다.반면 요청 처리에 이상이 있다면 function code의 최상위 비트를 1로 바꾸고 예외 코드..
Modbus란? - 기본편
·
툴, 프레임워크, 기술
센서, 모터 등 컴퓨터가 아닌 기기의 상태를 보고 제어하기 위한 프로토콜에는 여러가지가 있다. 하지만 이중 가장 많이 쓰이는 프로토콜로는 Modbus를 꼽을 수 있다. 이번에는 이 사실상 표준(de facto standard) 프로토콜인 Modbus에 대해서 설명하고자 한다.정의Modbus는 OSI 7계층 중 응용 계층에서 사용되는 프로토콜로 여러 종류의 버스 혹은 네트워크에 있는 장치들 간 서버-클라이언트 통신을 할 때 쓰이는 프로토콜이다. 여기서 재밌는 점은 Modbus에서는 장치가 서버 역할이라는 점이다. 즉 장치를 제어하는 서버를 개발한다고 해도 Modbus에서는 서버가 클라이언트이고 연결된 장치가 서버이다. 펌웨어(혹은 PLC) 개발자와 소통할 때 헷갈리지 않도록 주의해야 한다.모델Modbus에..
[Go with TDD] TDD를 위한 go test 기초
·
툴, 프레임워크, 기술
[Go with TDD] TDD란?소프트웨어 공학, 개발 방법론 등에 관해 조금이라도 알고 있다면 TDD(Test-driven development, 테스트 주도 개발)라는 용어를 들어봤을 것이다. 잘 아는 사람도 많겠지만 모르는 사람들을 위해서 우선simplear.tistory.com이번 글에서는 Go언어에 TDD를 적용할 때 사용하는 테스트 프레임워크 go test에 대해 설명하겠다.go test란?go test는 Go언어에 자체적으로 내장된 테스트 프레임워크이다. 테스트 케이스를 형식에 맞춰서 작성하고 go test를 실행하면 자동적으로 테스트가 이루어진다.절차go test를 이용해 TDD를 적용하는 방법을 간단한 예시를 통해 설명하겠다.0. 테스트할 간단한 프로그램 만들기테스트하기 위해서는 당연히..