본문 바로가기

Programming Language/Go4

[4] Go yaml - yaml 파일을 Go로 쉽게 읽기 프로그램의 외부 시스템이 변경하게 되면 이를 적용해야 하는데, 코드에 그대로 반영할 수는 없으니 외부 설정 파일을 생성해서 이를 읽어 시스템에 반영하게 됩니다. 예를 들면, DB 서버의 ip 주소나 포트 같은 것들을 매번 코드상에서 변경해주는건 이상하니 전역으로 config 변수를 설정해서 주입해주는 것입니다. 이러한 외부 설정 파일은 ini, yaml, json 형식으로 작성되는데 자주 사용되는 yaml 형식의 파일을 Go에서 읽어서 사용하는 예시를 이 글에서 소개하겠습니다. yaml 예시 database: Type: mysql User: Riverandeye Password: hello Host: 1.2.3.4:5 Name: todo TablePrefix: todo_ server: RunMode: d.. 2020. 10. 3.
[3] Go 웹 프레임워크 Gin Gin은 Golang으로 작성된 웹 프레임워크로, Node로 치면 Express 같은 미들웨어 지향 API를 제공합니다. Gin 이전에 martini라는 웹 프레임워크가 있었기 때문에 martini-like api 라고 하는데, 오픈소스인 httprouter 를 도입하여 그 성능을 높였다고 합니다. httprouter에 대한 세부 분석은 다음 기회에 다루겠습니다. 지원하는 핵심 기능들은 다음과 같습니다 - Radix tree 기반의 라우팅으로 메모리 소요가 적으며 reflextion이 필요 없어 API 성능이 예측 가능합니다. - 미들웨어를 지원하여 개별 HTTP Request에 수행되는 비즈니스 로직을 분리할 수 있습니다. - 요청에 대한 Panic 을 Recover하기 때문에 안정적인 서빙이 가능합니.. 2020. 10. 3.
[2] Go mod - Go의 패키지 관리 시스템 처음 무작정 개발에 달려들었을 때 가장 어려웠던 부분이 패키지 관리였습니다. 다른 언어처럼 임의의 폴더에서 실행파일 main.go 를 구성하고 프로젝트를 실행했는데 모듈이 import 되지 않아서 매우 답답했었습니다. 아니 분명 저기 상대경로로 표시해줬는데 안된다고? (매우 속터짐) 처음에는 go get 을 이용해서 막무가내로 글로벌로 패키지를 설치했고 import path에 항상 full path를 제공해야 하기 때문에 아 원격지에 구성된 모듈을 매번 업데이트해야 하겠구나 라고 생각해서 매번 커밋하고 push하고 go get -u 패키지로 업데이트하고.. 그런 미련한 짓을 반복했었습니다. 알고보니 GOPATH를 매 개발하는 프로젝트에서 환경변수로 설정을 해야 해당 프로젝트 내에서 모듈을 찾을 수 있었던.. 2020. 9. 25.
[1] Golang 개념 및 기초 해당 게시물은 이 책 및 공식 블로그를 참고하여 작성되었습니다. 개인 학습 목적으로 작성되어 제가 필요하고 되짚어야 할 부분만 기록했기 때문에 생략이 많습니다. 모든 것을 다 정리하지는 않고, 정말 기초가 되는 부분들만 작성하였습니다. The Go Project  Go Project는 소프트웨어의 복잡도를 극복하기 위해 설계된 언어이다. 소프트웨어의 복잡도는 배로 늘어나서, 문제를 해결하기 위해 시스템의 복잡도를 높이면 다른 영역에도 영향을 미치게 된다. 문제를 해결하고 설정을 더하는 동안 단순성을 간과할 수 있는데, 길게 보면 단순한 것 만큼 소프트웨어의 좋은 해결책이 없다. 소프트웨어가 단순해지려면 작업들이 프로젝트의 핵심 아이디어에 집중해야 하며, 프로젝트가 변모하는 방향성을 올바르게 파악해야 한.. 2020. 8. 20.