Golang - CORS

Lumi·2022년 2월 25일
0

Golang

목록 보기
38/38
post-thumbnail

🔥 개요

2티어 아키텍처로 매우 간단하고 테스트를 해보았습니다.

Node.js에서 cors처리를 할떄에 패키지를 불러오는 것과 동일한 방법으로 해결을 하였습니다.

  • go get github.com/rs/cors

🔨 전체 코드

package main

import (
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/gorilla/mux"
	"github.com/rs/cors"
)

type Test struct {
	Id       string
	password string
}

func GET(w http.ResponseWriter, s *http.Request) {

	fmt.Fprintln(w, "GET요청")
}

func POST(w http.ResponseWriter, s *http.Request) {

	var test Test

	json.NewDecoder(s.Body).Decode(&test)

	fmt.Println(test)
	fmt.Println(s.Body)

	w.Write([]byte(test.Id))

}

func router(router *mux.Router) {

	router.HandleFunc("/", GET).Methods("GET")
	router.HandleFunc("/", POST).Methods("POST")

	fmt.Println("서버 시작")

	handler := cors.Default().Handler(router)
	err := http.ListenAndServe(":8080", handler)

	if err != nil {
		fmt.Println(err)
	}
}

func main() {
	r := mux.NewRouter()

	router(r)

}

보면 알수 있듯이 단순하게 Default()를 설정하여 서버를 시작 시킵니다.

만약 따로 Option을 추가하고자 한다면 cors.New(cors.Option{인자를 추가} 하는 방향으로 구현이 가능합니다.

여기까지는 문제가 없고 클라이언트에서 정상적으로 데이터를 받아오지만 문제는 Post요청에서 발생을 하고 있습니다.

클라이언트에서 단순하게 Post요청시에 아이디, password를 보내게 됩니다.

Node.js의 경우에는 req.body.ID이런식으로 받으면 되겠지만 golang에서는 따로 body데이터를 담아오는 방식을 몰라서 이전과 동일하게 json.NewDecoder(s.Body).Decode(&변수)를 통해서 구조체에 값을 할당하는 방식으로 진행했습니다.

func POST(w http.ResponseWriter, s *http.Request){
	var test Test

	json.NewDecoder(s.Body).Decode(&test)
	fmt.Println(test)
}

이러한 방식으로 구조체에 값을 할당하였는데 password부분은 값을 읽어오지 않고 있습니다.

보낸 데이터

출력된 데이터

구조체

type Test struct {
	Id       string
	password string
}

사진에서 보이는 바와 같이 비밀번호 부분을 받아오지 못하고 있고 같은 string값으로 할당을 하였습니다.

🔥 후기

아직 golang에 대해서 역시 숙지하지 못한것 같습니다...

혼자서 공부를 하다보니 어떤 부분이 문제인지 어떤 방향으로 공부를 해야하는지 갈피를 못잡고 있어서 문제가 되는 것 같습니다..ㅠㅠ

좀더 이러한 부분에 대해서 고민하고 해결을 하는 과정을 거치고 좀더 상세하게 공부를 해 보도록 하겠습니다. 감사합니다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글