🐹 Go로 간단한 REST API 서버 구축: 사용자 데이터 관리

Go 예제

초급 난이도
예제 타입
10/12 등록일

Go로 간단한 REST API 서버 구축: 사용자 데이터 관리

초급
**목적:** 이 예제는 Go 언어를 사용하여 기본적인 RESTful API 서버를 구축하고, 사용자 데이터를 저장하고 관리하는 방법을 보여줍니다. CRUD (Create, Read, Update, Delete) 기능을 구현하여 데이터베이스와의 상호 작용을 경험할 수 있습니다.

**사용 시나리오:** 사용자는 HTTP 요청을 통해 API 서버에 접속하여 새로운 사용자 정보를 생성(Create), 기존 사용자 정보를 조회(Read), 특정 사용자 정보를 수정(Update), 또는 삭제(Delete)할 수 있습니다. API 서버는 JSON 형식으로 데이터를 주고받습니다.

**결과:** 이 예제에서는 간단한 데이터베이스 (in-memory storage)를 사용하여 사용자 데이터를 관리합니다. 실제 운영 환경에서는 MySQL, PostgreSQL 등 관계형 데이터베이스나 MongoDB와 같은 NoSQL 데이터베이스를 사용해야 합니다. API 서버는 HTTP 요청을 처리하고 JSON 응답을 반환하여 클라이언트에게 결과를 제공합니다.
코드 예제
#!/usr/bin/env go

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

// 사용자 데이터 구조체
type User struct {
    ID    string `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

// 사용자 데이터 저장소 (in-memory)
var users = []User{}}

// 새로운 사용자를 생성하는 핸들러
func createUser(w http.ResponseWriter, r *http.Request) {
    // 요청 본문 파싱
    var user User
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {  // 에러 처리
        log.Println("에러: 사용자 데이터 파싱 실패", err) // 로깅
        http.Error(w, "에러: 유효하지 않은 사용자 데이터", http.StatusBadRequest) // HTTP 에러 응답
        return
    }

    // 사용자 ID 생성 (간단한 예시)
    user.ID = fmt.Sprintf("user-%d", time.Now().UnixNano())
    
    // 사용자 데이터 저장
    users = append(users, user)
    fmt.Fprintf(w, "사용자 %s 생성 성공! ID: %s
", user.Name, user.ID)
}

// 사용자를 조회하는 핸들러
func getUser(w http.ResponseWriter, r *http.Request) {
    // URL에서 사용자 ID 추출
    userID := r.URL.Query().Get("id")

    // 데이터베이스에서 사용자 찾기 (in-memory)
    for _, user := range users {
        if user.ID == userID { // ID 매칭
            json.NewEncoder(w).Encode(user)
            return
        }
    }

    // 사용자를 찾을 수 없는 경우
    http.Error(w, "사용자를 찾을 수 없음", http.StatusNotFound)
}}

// 모든 사용자를 조회하는 핸들러 (테스트용)
func getAllUsers(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(users)
}

// API 엔드포인트 정의
func main() {  // 프로그램 시작
    http.HandleFunc("/users/create", createUser)
    http.HandleFunc("/users/", getUser)
    http.HandleFunc("/users/all", getAllUsers)

    fmt.Println("서버가 8080 포트에서 실행 중...")
    http.ListenAndServe(":8080", nil)
}
등록일: 2025년 10월 12일 19:43
언어 정보
언어
Go
카테고리
System
인기도
#8
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요