[go] Go 언어에서의 웹 크롤링과 API 호출의 성능 비교

이번 포스트에서는 Go 언어를 사용하여 웹 크롤링과 API 호출의 성능을 비교해보려고 합니다. Go 언어는 경량화되어 있으면서도 뛰어난 성능을 제공하는 언어로, 이러한 특징을 살려서 웹 크롤링과 API 호출의 성능 측정을 해보는 것이 중요합니다.

1. 웹 크롤링 성능

웹 크롤링은 인터넷 상의 웹 페이지를 탐색하여 데이터를 수집하는 작업입니다. Go 언어는 자체적으로 제공하는 “net/http” 패키지를 사용하여 웹 페이지를 다운로드하고 파싱하는 기능을 제공합니다.

package main

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

func main() {
	start := time.Now()
	
	resp, err := http.Get("https://www.example.com")
	if err != nil {
		panic(err)
	}
	
	defer resp.Body.Close()
	
	contents, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	
	fmt.Println("Downloaded", len(contents), "bytes")
	
	elapsed := time.Since(start)
	fmt.Println("Elapsed time:", elapsed)
}

위의 예제 코드는 “https://www.example.com”로 GET 요청을 보내고 응답을 받아온 뒤에 다운로드한 데이터의 크기를 출력하고 진행된 시간을 측정합니다. 이를 실행하면 웹 페이지를 다운로드하고 데이터 크기와 경과 시간을 확인할 수 있습니다.

2. API 호출 성능

API 호출은 웹 서비스와 데이터를 주고받기 위한 작업입니다. Go 언어는 “net/http” 패키지를 활용하여 API 호출을 간편하게 할 수 있습니다.

package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
	"encoding/json"
	"time"
)

type User struct {
	ID       int    `json:"id"`
	Username string `json:"username"`
	Email    string `json:"email"`
}

func main() {
	start := time.Now()

	resp, err := http.Get("https://jsonplaceholder.typicode.com/users/1")
	if err != nil {
		panic(err)
	}

	defer resp.Body.Close()

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

	var user User
	err = json.Unmarshal(body, &user)
	if err != nil {
		panic(err)
	}

	fmt.Println("User:", user)

	elapsed := time.Since(start)
	fmt.Println("Elapsed time:", elapsed)
}

위의 예제 코드는 “https://jsonplaceholder.typicode.com/users/1” API를 호출하여 반환된 JSON 데이터를 파싱하는 예제입니다. 호출한 API의 응답을 받아와서 JSON 디코딩 후에 User 구조체로 변환하고 결과를 출력합니다.

3. 성능 비교 결과

위의 두 예제 코드를 실행하여 웹 크롤링과 API 호출의 속도를 비교해보았습니다. 실행 결과는 다음과 같습니다.

웹 크롤링:

API 호출:

실행 결과를 보면, 비교적 작은 데이터를 다운로드하는 웹 크롤링도 비교적 높은 속도를 보여주지만, API 호출은 JSON 데이터를 파싱하는 작업도 수행하기 때문에 약간의 시간이 추가로 소요됩니다.

4. 결론

Go 언어는 경량화되어 있으면서도 뛰어난 성능을 제공하므로 웹 크롤링과 API 호출의 성능을 측정하는 데에 매우 적합합니다. 이를 통해 개발자는 Go 언어를 사용하여 효율적이고 빠른 웹 크롤링 및 API 호출을 구현할 수 있습니다.