웹앱
사용자 지정 처리기를 사용하려면 웹 애플리케이션을 작성해야 합니다. 애플리케이션을 작성하고 컴파일한 후에는 그 사용법을 알 수 있도록 Azure Functions 호스트를 구성해야 합니다. 이에 관한 자세한 내용은 나중에 살펴보겠습니다. 먼저, 웹 애플리케이션을 어떻게 빌드할까요?
Go에서 REST API 빌드
Go를 사용하여 REST API를 빌드하려면 다음 몇 가지 사항을 알아야 합니다.
라이브러리를 가져옵니다. 라이브러리
fmt
,log
및net/http
를 사용합니다. 이러한 라이브러리는 경로를 관리하고, 들어오는 요청을 처리하고, 로깅을 처리하는 데 도움이 됩니다. 다음 import 문을 사용합니다.import ( "fmt", "log", "net/http" )
라우팅을 설정합니다. REST API는 경로라고 하는 논리 분할로 구성됩니다. 경로는 앱의 특정 문제에 응답하는 주소입니다. 경로를 설정하려면
http
인스턴스에서HandleFunc()
메서드를 호출하고 경로를 정의하여 요청에 응답합니다.http.HandleFunc("/", handleRoute)
이 경우
handleRoute
함수를 만들어 경로"/"
에 들어오는 요청을 일치시켜야 합니다.요청을 관리합니다. 들어오는 요청을 관리하고, 라우터 또는 쿼리 매개 변수나 게시된 본문과 같은 항목을 읽어야 합니다. 그런 다음 응답을 생성해야 합니다. 요청을 처리하는 함수는 다음과 같을 수 있습니다.
func handleRequest(w: http:ResponseWriter, r: http.Request) { fmt.Fprintf(w, "My first REST API") }
이 코드는 호출하는 클라이언트로 "My first REST API" 텍스트를 다시 보냅니다. 메서드
Fprintf()
는 두 가지 인수, 즉 응답 스트림과 다시 보낼 문자열을 사용합니다.서버를 만듭니다. 요청을 수신 대기할 수 있으려면 서버를 시작해야 합니다. 요청을 보낼 수 있는 파트도 지정해야 합니다. 다음 코드로 서버를 만들 수 있습니다.
http.ListenAndServe(":3000", nil)
이제 서버가 작동하여 포트 3000에서 요청 수신을 대기할 수 있습니다.
Azure Functions 앱 만들기
Azure Functions 앱을 개발하기 전에 다음을 수행하는 것이 좋습니다.
Visual Studio Code를 설치합니다. 텍스트 편집기 또는 IDE를 사용하여 Azure Functions 앱을 작성할 수 있습니다. 이 모듈에서는 더 쉽게 작성할 수 있게 해주는 몇 가지 확장을 소개합니다.
Azure Functions용 Visual Studio Code 확장을 설치합니다. 이 확장을 사용하면 Functions 앱을 스캐폴드하고, 실행하고, 디버그하기가 수월합니다.
Azure Functions Core Tools를 설치합니다. 이 설치에는 특히 Functions 앱을 실행할 수 있는
func
실행 명령이 포함됩니다.
Visual Studio Code를 사용하여 Functions 앱 스캐폴드
필요한 모든 종속성을시스템에 설치한 후에는 애플리케이션을 스캐폴드합니다. 런타임에 관한 메시지가 표시되면 사용자 지정 처리기를 선택합니다.
이제 정확한 파일이 생성될 것입니다. 이 방식으로 프로젝트를 생성할 때는 첫 번째 함수의 트리거 형식을 선택해야 합니다. 사용자 지정 처리기는 일반적인 트리거 및 바인딩 모두에서 작동합니다.
프로젝트 생성을 완료한 후에는 앱에 다음 파일이 포함됩니다.
- host.json
- local.setting.json
- proxies.json
- function.json
function.json 파일은 이름이 첫 번째 함수에 지정한 이름과 동일한 디렉토리에 있습니다. 이 파일을 사용하여 함수를 구성합니다.
프로젝트 구성
앱이 HTTP 기본 형식으로 작업하려면 다음 몇 가지를 구성해야 합니다.
사용자 지정 처리기 포트를 수신 대기합니다. 앱에서 특정 포트를 수신 대기해야 합니다. 변수
FUNCTIONS_CUSTOMHANDLER_PORT
에 필요한 값이 포함되어 있습니다. 다음 코드를 사용하여 포트 값을 조회할 수 있습니다.customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
기본 실행 파일 경로를 구성합니다. 실행 파일을 빌드하는 중이므로 Functions 앱 프로젝트에 그 위치를 알려주어야 합니다.
프로젝트 루트에서 function.json 파일을 찾습니다.
customHandler
섹션에서defaultExecutablePath
를 지정합니다. 가능한 형태 예시는 다음과 같습니다."customHandler": { "defaultExecutablePath": "mygoapp.exe" }
요청 전달을 사용하도록 설정합니다. HTTP 트리거를 사용하는 함수를 처리할 때는 유형이 다른 트리거(예: 큐 트리거)를 처리할 때와 약간 다르게 앱을 구성해야 합니다.
enableForwardingHttpRequest
라는 속성을 사용하도록 설정합니다. 이 속성을 설정하면 다음과 같이 요청을 처리하는 방식이 달라집니다.원래 요청의 복사본. HTTP 요청에 사용자 지정 처리기 요청 페이로드가 포함되지 않습니다. 대신 Functions 호스트에서 원래 HTTP 요청의 복사본을 사용하여 처리기를 호출합니다.
원래 요청과 동일한 경로. Functions 호스트가 원래 요청과 동일한 경로로 처리기를 호출합니다.
경로 및 경로 처리기를 정의할 때 라우팅을 설정하는 방식을 구체적으로 지정해야 합니다. 프로젝트 개요가 다음과 같다고 가정하겠습니다.
hello/ function.json
개요의 파일이 기본적으로 경로
/api/hello
에 매핑됩니다. 경로를 설정하는 코드에서 전체 경로를 지정해야 합니다.mux.HandleFunc("/api/hello", helloHandler)
이 설정을 사용하지 않도록 설정한 경우 다른 유형의 트리거와 바인딩에 대해 라우터 코드를
"/hello"
로 지정하는 것으로 충분할 것입니다.처리기 응답의 복사본. Functions 호스트는 처리기의 HTTP 응답 복사본을 원래 요청에 대한 응답으로 반환합니다.
앞 예제에서 실행 파일은 mygoapp.exe
입니다. 이 예제에서는 mygoapp.go
라는 파일에서 실행 파일을 만들지만 원하는 Go 파일 이름을 원하는 대로 지정할 수 있다고 가정합니다. Linux 또는 macOS에서 실행 파일에 확장명이 없습니다.
앱을 빌드합니다.
이 경우에 웹 앱을 빌드하는 것은 Go를 사용하여 웹 앱을 빌드하는 것과 크게 다르지 않습니다. 앞 섹션에 설명한 구성을 완료했으면 준비가 되어 있는 것입니다.
이제 다음 단계를 수행해야 합니다.
- 포트를 읽습니다.
- HTTP 서버 인스턴스를 인스턴스화합니다.
- 경로 및 경로 처리기를 정의합니다.
- 포트에서 수신 대기를 시작합니다.
customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
if !exists {
customHandlerPort = "8080"
} // 1)
mux := http.NewServeMux() // 2)
mux.HandleFunc("/order", orderHandler) // 3)
fmt.Println("Go server Listening on: ", customHandlerPort)
log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) // 4)