연습 - 사용자 지정 처리기를 사용하여 앱 빌드
이 연습에서는 Go를 사용하여 서버리스 앱을 빌드하고 실행합니다.
앱 스캐폴드
먼저 앱을 스캐폴딩하고, Visual Studio Code에서 Azure Functions 확장을 사용합니다.
- 뷰>명령 팔레트를 선택합니다.
- Azure Functions: Create New Project를 입력합니다.
- 폴더를 선택합니다. 일반적으로 현재 폴더입니다.
- 언어 선택에서 사용자 지정 처리기를 선택합니다.
- 첫 번째 함수의 템플릿 선택에서 HttpTrigger를 선택합니다.
- 앱에 hello와 같은 이름을 지정합니다.
- 익명의 권한 부여 수준을 선택합니다. 필요한 경우 나중에 이름을 변경할 수 있습니다.
모양이 다음과 같은 프로젝트가 생깁니다.
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
앱 만들기
그 다음 일련의 단계에서 HTTP 트리거에 응답할 수 있는 앱을 만듭니다.
프로젝트 루트에서 server.go라는 파일을 만듭니다.
server.go에 다음 콘텐츠를 제공합니다.
package main import ( "fmt" "io/ioutil" "log" "net/http" "os" )
위의 코드는 HTTP 앱을 빌드하고 환경 변수를 조회할 때 필요한 모든 라이브러리를 가져옵니다.
import 문 뒤에 다음 코드를 추가합니다.
func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }
main()
함수가 자동으로 호출됩니다. 코드의 첫 번째 줄은FUNCTIONS_CUSTOM_HANDLER_PORT
환경 변수에서 읽어들이는 방식을 명시합니다.customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
그런 다음 이 함수는 포트가 존재 하는지 여부를 확인합니다. 존재하지 않으면 함수에 포트 8080이 할당됩니다.
if !exists { customHandlerPort = "8080" }
다음 코드는 HTTP 서버 인스턴스를 인스턴스화합니다.
mux := http.NewServeMux()
마지막으로 중요한 줄은 특정 포트에 대한 수신 대기를 시작하고 메서드
ListenAndServe()
를 사용하여 요청을 받을 준비가 되었음을 신호로 보냅니다.log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
나머지 코드를 추가해 보겠습니다. 먼저, 다음 줄을 찾아 주석 처리를 제거합니다.
// mux.HandleFunc("/api/hello", helloHandler)
import 문과
main()
함수 사이에 다음 코드를 추가합니다.func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := ioutil.ReadAll(r.Body) w.Write(body) } }
helloHandler()
함수는 콘텐츠 형식을application/json
로 설정합니다. ‘hello world’ 또는 게시된 본문(있는 경우)으로 응답합니다.
앱 실행
이제 코드 작성이 완료되었으나 이 시나리오가 작동하려면 일부 구성을 수행해야 합니다. Function 호스트에서 찾을 수 있도록 실행 파일의 위치를 지정해야 합니다. 그리고 경로를 구성하고, 이 앱에서 다른 유형의 빌드는 처리하지 않고 HTTP 트리거만 처리한다고 명시해야 합니다.
터미널의 프로젝트 루트에서
go build server.go
를 실행합니다.go build server.go
이 단계에서는 macOS 및 Linux는 server, Windows OS는 server.exe라는 실행 파일을 만듭니다.
host.json 파일을 열고
customHandler
안에서defaultExecutablePath
요소를 찾습니다. macOS 및 Linux에서는./server
를, Windows OS에서는.\server.exe
를 지정합니다.customHandler
요소 밑에enableForwardingHttpRequest
요소를 추가하고, 값true
를 부여합니다. 이제customHandler
요소가 다음과 같이 표시됩니다."customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
터미널의 프로젝트 루트에서
func start
를 실행합니다. 이렇게 하면 Function 앱이 시작됩니다.func start
출력이 끝나면 다음과 유사한 출력이 표시됩니다.
Functions: hello: [GET,POST] http://localhost:7071/api/hello
브라우저에서
http://localhost:7071/api/hello
으로 이동합니다. 출력 "hello world"가 표시되어야 합니다.
축하합니다! 이렇게 Go에서 서버리스 앱을 개발했습니다.