Go 언어로 간단한 RESTful API 만들기

밤새·2024년 3월 20일
0

Back/Front

목록 보기
4/12

1. Go 언어 설정

먼저 Go 언어를 설치하고 환경을 설정해야 합니다. Go 공식 웹사이트에서 Go 언어를 다운로드하고 설치할 수 있습니다. 설치가 완료되면 명령줄에서 go version을 입력하여 설치가 제대로 되었는지 확인할 수 있습니다.

저는 미리 설치한 상태여서

위와 같이 뜨게 됩니다!

2. 프로젝트 설정

이제 프로젝트 설정을 해보도록 하겠습니다. 새로운 디렉토리를 만들고 다음 명령을 실행합니다.

mkdir my-rest-api
cd my-rest-api
go mod init github.com/username/my-rest-api
  • mkdir my-rest-api : 이 명령은 현재 디렉토리에서 "my-rest-api"라는 이름의 새 디렉토리를 생성합니다. 이 디렉토리는 새로운 REST API 프로젝트의 루트 디렉토리가 됩니다.

  • cd my-rest-api : 이 명령은 방금 생성한 "my-rest-api" 디렉토리로 이동합니다. 이제 작업할 프로젝트 디렉토리 내부로 진입했습니다.

  • go mod init github.com/username/my-rest-api : 이 명령은 Go 모듈을 초기화합니다. Go 모듈은 Go 프로젝트의 의존성을 관리하는 시스템입니다. 이 명령은 현재 디렉토리를 기준으로 새로운 Go 모듈을 초기화하며, 해당 모듈의 경로를 github.com/username/my-rest-api로 설정합니다. 여기서 username은 GitHub 계정 이름이며, my-rest-api는 프로젝트의 이름입니다. 이렇게 함으로써 이 프로젝트는 GitHub에 있는 github.com/username/my-rest-api 경로에서 가져올 수 있는 Go 모듈로 설정됩니다.

3. 필수 패키지 가져오기

Go 언어에서 RESTful API를 작성할 때 유용한 패키지인 net/httpgorilla/mux를 가져와야 합니다.

go get github.com/gorilla/mux

4. 코드 작성

이제 Go 코드로 간단한 RESTful API를 작성할 차례입니다. 책 목록을 관리하는 API를 만들어 보겠습니다!

package main

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

    "github.com/gorilla/mux"
)

type Book struct {
    ID     string  `json:"id,omitempty"`
    Title  string  `json:"title,omitempty"`
    Author string  `json:"author,omitempty"`
    Year   string  `json:"year,omitempty"`
}

var books []Book

func GetBooks(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(books)
}

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

    // 샘플 데이터
    books = append(books, Book{ID: "1", Title: "1984", Author: "George Orwell", Year: "1949"})
    books = append(books, Book{ID: "2", Title: "To Kill a Mockingbird", Author: "Harper Lee", Year: "1960"})

    // 핸들러 등록
    router.HandleFunc("/books", GetBooks).Methods("GET")

    // 서버 시작
    log.Fatal(http.ListenAndServe(":8000", router))
}
  1. package main: 이 코드는 현재 파일이 main 패키지에 속한다는 것을 선언합니다. Go 프로그램은 항상 main 패키지에서 시작합니다.

  2. 필요한 패키지 가져오기

    • encoding/json: JSON 데이터를 인코딩 및 디코딩하기 위한 패키지.
    • log: 간단한 로깅 기능을 제공하는 패키지.
    • net/http: HTTP 클라이언트 및 서버를 생성하기 위한 패키지.
    • github.com/gorilla/mux: HTTP 라우터를 구현하기 위한 외부 패키지. gorilla/mux는 강력한 라우팅 및 URL 매칭 기능을 제공합니다.
  3. Book 구조체 정의

    • Book 구조체는 책에 대한 정보를 나타내며, ID, Title, Author, Year 필드를 가지고 있습니다. 구조체 필드의 태그들은 JSON 직렬화를 위한 옵션을 제공합니다.
  4. var books []Book: 책 목록을 저장하기 위한 전역 변수를 선언합니다.

  5. GetBooks 함수

    • GetBooks 함수는 HTTP 응답 작성을 통해 책 목록을 반환합니다. json.NewEncoder(w).Encode(books)를 통해 책 목록을 JSON 형식으로 인코딩하고, w http.ResponseWriter를 통해 응답을 작성합니다.
  6. main 함수

    • main 함수는 프로그램의 진입점입니다.
    • mux.NewRouter()를 사용하여 새로운 라우터를 생성합니다.
    • 샘플 데이터를 books 슬라이스에 추가합니다.
    • router.HandleFunc("/books", GetBooks).Methods("GET")를 사용하여 "/books" 엔드포인트에 대한 GET 요청을 처리하는 핸들러를 등록합니다.
    • http.ListenAndServe(":8000", router)를 사용하여 서버를 시작하고, 8000 포트에서 HTTP 요청을 처리하며, 라우터를 통해 요청을 라우팅합니다.
    • log.Fatal을 사용하여 서버 시작에 실패하면 로그를 출력하고 프로그램을 종료합니다.

5. 서버 실행

이제 작성한 코드를 실행하여 API 서버를 실행할 차례입니다.

go run main.go

6. API 테스트

API 서버가 실행 중이므로 브라우저나 curl을 사용하여 API 엔드포인트에 GET 요청을 보내어 데이터를 확인할 수 있습니다!

curl http://localhost:8000/books

저는 postman을 이용해서 테스트를 해보겠습니다!

값이 잘 나오는 것을 확인했습니다.

profile
프로젝트를 통해 배운 개념이나 겪은 문제점들을 정리하고, 회고록을 작성하며 성장해나가는 곳입니다 😊

0개의 댓글

관련 채용 정보