Skip to main content

Go 시작하기 - 01

· 7 min read

새로운 것에 대한 배움은 삶을 풍요롭게 합니다. 익숙함에서 벗어나면 데이터를 처리하는 또 다른 시각을 포함하여 많은 것을 얻을 수 있다고 생각합니다. 주관적인 배우고 싶은 언어 랭킹 1위인 Golang 을 처음부터 차근차근 배워나가려고 합니다. 이 글은 누군가에게 Golang 에 대한 정보 전달을 목표로 하는 것이 아니라, 내가 언어를 배워나가는 과정을 담은 개발 학습 로깅입니다.

모든 과정에 대한 코드는 GitHub 에 공개되어있습니다.

간단하게 시작하기

개발 환경 구성

먼저 Go를 사용하려면 Go 를 설치해야합니다. 설치는 너무나 간단해서 여기에서는 따로 다루지 않겠습니다.

이제 어떤 에디터를 사용해서 코딩을 할지 결정해야하는데요. 저는 인텔리제이의 노예이기 때문에 인텔리제이를 사용하겠습니다. 기본적으로는 Go 를 지원하지 않는데, 플러그인만 설치하면 GoLand (JetBrain 의 Go 전용 IDE) 의 모든 기능을 사용할 수 있다고 하니 환호성을 지르며 어서 설치해줍니다.

Preferences 2021-08-15 17-13-09.png

설치가 되었으면, 빨리 프로젝트를 만들어보죠. 프로젝트를 만드는 순간부터 그 프로젝트의 역사는 시작됩니다. 그리고 그 역사는 commit 으로 기록되죠. 좌측에서 Go 를 선택하고 다음을 눌러 프로젝트 이름을 지정하고 Finish 를 누르면 프로젝트가 생성됩니다. Go 버전이 업데이트되면서 GOPATH 방식에 프로젝트는 잘 사용하지 않는 것으로 알고 있습니다.

New Project 2021-08-15 17-20-32.png

자 새로운 세상을 만날 준비가 되었다면 인사를 하며 시작해봅니다. main.go 파일을 만들고 main 함수를 생성한 뒤 아래와 같이 작성합니다.

package main

import "fmt"

func main() {
fmt.Print("Hello")
}
Hello, Go World!
Process finished with the exit code 0

개인적으로는 인사만 한 다섯번째 하는 것 같네요 😐

외부 리소스 가져오기

인사만 하고 끝내기는 아쉬우니 한 발자국만 더 가볼까요? 추후에 의미있는 앱을 만들려면 외부에서 데이터를 가지고 오는게 필수적입니다. 필요한 데이터가 있다면, 그 데이터를 제공해주는 서비스를 찾아보고 그 서비스가 API 를 지원하는지 확인해보세요. 대부분의 서비스들은 API 를 지원합니다.

API 문서 확인

여기서는 요즘 핫한 암호화폐의 현재 시세를 가지고 와보죠. 저는 업비트 거래소를 사용하겠습니다. 업비트 API 문서 에서 현재가 정보를 제공하는 엔드포인트를 확인합니다. 코딩하기 전에 정말로 데이터가 내려오는지 확인해볼까요?

curl --request GET \
--url https://api.upbit.com/v1/ticker\?markets\=KRW-BTC \
--header 'Accept: application/json'
[{"market":"KRW-BTC","trade_date":"20210815","trade_time":"075919","trade_date_kst":"20210815","trade_time_kst":"165919","trade_timestamp":1629014359000,"opening_price":54817000.00000000,"high_price":55166000.0,"low_price":53420000.0,"trade_price":53614000.0,"prev_closing_price":54812000.00000000,"change":"FALL","change_price":1198000.00000000,"change_rate":0.0218565278,"signed_change_price":-1198000.00000000,"signed_change_rate":-0.0218565278,"trade_volume":0.022,"acc_trade_price":213592738229.775190000,"acc_trade_price_24h":559827073056.69978000,"acc_trade_volume":3918.44716516,"acc_trade_volume_24h":10269.53880782,"highest_52_week_price":81994000.00000000,"highest_52_week_date":"2021-04-14","lowest_52_week_price":11860000.00000000,"lowest_52_week_date":"2020-09-07","timestamp":1629014359797}]

잘 가지고 오네요. 개발하기에 앞서 이런 과정은 중요합니다. 내가 코딩을 잘못해서 데이터를 못 가지고 온 건지, 아니면 서비스 자체적으로 문제가 있어서 못가지고 온 것인지 확인이 필요하죠. 서비스는 문제가 없으니 이제 제가 코딩만 잘하면 데이터를 가지고 오겠네요. 🤩

사용할 패키지 찾고 문서 확인하기

Go 에서는 HTTP 요청을 어떻게 해야 할까요? 고 패키지 를 모아놓은 사이트에 가서 http 를 검색해봅니다. JAVA로 치면 Maven Repository 같은 곳이겠네요. 예제가 친절하게 써있습니다. 이제 식상한 인사는 그만하고 암호화폐의 대장인 비트코인에 가격을 가지고 와볼께요.

package main

import (
"io/ioutil"
"net/http"
)

func main() {
resp, err := http.Get("https://api.upbit.com/v1/ticker?markets=KRW-BTC")
if err != nil {
panic(err)
}

defer resp.Body.Close()

data, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}

println(string(data))
}
[{"market":"KRW-BTC","trade_date":"20210815","trade_time":"084318","trade_date_kst":"20210815","trade_time_kst":"174318","trade_timestamp":1629016998000,"opening_price":54817000.00000000,"high_price":55166000.0,"low_price":53411000.0,"trade_price":53687000.0,"prev_closing_price":54812000.00000000,"change":"FALL","change_price":1125000.00000000,"change_rate":0.0205247026,"signed_change_price":-1125000.00000000,"signed_change_rate":-0.0205247026,"trade_volume":0.05957287,"acc_trade_price":239700491633.154070000,"acc_trade_price_24h":574757863109.85536000,"acc_trade_volume":4405.80968434,"acc_trade_volume_24h":10554.59700851,"highest_52_week_price":81994000.00000000,"highest_52_week_date":"2021-04-14","lowest_52_week_price":11860000.00000000,"lowest_52_week_date":"2020-09-07","timestamp":1629016998428}]

마치며

간단한 몇 줄에 코드로 원하는 데이터를 가지고 왔습니다. 이제 데이터를 가지고 오는 법을 알았으니 원하는 데이터를 여기저기서 가지고 와서 요리조리 뚝딱뚝딱하면 원하는 기능을 하는 앱을 만들 수 있겠어요. 그런데... 저 JSON 문자열로 된 놈을 어떻게 해야 할까요? Go 에 저 데이터를 이쁘게 담아놓는 방법이 있을까요? 다음 번에는 이 방법에 대해 알아보겠습니다.