Go 언어 20강 - 회원제 REST API 실습

 

 

📘 Go 언어 20강 - 회원제 REST API 실습

이번 시간엔 회원 등록, 회원 목록 조회 등의 REST API를 직접 구현해보며 실전 감각을 익힙니다.
gorilla/mux를 기반으로 작성하며, 구조체와 슬라이스를 이용한 간단한 인메모리 DB도 다룹니다.

1️⃣ 회원 구조체 정의

type Member struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

2️⃣ 인메모리 저장소와 기본 데이터

var members = []Member{
    {ID: 1, Name: "홍길동", Email: "hong@example.com"},
}

3️⃣ 회원 목록 조회 핸들러

func getMembers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(members)
}

4️⃣ 회원 등록 핸들러

func createMember(w http.ResponseWriter, r *http.Request) {
    var newMember Member
    if err := json.NewDecoder(r.Body).Decode(&newMember); err != nil {
        http.Error(w, "잘못된 요청", http.StatusBadRequest)
        return
    }
    newMember.ID = len(members) + 1
    members = append(members, newMember)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(newMember)
}

5️⃣ 라우팅 구성

r := mux.NewRouter()
r.HandleFunc("/members", getMembers).Methods("GET")
r.HandleFunc("/members", createMember).Methods("POST")
http.ListenAndServe(":8080", r)

💡 예제: curl 테스트

# 전체 회원 조회
curl http://localhost:8080/members

# 회원 등록
curl -X POST -H "Content-Type: application/json" \
  -d '{"name":"이순신", "email":"lee@navy.kr"}' \
  http://localhost:8080/members

🧠 요약

  • GET /members: 전체 회원 목록 JSON으로 응답
  • POST /members: JSON 요청 받아 신규 회원 추가
  • 슬라이스를 DB처럼 사용하여 간단하게 구현

한 줄 요약: "슬라이스 기반 REST API로 CRUD 기본기를 익히자!"