상세 컨텐츠

본문 제목

[Nomad Coin] Explorer - #5.0 Setup

Go/Blockchain

by Gopythor 2022. 7. 16. 04:25

본문

728x90
반응형

#5.0 Setup

  • Go로 Server-side 렌더링 웹사이트를 어떻게 만드는지 알아보자
  • 하나의 library만 있으면 된다.
  • 다른 언어에 비하면 쉽다.

  • 먼저 http.ListenAndServe()를 쓴다.
  • 이 함수는 string address랑 지금은 안 쓸거지만 handler를 필요로 한다.
  • 나중에 handler가 뭔지 볼 것이다.
package main

import "net/http"

const port string = ":4000"

func main() {
	http.ListenAndServe(port, nil)
}
  • 여기에 port를 넣고 handler는 없다.
  • 서버를 여는 것은 매우 간단하다.
  • go run main.go를 입력하면 서버가 열린 것이다.

  • 서버가 listening 중인 걸 알 수 있다.
  • 프로그램이 끝나지 않았다.
  • 하지만 출력문을 하나 넣어보자.

 

const port string = ":4000"

func main() {
	fmt.Printf("Listening on http://localhost%s\n", port)
	http.ListenAndServe(port, nil)
}
  • f는 formatting의 f이다.

  • localhost:4000을 listening하고 있다고 나오게 된다.

  • 동작을 하고 있다. 서버를 가지고 있긴 하다.
  • 404 page not found가 떠있지만 서버를 연 것이다.
  • 한 줄은 print하는 용이고, 한 줄은 서버를 여는 용도이다.
  • 그럼 error handling을 해보자.

  • 이 함수를 log.Fatal()로 감싸보자
  • log.Fatal()의 설명을 살펴보면 Fatal은 os.Exit(1) 다음에 따라나오는 error를 Print)를 하는 것과 동일하다.
  • os.Exit(1)은 프로그램이 error code 1로 종료되는 것을 말한다.
  • 이건 error가 있을 때에만 실행된다.

  • ListenAndServe function은 error를 반환할 것이다. error가 있다면
  • error 가 있다면 error를 출력할 것이다.
  • error가 없다면 이 function은 끝나지 않고, Fatal function은 실행되지 않는다.

 

  • 홈페이지를 만들어보자.
  • 이 explorer에 딱 두 페이지만 만들 것이다.
  • 하나는 homepage고 하나는 add page이다.
  • 사람들이 block을 추가하는 페이지이다.
  • 데이터를 쓸 수도 있고, blockchain에 block을 추가할 수도 있다.

  • Node.js에서 route라고 불렀던 것을 만들어 볼 것이다.
  • http.HandleFunc()를 쓰고 여기엔 pattern을 써줘야하는데 home("/")이 될 것이다.
  • 그 다음으로는 handler를 작성해야 한다.
  • handler는 inline으로 쓸 수도 있고, 바깥에 쓸 수도 있다.
  • 지금은 inline으로 해볼 것이다.
func main() {
	http.HandleFunc("/",func(w http.ResponseWriter, r *http.Request) {})
	fmt.Printf("Listening on http://localhost%s\n", port)
	log.Fatal(http.ListenAndServe(port, nil))
}
  • vscode를 사용하고 있다면, 'f'를 입력하는 순간, 여러가지 자동완성 제안이 뜨는데, 그 중에 func(...) {}에서 엔터를 입력한다.
  • vscode는 곧바로 이 handler function이 필요로하는 특징적인 것들을 생성해준다.
func home(rw http.ResponseWriter, r *http.Request)
  • 다른 방법은 다른 function을 만드는 것이다.
  • 그리고 이 function을 Home이라고 할 것이다.
  • home은 2개의 인자를 받는 function이다.
  • 첫 번째는 ResponseWriter이다.
  • 여기에 유저에게 보내고 싶은 데이터를 적는 것이다.
  • 그리고 나머지 하나는 Request의 pointer이다.
  • 하나는 pointer가 아니고, 하나는 pointer이다.
  • 합리적인게, 애초에 Request를 복사하고 싶은게 아니다.
  • 왜냐하면 request가 file이 될 수도 있고, 빅데이터가 될 수도 있다.
  • 그래서 복사하기보다 실제 request를 사용하는게 좋다.
  • 반면에 Writer는 그냥 어딘가에 데이터를 쓰고 싶은 것이다.
func home(rw http.ResponseWriter, r *http.Request) {
	fmt.Fprint(rw, "Hello from home")
}

func main() {
	http.HandleFunc("/", home)
	fmt.Printf("Listening on http://localhost%s\n", port)
	log.Fatal(http.ListenAndServe(port, nil))
}
  • 데이터를 쓰기 위해 fmt를 쓸 것이다.
  • Fprint가 하는 일은 데이터를 출력하기는 하지만, console에 보여주는게 아니라 Writer에 출력하는 것이다.
  • data를 format해서 Writer에 보내는 것이다.
  • 그동안 Printf를 사용해왔는데 그건 data를 출력하고 포맷해주는 걸 console에 해줬지만, Fprint의 경우에는 Writer에 할 것이다.

  • rw를 입력하고 Response에 쓰고 싶은 것들을 입력하면 된다.
  • 나중에 Request object를 어떻게 쓸 수 있을지 보자.

 

 

728x90
반응형

관련글 더보기

댓글 영역