| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- SFC
- channel
- graceful shutdown
- Vue
- App.vue
- websocket
- map
- URL
- toggle
- goroutines
- todo-list
- 행렬
- Refactoring
- cli
- Dictionary
- emit
- container
- Vue.js
- PROPS
- goroutine
- go
- TODO
- reactivity
- CDN
- localStorage
- golang
- method
- Matrix
- component
- Server
Archives
- Today
- Total
ksundev 님의 블로그
[URL Checker] hitURL 그리고 느린 URL Checker (순차적) 본문
urls := []string{
"https://www.airbnb.com/",
"https://www.google.com/",
"https://www.amazon.com/",
"https://www.reddit.com/",
"https://www.google.com/",
"https://soundcloud.com/",
"https://www.facebook.com/",
"https://www.instagram.com/",
}
위의 유명한 사이트들에 get 요청을 보내는 메서드를 만들어봅시다.
참고로 Go 표준 라이브러리 중 net/http를 사용할 것입니다.
package main
import (
"errors"
"fmt"
"net/http"
)
var errRequestFailed = errors.New("Request Failed")
func main() {
var results = make(map[string]string)
urls := []string{
"https://www.airbnb.com/",
"https://www.google.com/",
"https://www.amazon.com/",
"https://www.reddit.com/",
"https://www.google.com/",
"https://soundcloud.com/",
"https://www.facebook.com/",
"https://www.instagram.com/",
}
for _, url := range urls {
result := "OK"
err := hitURL(url)
if err != nil {
result = "FAILED"
}
results[url] = result
}
for url, result := range results {
fmt.Println(url, result)
}
}
func hitURL(url string) error {
fmt.Println("Checking", url)
resp, err := http.Get(url)
if err != nil || resp.StatusCode >= 400 {
return errRequestFailed
}
return nil
}
400번대 이상의 에러코드는 접속 실패를 뜻하므로 실패메세지를 돌려줍시다.

로그를 보면 알 수 있듯이 목록에서 하나씩 순차적으로(sequentially) 처리되는 것을 볼 수 있습니다.
만약 각 링크당 1초가 걸린다면 1초 X 링크 수 만큼의 시간이 소요될 것입니다.
이제 앞으로 우리가 할 것은 이를 동시에 처리하려고 합니다.
python에서는 불가능한 병렬 처리(parallelism)을 하려는 것인데,
동시에 처리할 수 있다면 모든 링크에 접근하는데 1초밖에 소요되지 않겠죠?
이것이 우리가 Go를 사용하는 이유입니다!
다음 포스트에서 병렬처리(parallelism)을 해보겠습니다.
'[개발] Go > 중급 프로젝트' 카테고리의 다른 글
| [WebSocket] 채팅방 데모버전 만들어보기 (backend) (2) | 2025.08.26 |
|---|---|
| [URL Checker][New] Go Routine을 장착한 빠른 URL Checker🔥 (1) | 2025.07.14 |
| Channels 2 - chan 타입 바꾸고 반복문 활용하기 (1) | 2025.07.14 |
| Channels (0) | 2025.06.27 |
| Goroutines (0) | 2025.06.27 |