GoLang로 WIKI 만들기 - 데이터베이스 연동

의 후속 문서다. 지난 번에 한 일은 아래와 같다. 애플리케이션 목표 설정 애플리케이션 구조 만들기 이번에 할 일은 아래와 같다. 1. 데이터베이스 연동 1. Wiki 문서를 생성하는 API를 만들어서 테스트한다. 1. 미들웨어를 작성한다. 원본은 에서 확인 할 수 있다.Docker로 실행했다.# docker run --name wiki -e MYS...

GoLang로 wiki 만들기 - 애플리케이션 구조 만들기

현재 운영중인 joinc 사이트는 go 언어로 개발했다. moniwiki(php)로 된걸 커스터마이징 해서 사용해왔는데, 4년 전쯤에 go 언어로 변경했다. 아래와 같은 특징을 가지고 있다.moniwiki로 작성했던 문서들을 그대로 이용했다. 이를 위해서 moniwiki의 wiki 문서형식을 처리하기 위한 코드를 개발했다. 문자열가지고 삽질하는 영역이다.플...

Golang 에서의 ORM (GORM)

ORM(Object-relation mapping)은 객체지향 프로그래밍 언어를 사용해서 서로 다른 시스템간에 데이터를 호환성있게 변환하기 위해서 사용하는 프로그래밍 기술이다. ORM을 사용 할 경우 실실적으로 프로그래밍 언어에서 사용 할 수 있는 가상 객체 데이터베이스를 생성한다. 이 가상 객체 데이터베이스는 클래스(혹은 스트럭처)와 맵핑된다. 결과적으로...

Simple Web Server

Go언어는 "net/http"라는 웹 애플리케이션 개발을 지원하는 패키지를 제공한다. 매우 사용하기 쉽고, 강력하기 때문에 "다른 프레임워크 사용 할 필요 없다. net/http 만 써도 충분하다"라는 평가를 받기도 한다. 풀 프레임워크 목적으로 사용하기에는 부족하지만 REST API 서버 개발 목적이라면 이걸로 충분하다.package mainimport ...

Go언어에서 Tag 사용

Go 언어에서 json을 다루다 보면 아래와 같은 구조체를 볼 수 있을 거다.type User struct { Name string `json Age int `json}GoLang의 구조체(struct)의 필드는 Tag를 이용해서 메타정보를 추가하는 것으로 의미를 확장할 수 있다. 위의 구조체에서 Name과 Age 필드는 각각 json 필드와 매핑되며, n...

Marshal structs the right way: Golang

많은 Golang 초보자들이 struct를 json으로 마샬링하면서 실수를 하곤한다. 이 문서는 이 문제를 어떻게 해결했는지를 담고 있다. golang에서 정의된 필드를 사용하지 않는 비어있는 struct를 json으로 마샬링하면, 각 필드가 기본 값을 가진체 마샬링 된다. 때때로 이는 개발자를 혼란스럽게 한다. 아래 코드를 보자. package main...

GoLang과 DynamoDB

Go 언어를 이용해서 Dynamodb에 CRUD하는 방법을 살펴볼 것이다. 우분투 리눅스 19.04 Go version 1.12 AWS Cloud 서울 리전 데이터베이스 DynamoDB는 AWS의 관리형 NoSQL 데이터베이스다. 서버가 필요 없는 서버리스(ServerLess) 환경을 제공한다. 개발자는 가용성, 확장, 성능 등에 대한 고민 없이 개발 할 ...

Go Project structure Best Practices

원문 Go 애플리케이션의 구조는 다소 논쟁적인 주제가 될 수 있다. Go 애플리케이션에 대한 구조는 에 잘 정의되어 있다. 어떤 개발자는 참고하는 정도로 이용하지만 어떤 개발자는 반드시 이 구조를 따라야 한다고 주장하기도 한다. 내 입장은 "소프트웨어에서의 규칙은 가능하면 지키려고 하되 얽매일 필요는 없다"이다. 위 문서는 좋은 내용을 담고 있지만 이 도입...

Golang error 처리

Go로 프로그램을 개발하다보면, 내장된 error타입을 이용해서 에러를 처리하게 된다. 이 타입은 에러의 상태를 알려주기 위해서 사용한다. os.Open 함수의 경우 파일 열기에 실패했다면 nil이 아닌 error 값을 반환한다. os.Open의 선언을 보자.func Open(name string) (File, error)파일 디스크립터인 File, err...

TDD 세미나 문서

코드는 매 빌드마다 테스트 코드를 중복해서 실행한다. 빌드를 성공하기 위해서는 테스트를 통과해야만 한다. 따라서 "테스트를 성공했다면" 이전의 품질목표는 달성했다는 것을 보장 할 수 있다. 기능이 많아질 수록 문제를 찾기가 점점 힘들어진다. 프러덕트화 될 수록 문제 해결이 힘들어진다 품질을 예측 할 수가 없다. 빈번한 빌드와 통합 빌드의 자동화 통...