[go] 웹 페이지 예외 처리

이 블로그 포스트에서는 Go 언어를 사용하여 웹 페이지에서 예외를 처리하는 방법에 대해 알아보겠습니다.

1. HTTP 상태 코드 활용

웹 페이지에서 예외가 발생했을 때, 올바른 HTTP 상태 코드를 반환하는 것이 중요합니다. Go 언어에서는 net/http 패키지를 사용하여 이를 구현할 수 있습니다.

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 예외 상황
		http.Error(w, "Internal Server Error", http.StatusInternalServerError)
	})

	http.ListenAndServe(":8080", nil)
}

위 예제에서는 / 경로에 대한 요청시 500 상태 코드를 반환하는 예외 처리를 구현하였습니다.

2. 에러 핸들링

웹 페이지에서 예외가 발생했을 때, 로깅 및 사용자에게 적절한 메시지를 제공하는 것이 중요합니다. Go 언어에서는 log 패키지를 활용하여 에러를 기록하고, 사용자에게 메시지를 전달할 수 있습니다.

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 예외 상황
		err := fmt.Errorf("Something went wrong")
		log.Println(err)
		http.Error(w, "Internal Server Error", http.StatusInternalServerError)
	})

	http.ListenAndServe(":8080", nil)
}

위 예제에서는 예외 상황 발생시 에러를 기록하고, 사용자에게 “Internal Server Error” 메시지를 전달하는 예외 처리를 구현하였습니다.

3. 재시도 로직 구현

일시적으로 예외가 발생할 수 있는 상황에 대비하여, 재시도 로직을 구현하는 것이 바람직합니다. Go 언어에서는 time 패키지를 사용하여 재시도 로직을 구현할 수 있습니다.

package main

import (
	"fmt"
	"log"
	"net/http"
	"time"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		attempts := 3
		for i := 0; i < attempts; i++ {
			// 예외 상황
			_, err := http.Get("http://example.com")
			if err != nil {
				log.Println(err)
				time.Sleep(1 * time.Second) // 1초 대기 후 다시 시도
				continue
			}

			// 예외가 발생하지 않은 경우
			fmt.Fprint(w, "Success")
			return
		}

		http.Error(w, "Service Unavailable", http.StatusServiceUnavailable)
	})

	http.ListenAndServe(":8080", nil)
}

위 예제에서는 / 경로에 대한 요청시 3회의 재시도 후 503 상태 코드를 반환하는 예외 처리를 구현하였습니다.

이상으로 Go 언어를 사용하여 웹 페이지에서 예외를 처리하는 방법에 대해 알아보았습니다. 올바른 HTTP 상태 코드 반환, 에러 핸들링, 재시도 로직 구현을 통해 안정적인 웹 애플리케이션 개발에 도움이 될 것입니다.

관련 자료: