IT 127

[Go/Golang] Map 자료형을 Struct로 변환하기(mapstructure)

Map Python에는 Dictionary라는 강력한 자료형이 있습니다. 굉장히 유연하고, 편리한 자료형입니다. 기본적으로 Python의 Dictionary는 다른 언어의 Map 자료형과 동일합니다. Python Dictionary의 특별한 점이라면, 하나의 Dictionary 변수 안에 각기 다른 자료형의 데이터가 보관될 수 있다는 점입니다. 따라서 Python에서 어떤 데이터를 Dictionary로 보관하는 일은 그리 어려운 일이 아닙니다. 특히, JSON 데이터를 별다른 추가 작업 없이 Dictionary에 대응할 수 있다는 점은 정말 엄청난 기능이라고 생각합니다. 그러나 Go 진영에선 상황이 다릅니다. Go에서 특정 데이터를 Dictionary로 보관하기 위해선, Key-Value가 어떤 자료형인..

IT/Go 2021.03.15

[OpenSource] GitHub CLI, GitHub의 공식 CLI 프로젝트

GitHub CLI gh는 GitHub을 커맨드 라인으로 만나볼 수 있는 CLI 도구입니다. pull requests나 issues 등의 다양한 GitHub 기능을 터미널에서 이용할 수 있게 도와줍니다. GitHub CLI, gh 는 오픈 소스 프로젝트로 개발되고 있으며, 개발 언어 중에서는 Go가 약 99.7%를 차지하고 있습니다. GitHub CLI는 Go 오픈소스 프로젝트 중 하나입니다. Installation macOS macOS 용 gh는 현재(2021.03.12) Intel 칩을 장착한 Mac에서만 네이티브로 이용이 가능합니다. $ brew install gh Windows 1. WinGet 이용 $ winget install gh 2. Chocolatey 이용 $ choco install g..

IT/OpenSource 2021.03.12

[Wiki/Git] gitignore를 자동으로 만들어보자

git으로 버전 관리를 하다보면, 커밋하고 싶지 않았던 파일이나 디렉터리가 포함되어 커밋되는 경우가 왕왕 있습니다. macOS의 .DS_Store나 Vscode의 __debug_bin 파일 등이 대표적입니다. 때론 문서를 작업하다 정상적으로 종료하지 않아 남은 .swp 파일도 이런 경우에 속하겠죠. 우리는 이렇게 원치 않는 파일을 관리하기 위해 .gitignore파일을 작성합니다. .gitignore .gitignore 파일은 단순히 파일 확장자나 파일의 이름, 디렉터리 이름으로 구성된 파일입니다. 특정 확장자의 파일을 모두 무시하고 싶다면 와일드카드 * 를 사용하여 나타내면 됩니다. 특정 디렉터리 하위에 위치한 파일을 무시하고 싶다면 dir/ 를 작성해주면 됩니다. 따라서 프로젝트에서 무시하고자 하는 ..

IT/IT WIKI 2021.03.11

[Go/Golang] Go의 HTTP & REST Client 라이브러리 - Resty

Go의 HTTP & REST Client 라이브러리 - Resty API Client 이전 포스팅에서 다뤘던 Echo는 Go의 Web Framework입니다. Echo로 구현한 프로그램은 API Server 등으로 동작할 수 있고, 큰 어려움 없이 Web Server로 사용할 수도 있습니다. 하지만 프로그램이 API Server가 아닌 API Client로 동작해야 한다면 어떨까요? API Client는 API Server에 Request를 보내는 주체로 Echo와는 정반대의 기능을 수행해야 합니다. 이런 기능을 Go에서 사용할 수 있도록 구현해놓은 패키지가 있습니다. 바로 Resty 입니다. Resty Resty는 Ruby의 rest-client에서 영감을 받아 시작된 Go의 HTTP & REST Cl..

IT/Go 2021.03.10

[Go/Golang] Echo 프레임워크에서 Swagger 사용하기

Echo 프레임워크에서 Swagger 사용하기 Echo Echo 프레임워크는 Golang 웹 프레임워크 프로젝트 중 하나입니다. Gin이라는 유명한 프레임워크도 있지만, 저는 Echo를 처음으로 접해서 지금까지 Echo로 사용해오고 있습니다. 아직 Gin을 이용해보진 못해서 둘을 자세히 비교할 수는 없겠지만, 표면적으로는 최근 들어, Echo가 Gin에 비해 더 많이 검색되고 있고, Gin 보다 짧은 Release Cycle을 가져가고 있다는 점이 눈에 띕니다. 참고 Swaggo 한편, Swagger는 API의 문서화를 자동으로 처리해주는 프로젝트입니다. 기존의 docs 등을 이용한 API 문서 관리 기술은 API가 변하게 되면 변한 API에 맞춰 문서화를 다시 진행해야 하는 번거로움이 있었다면, 이런 ..

IT/Go 2021.03.09

[Go/Golang] Golang의 문자열 읽기에 관한 고찰(Reader, Scanner, Scanln)

Golang의 문자열 읽기에 관한 고찰 bufio 패키지의 bufio.NewReader(os.Stdin) ReadLine() 메서드 ReadLine() 메서드는 os.Stdin으로부터 읽어 들인 데이터를 []Byte 형으로 리턴합니다. ReadLine 메서드를 사용할 땐 buffer의 크기 등 다양하게 고려해야 하는 케이스들이 많습니다. 이러한 이유에서 bufio.go 파일을 확인해보면 다음과 같은 내용이 있습니다. ReadLine is a low-level line-reading primitive. Most callers should use ReadBytes('\n') or ReadString('\n') instead or use a Scanner. ReadLine 메서드는..

IT/Go 2021.03.08

[Istio] Istio는 무엇일까(개론)

[Istio] Istio는 무엇일까(개론) Kubernetes Korea Group에서 진행하고 있는 Istio 스터디 첫 날 내용을 정리해봅니다. 현업에 투입된지 얼마 되지 않았다보니 Kubernetes 외적으로 다양한 이야기가 나왔지만 모두 이해하긴 어려웠습니다. 앞으로도 꾸준한 스터디와 자기계발이 필요하겠다는 걸 절실히 느낄 수 있는 시간이었습니다. Microservice Architecture (MSA) Istio를 이야기하기 전에, MSA를 먼저 정리해보겠습니다. MSA는 작은 Service 단위로 큰 프로젝트를 잘게 나누어 구성하는 구조를 의미합니다. 여기에서 말하는 Service는 기능의 단위라고 생각하면 됩니다. 하나의 Service는 하나의 기능만을 수행하도록 역할을 세밀하게 분리하고 구..

IT/Istio 2021.03.05

[Go/Golang] Echo 프레임워크에서 CORS 관련 설정하기

Go Echo 프레임워크에서 CORS 관련 설정하기 웹 개발을 하다보면 종종 CORS (Cross-Origin Resource Sharing) 을 마주치곤 합니다. CORS 정책을 위반하였다는 에러를 마주치면 당혹스럽긴 합니다. 단순한 작업일 뿐인데도 정상적으로 수행되지 않는 코드를 보면 야속하기까지도 합니다. 다만 오늘은 CORS에 관한 내용을 다루려는 것은 아닙니다. 오늘은 Echo 프레임워크를 이용할 때, CORS 관련 설정은 어떻게 수행하면 되는지 정리해보도록 하겠습니다. 모든 원격지, 모든 메서드 허용 Echo 프레임워크는 기본적으로 모든 원격지로부터 오는 모든 메서드를 허용합니다. 이 때는 다음과 같이 명시적으로 써줘도 괜찮습니다. 소스 코드 1 func main() { e := echo.Ne..

IT/Go 2021.03.04

[Go/Golang] echo 프레임워크를 이용해 Parameter 받는 방법(Query Param, Path Val)

echo 프레임워크를 이용해 Parameter 받는 방법(Query Param, Path Val) URI를 이용해서 인자를 전달하는 방법은 여러 가지가 있습니다. 가장 대중적으로 사용하는 Query Parameter와 Path Variable에 대해 정리해보겠습니다. Query Parameter 입력 http://localhost:8080/users/?name=wookii&age=27위와 같이 Query Parameter의 형태로 전달받은 데이터는 echo.Context.QueryParam() 메서드나 echo.Context.QueryParams() 메서드로 처리할 수 있습니다. 소스 코드 1 type users struct { name string age int } func queryParamHandl..

IT/Go 2021.03.03

[Go/Golang] JSON 데이터 형식에 맞춰 Struct를 자동으로 생성해주는 사이트

[Go/Golang] JSON 데이터 형식에 맞춰 Struct를 자동으로 생성해주는 사이트 API 서버 개발 API 서버 개발을 하다보면, JSON 데이터를 주고 받을 일이 참 많습니다. Python에서는 딕셔너리 자료로 거의 대부분의 작업이 가능했지만, Go는 그렇지 않습니다. json.Unmarshal() Go에서 JSON 데이터를 받아 어떤 의미 있는(논리적인) 데이터 형식으로 변환하기 위해선 json.Unmarshal() 을 사용합니다. 다만 이렇게 json.Unmarshal() 메서드를 사용하려면 우리가 주고받는 JSON 데이터가 어떻게 생겼는지 Go가 알고 있어야 합니다. 우리는 이를 위해 Go에 JSON 데이터 형식과 일치하는 Struct를 생성해둘 수 있습니다. JSON-TO-GO 하지만 ..

IT/Go 2021.03.02