GO

2019-06-10
* 시작하기 앞서 이 글은 김형준 님의 경험을 필자가 전해 듣고 상대적으로 시간이 있는 필자가 단순 정리한 것임을 밝힙니다. 글감뿐만 아니라 글을 쓰는 마지막까지 검토해 주신 김형준 님에게 감사드립니다. 애플리케이션에서 데이터베이스를 다룰 때 시스템 자원이 많이 소비되는 부분 중 하나는 데이터베이스 커넥션을 생성하는 것이다. 한 번 생성한 데이터베이스 커넥션을 버리지 않고 재사용 하여 성능을 향상시킬 수 있는데 이때 사용하는 것이 데이터베이스 커넥션 풀(이하 커넥션 풀)이다. sql/database 패키지는 기본적으로 커넥션 풀을 지원한다. 이 글은 sql/database 패키지 커넥션 풀 사용법과 한 걸음 더 나아가 커넥션 풀 내의 커넥션이 끊어지는 경우 어떻게 처리할 수 있는지 소개한다....
2019-05-31
SQLite 데이터베이스는 파일뿐만 아니라 메모리 모드도 지원한다. 그래서 필자는 데이터베이스 테스트 픽스처 로서 주로 SQLite 메모리 데이터베이스를 사용한다. 데이터베이스 드라이버는 프로그래밍 언어에서 데이터베이스를 다룰 때 필요하다. 필자의 경우 go-sqlite3 드라이버 사용했다. 문제는 데이터베이스 접속 URL에 따라 상이하게 동작한다는 것 이다. [caption id="attachment_22202" align="alignnone" width="600"] https://github.com/mattn/go-sqlite3[/caption] 이 글은 엄밀히 말하면...
2019-05-28
필자는 주로 자바로 개발해 왔는데 최근 Golang으로 개발하면서 데이터베이스를 다룰 일이 생겼다. Golang에서는 자바의 JDBC 와 같은 database/sql 패키지 를 제공한다. 이 글은 Golang 초심자로서 필자가 database/sql 패키지를 사용하면서 겪었던 삽질기 중 1편으로 매개변수 표시자 Parameter Placeholder 에 대한 글이다. 매개변수 표시자 SQLite 메모리 데이터베이스 커넥션 풀 Unknown column? 아래는 database/sql 패키지를 사용하여 데이터베이스 parent 테이블에서 id가 '1'인 열의 name 컬럼을 조회하는 코드이다. 데이터베이스로는...
2018-05-23
이번 글은 Popit 서비스 개편을 어떻게 했는지에 대한 시리즈 글 로 두번째 글입니다. 1편: 시스템 구성 및 WordPress 테이블 구성 소개 2편: Go로 만든WordPress 읽기 전용 API 서버 구축 소개 3편: React 서버 사이드 렌더링 Popit 서비스 개편 작업을 하면서 개발한 내용 중 WordPress 데이터를 제공해주는 API 서버 개발 관련 글입니다. Popit API 서버는 Go 언어로 개발되어 있습니다. 이번 글에서는 Go와 Go의 웹 프레임워크 중의 하나인 echo , 그리고 ORM 라이브러리 xorm 을 어떻게 사용했는지에 대해 살펴보겠습니다. 이글에서 설명하는 모든 코드는 다음 gitlab 레포지토리에 있으며 실제 Popit 서비스에 운영되고 있는 코드입니다....
2018-05-23
Popit 서비스의 UI가 확 달라졌습니다. 기존의 워드프레스 틀에서 벗어나 아주 자유로운 구성으로 서비스를 개편하였습니다. 물론 전문 디자이너의 지원을 받지 못해 아쉬운 부분이 있지만, 앞으로는 쉽게 화면을 변경할 수 있는 기반을 구축하였다는데 의미가 있다고 할 수 있습니다. 앞으로 몇회에 걸쳐 Popit 서비스 개편하면서 작업한 내용에 대해 공유할 예정입니다. 이번 글에서는 왜 개편 작업을 하게 되었는지와 시스템의 구성 및WordPress의 데이터 모델에 대해 간단하게 살펴보겠습니다....
2018-02-23
이글은 지난 글 " 자바 개발자가 Go 잠깐 사용해 봤습니다(1) " 이은 두번째 글입니다. 에러 처리(try...catch) Go 언어를 처음 접하면서 가장 어려웠던 부분이 에러에 대한 처리 부분입니다. Go 언어는 기본적으로 try.. catch 같은 절을 지원하지 않습니다. 대신 앞에서 살펴본 함수에서 여러개의 결과 값을 반환할 수 있는 기능을 이용하여 에러를 처리합니다. 앞의 searchPost 함수를 호출하는 코드는 다음과 같이 에러 처리를 합니다. searchPost() 함수 내부에서는 DB 접속에러, SQL 에러 등이 발생하면 error를 반환하고 이를 호출하는 측에서는 위 예제 코드와 같이 error가 nil 이 아닌 경우 에러 처리를 합니다. Go 언어에서는 에러 처리가 아주 중요한데, 위 코드에서 에러 처리를 하지 않게 되면 nil posts 변수를 이용하여 연산을 수행하기 때문에 프로세스 자체가 종료되어 버립니다.  에러 처리를 하지 않는 코드가 하나라도 존재하고, 그 코드가 실행되면 Go로 만든...
2018-02-22
마이크로 서비스를 구성할 경우 각각의 서비스 특징에 따라 다른 프로그램언어 또는 플랫폼으로 서비스를 구성하는 경우가 있습니다. 필자가 있는 팀에서는 주로 Go 언어를 많이 사용하지만 Java, Python, Rails, C# 등으로 만들어진 서비스도 운영되고 있습니다. 이런 상황에서 개발자는 다양한 언어에 대한 이해를 하고 필요에 따라서는 서비스의 개발 또는 수정을 할 수 있어야 합니다. 필자의 경우 과거에는 주로 자바 언어를 이용하여 많이 개발하였습니다. 자바 언어를 사용했지만 Spring 등은 많이 사용해보지 않았습니다. 추가로 C, Ruby & Rails 등으로도 서비스를 개발, 운영한 경험이 있습니다. 이런 경험을 기반으로 최근 몇개월 동안은 Go 언어를 이용하여 서비스를 개발하고 있습니다. 이번 글에서는 저와 같이 자바 언어에 익숙한 개발자들이 Go 언어를 처음 접할 때...
2017-10-10
동료들의 부족한 설계 능력을 보고 있자니 할 수 없이 Go 코드 [1] 를 봐야 했다. 한편, 내 옆에 앉는 김형준 님은 회사의 거의 모든 코드를 리뷰하며 나에게 감상평을 한다. 종종 번거롭다는 생각이 들기도 하지만, 워낙 열심히 설명을 하시니 다른 일을 하다가도 잠시 집중력을 발휘하여 들어보려고 노력한다. 꼭, 뭔가 직접적인 도움을 주지 못하더라도 이런 경우 그저 들어주는 행위만으로도 상대방에게 상당한 기여를 할 수 있다고 믿기 때문이다. Go를 쓴다고 실력이 나아지는 것은 아니다...
2017-06-22
중국내 1위 쇼핑몰인 TMall API를 이용하여 매출 데이터를 정산하는 서비스를 만들고 있습니다. 이 API를 호출하기 위해 시간 범위를 입력하게 되는데 이때 이전 작업 시간 이후 부터 처리하기 위해 이전 처리 시간을 DB에 저장하고 이를 이용하여 다음번 호출하는 형태로 만들고 있습니다. 이 서비스 개발중에 밀리세컨드 처리와 관련하여 삽질한 내용을 공유합니다....
2017-06-06
Scaffolding은 시스템의 기본 골격을 만들어 주는 기능입니다. 개발에 프레임워크가 적극적으로 도입되면서부터 프로그램의 구조가 표준화 되어 이런 골격 만드는 것 더 쉬워지고 보편화 되었습니다. Scaffold를 가장 적극적으로 지원하고 사용하기를 권장하는 프레임워크가 Rails라고 할 수 있습니다. 이번글에서는 Go 언어의 프레임워크 중에 하나인 beego의 scaffold 기능을 사용해 본 간단한 소감에 대해 정리해 보았습니다....
더보기