순수 Go로 만드는 게시판

03. 라우팅(경로설정)

라우팅 설정에서는 go의 외부라이브러리인 mux를 사용해보도록 하겠습니다.

깃헙주소는 다음과 같습니다 : https://github.com/gorilla/mux

그리고 터미널환경에서 go get github.com/gorilla/mux 를 해주셔야 합니다.

그후로 소스를 적을 것입니다.

 

1. 먼저 /board로 연결하고 싶습니다! 정적 라우팅

자, 가장 먼저 첫걸음으로 /board로 연결해봅시다.

먼저 소스를 다음과 같이 적어줘봅시다.

package main

import (
    "fmt"
	"net/http"
)

func main() {
	fmt.Println("Hello world Board Server")
	http.HandleFunc("/board", handleBoard)
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8001", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello I will be a Board. %s", r.URL.Path[1:])
}
func handleBoard(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello I am Board. %s", r.URL.Path[1:])
}

뭔가 살짝 바뀐 것같은 느낌이 오시나요?

http.HandleFunc("/board", handleBoard)

가 main 함수에 추가되었고,  handleBoard를 처리할 

func handleBoard(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello I am Board. %s", r.URL.Path[1:])
}

가 추가되었습니다.

 

포트번호가 잠깐 바뀐 것은 애교로 봐주세요;; ㅎ; 

자, 그러면! /board/id 로도 접속 하고 싶다는 생각이 들 것입니다!!

 

2. /board/글번호 로 접속하고 싶은데요? 동적 라우팅

여기서부터 mux를 쓰게 됩니다 :) 

mux의 매뉴얼을 참고하여서 대략 이런 형태로 서버경로를 설정합니다.

    r := mux.NewRouter()
	r.HandleFunc("/board/{id}", 메서드)
	r.HandleFunc("/board", 메서드)
	r.HandleFunc("/", 메서드)
	http.Handle("/", r)
그리고 id값을 추출할때는 http.Request 요청에서 다음과 같이 추출하게 됩니다.

나중에는 여기서 얻는 값을 가지고 체크를 하거나, 데이터베이스에 해당 글 번호를 불러오는 데 사용되겠죠!

vars := mux.Vars(r)
Id := vars["id"]

어디 한번 전체적인 소스로 볼까요?(임포트를 잊지 말아주세요 :) 

package main

import (
    "fmt"
	"github.com/gorilla/mux"
	"net/http"
)

func main() {
	fmt.Println("Hello world Board Server")
	r := mux.NewRouter()
	r.HandleFunc("/board/{id}", handleRead)
	r.HandleFunc("/board", handleBoard)
	r.HandleFunc("/", handler)
	http.Handle("/", r)
	http.ListenAndServe(":8002", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello I will be a Board. %s", r.URL.Path[1:])
}
func handleBoard(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello I am Board. %s", r.URL.Path[1:])
}
func handleRead(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	Id := vars["id"]
	fmt.Println("id값은 ,", Id)
	fmt.Fprintf(w, "Hello I am Board.  게시글 넘버 : %s", Id)
}

자 , 그러면 다음 시간에는 이걸 좀 더 폴더별로 리팩토링해보고,

외부파일을 불러오는 것까지 한번 해보겠습니다. ㅎㅎ

댓글

댓글 본문
  1. 코딩이궁금해요
    localhost 연결하여 브라우져에서 보는 법을 몰라서 일단 진행을 못하겠어요.