순수 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 연결하여 브라우져에서 보는 법을 몰라서 일단 진행을 못하겠어요.
버전 관리
아라한사
현재 버전
선택 버전
graphittie 자세히 보기