Go 시작하기 - 01

들어가며#

새로운 것에 대한 배움은 삶을 풍요롭게 합니다. 익숙함에서 벗어나면 데이터를 처리하는 또 다른 시각을 포함하여 많은 것을 얻을 수 있다고 생각합니다. 주관적인 배우고 싶은 언어 랭킹 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 에 저 데이터를 이쁘게 담아놓는 방법이 있을까요? 다음 번에는 이 방법에 대해 알아보겠습니다.