ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 경로로 들어왔을 때 우리가 지정한 응답이 오는 것을 볼 수 있다.

    반응형

    댓글

Designed by Tistory.