-
[Go] Go로 초간단 웹서버 만들어보기📖 개발 공부/go 2023. 8. 19. 14:31
나는 Go 언어를 처음 접한다. 요번에 사이드 프로젝트할 때 새로운 언어를 도전해보고 싶어서 핫한 Go 언어로 해보려고 한다. Go 언어의 특성, 문법, 라이브러리를 차근차근 살펴보면서 사이드 프로젝트를 만들어볼 계획이다! 많관부~
Go의 첫번째 글로, 단 몇 줄로 Go 간단 웹서버를 만들어보는 실습을 해보자!
컴파일러는 패키지 이름이 main 인 것부터 찾아낸다. main 패키지 안에서 main() 함수가 go 프로그램의 시작이 된다.
간단 웹서버를 본격적으로 만들어보기 전에, “hello world!”를 출력하는 간단한 프로그램을 짜보자.
// hello.go package main import ( "fmt" ) func main() { fmt.Println("hello world!") }
여기서 잠깐, fmt 라이브러리를 잠시 살펴보자 👀
fmt: formatting을 위한 패키지이다. 기본적인 출력과 입력 포맷 관련한 기능을 제공한다.fmt.Println("Hello World!")
(function이 대문자로 되어있다. 만약 function 을 export 해주고 싶다면 function을 대문자로 시작해주면 된다. 타언어의 private/public을 생각하면 이해하기 쉽다.)
go build hello.go # 빌드 후 바이너리 생성 ./hello go run hello.go # 한번에 빌드 + 실행하는 명령어
요렇게 hello world!가 출력되는 걸 볼 수 있다.
이제 간단 웹서버를 구축해보자!
// server.go package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/hello", handleHello) // handleHello 함수가 해당 경로를 처리하도록 지정한다. // :8080 : 8080 포트에서 외부에서 들어오는 HTTP 요청을 수신한다. // nil: 외부에서 누군가 접속할 때 이를 처리하기 위해 실행할 함수 지정 (이미 HandleFunc 함수를 통해 설정해서 nil을 넣었다.) http.ListenAndServe(":8080", nil) } // w: HTTP 서버의 응답과 관련된 모든 데이터를 담고 있다. 이 객체 변수를 대상으로 출력을 하면 클라이언트로 데이터를 전송한다. // r: 클라이언트의 HTTP 요청과 관련한 정보를 담고 있다. func handleHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s에 오신 것을 환영합니다!", r.URL.Path[1:]) // 서버의 응답에 데이터를 담는다. }
이제 프로그램을 실행시켜보자
go run server.go
이렇게 root로 접속하면 핸들러가 존재하지 않기 때문에 404가 뜨고, 우리가 지정했던 /hello 경로로 들어왔을 때 우리가 지정한 응답이 오는 것을 볼 수 있다.
반응형