728x90

REST API는 웹 서비스의 설계 원칙 중 하나로, 클라이언트와 서버 간의 데이터 전송을 HTTP 프로토콜을 통해 수행하는 방법론입니다. REST(Representational State Transfer)는 자원의 표현을 전달한다는 의미로, 웹 애플리케이션의 아키텍처 스타일을 정의합니다. REST API는 REST 원칙을 준수하여 설계된 API를 의미하며, 주로 웹 애플리케이션 간의 통신을 위해 사용됩니다.

REST API의 기본 원칙

REST API는 여러 원칙과 제약 조건을 기반으로 설계됩니다. 주요 REST 원칙은 다음과 같습니다:

  1. 클라이언트-서버 구조:

    • 클라이언트와 서버는 서로 독립적으로 동작합니다.
    • 클라이언트는 서버에게 요청을 보내고, 서버는 클라이언트에게 응답을 제공합니다.
  2. 무상태성(Stateless):

    • 각 요청은 독립적이며, 요청 간에 상태를 저장하지 않습니다.
    • 클라이언트의 상태는 모든 요청에 포함되어야 하며, 서버는 각 요청을 독립적으로 처리합니다.
  3. 캐시 가능(Cachable):

    • 서버 응답은 캐시가 가능하도록 설계되어야 합니다.
    • HTTP 헤더를 통해 응답의 캐시 가능 여부를 명시할 수 있습니다.
  4. 계층화 시스템(Layered System):

    • 클라이언트와 서버 사이에 중간 레이어(프록시, 게이트웨이 등)를 추가하여 확장성과 보안을 높일 수 있습니다.
  5. 통일된 인터페이스(Uniform Interface):

    • 리소스를 식별하고 조작하기 위한 일관된 인터페이스를 제공해야 합니다.
    • URI를 통해 자원을 명확히 식별하며, HTTP 메서드를 통해 자원을 조작합니다.
  6. 코드 온 디맨드(Optional):

    • 서버에서 클라이언트로 코드를 전송하여 클라이언트가 실행할 수 있도록 할 수 있습니다. (예: 자바스크립트)

HTTP 메서드

REST API는 HTTP 메서드를 통해 클라이언트와 서버 간의 상호작용을 정의합니다. 주요 HTTP 메서드는 다음과 같습니다:

  • GET: 서버로부터 리소스를 조회할 때 사용됩니다. (데이터 조회)
  • POST: 서버에 새로운 리소스를 생성할 때 사용됩니다. (데이터 생성)
  • PUT: 서버의 리소스를 업데이트할 때 사용됩니다. (데이터 전체 업데이트)
  • PATCH: 서버의 리소스를 부분적으로 업데이트할 때 사용됩니다. (데이터 일부 업데이트)
  • DELETE: 서버의 리소스를 삭제할 때 사용됩니다. (데이터 삭제)

REST API의 리소스 설계

REST API에서 리소스는 URI를 통해 식별됩니다. 리소스의 URI는 일관된 규칙을 따라야 하며, 명확하고 직관적으로 설계되어야 합니다. 일반적인 URI 설계 방식은 다음과 같습니다:

/resources            # 모든 리소스 목록 조회
/resources/{id}       # 특정 리소스 조회
/resources/{id}/sub   # 하위 리소스 조회

예제: 도서 관리 시스템 REST API

다음은 도서 관리 시스템의 REST API 예제입니다:

  • GET /books: 모든 도서 목록 조회
  • GET /books/{id}: 특정 도서 조회
  • POST /books: 새로운 도서 추가
  • PUT /books/{id}: 특정 도서 정보 업데이트
  • PATCH /books/{id}: 특정 도서의 일부 정보 업데이트
  • DELETE /books/{id}: 특정 도서 삭제

JSON 형식의 응답 예시

REST API는 주로 JSON(JavaScript Object Notation) 형식으로 데이터를 주고받습니다. JSON은 경량 데이터 교환 형식으로, 읽기 쉽고 기계 해석이 용이합니다.

GET /books/1 응답 예시:

{
    "id": 1,
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    "publishedDate": "1925-04-10"
}

POST /books 요청 예시:

{
    "title": "1984",
    "author": "George Orwell",
    "publishedDate": "1949-06-08"
}

REST API 구현

REST API는 다양한 언어와 프레임워크를 사용하여 구현할 수 있습니다. 여기서는 Java를 사용한 REST API 구현 예제를 간단히 소개하겠습니다.

Java Spring Boot를 사용한 REST API 구현

Spring Boot는 RESTful 웹 서비스를 쉽게 구현할 수 있는 프레임워크입니다. Spring Boot를 사용하면 최소한의 설정으로 REST API를 개발할 수 있습니다.

프로젝트 설정

  1. Spring Initializr를 통해 프로젝트를 생성합니다.

    • 웹 애플리케이션으로 설정하고, Spring Web 의존성을 추가합니다.
  2. 프로젝트 구조:

    src/main/java
    ├── com.example.demo
    │   ├── DemoApplication.java
    │   ├── BookController.java
    │   └── Book.java

REST API 코드 예제

Book.java (모델 클래스)

package com.example.demo;

public class Book {
    private Long id;
    private String title;
    private String author;
    private String publishedDate;

    // 기본 생성자
    public Book() {}

    // 매개변수가 있는 생성자
    public Book(Long id, String title, String author, String publishedDate) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.publishedDate = publishedDate;
    }

    // Getter와 Setter 메서드
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPublishedDate() {
        return publishedDate;
    }

    public void setPublishedDate(String publishedDate) {
        this.publishedDate = publishedDate;
    }
}

BookController.java (컨트롤러 클래스)

package com.example.demo;

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {

    private List<Book> books = new ArrayList<>();

    public BookController() {
        books.add(new Book(1L, "The Great Gatsby", "F. Scott Fitzgerald", "1925-04-10"));
        books.add(new Book(2L, "1984", "George Orwell", "1949-06-08"));
    }

    // 모든 도서 조회
    @GetMapping
    public List<Book> getAllBooks() {
        return books;
    }

    // 특정 도서 조회
    @GetMapping("/{id}")
    public Book getBookById(@PathVariable Long id) {
        return books.stream()
                .filter(book -> book.getId().equals(id))
                .findFirst()
                .orElseThrow(() -> new RuntimeException("Book not found"));
    }

    // 새로운 도서 추가
    @PostMapping
    public Book addBook(@RequestBody Book book) {
        book.setId((long) (books.size() + 1));
        books.add(book);
        return book;
    }

    // 도서 정보 업데이트
    @PutMapping("/{id}")
    public Book updateBook(@PathVariable Long id, @RequestBody Book book) {
        Book existingBook = getBookById(id);
        existingBook.setTitle(book.getTitle());
        existingBook.setAuthor(book.getAuthor());
        existingBook.setPublishedDate(book.getPublishedDate());
        return existingBook;
    }

    // 도서 삭제
    @DeleteMapping("/{id}")
    public void deleteBook(@PathVariable Long id) {
        books.removeIf(book -> book.getId().equals(id));
    }
}

Spring Boot 애플리케이션 실행

  • DemoApplication.java: Spring Boot 애플리케이션의 진입점입니다.
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Spring Boot 애플리케이션을 실행한 후 브라우저 또는 Postman과 같은 도구를 사용하여 REST API를 테스트할 수 있습니다.

REST API의 장단점

장점

  • 확장성: REST API는 클라이언트와 서버의 확장이 용이하며, 서로 독립적으로 발전할 수 있습니다.

  • 다양한 클라이언트 지원: REST API는 웹, 모바일, 데스크톱 등 다양한 플랫폼에서 사용될 수 있습니다.

  • 표준화된 프로토콜: HTTP 표준을 기반으로 하므로, 다양한 도구와 라이브러리를 활용할

    수 있습니다.

  • 캐시 가능: 응답을 캐시할 수 있어 성능을 개선할 수 있습니다.

단점

  • 복잡한 요청 처리: 클라이언트가 상태 정보를 저장해야 하므로, 복잡한 요청의 경우 클라이언트 쪽 코드가 복잡해질 수 있습니다.
  • 통신 오버헤드: HTTP 프로토콜의 오버헤드로 인해, 대량의 데이터를 처리하는 경우 비효율적일 수 있습니다.
  • 버전 관리: API의 버전 관리를 잘못할 경우, 클라이언트와의 호환성 문제가 발생할 수 있습니다.

결론

REST API는 현대 웹 애플리케이션 개발에서 널리 사용되는 기술입니다. 간단하고 일관된 인터페이스를 제공하며, 다양한 플랫폼과 쉽게 통합할 수 있습니다. REST API를 설계할 때는 REST의 원칙을 잘 준수하고, 클라이언트와 서버 간의 효율적인 데이터 전송을 고려하는 것이 중요합니다. 또한, Spring Boot와 같은 프레임워크를 활용하면 RESTful 웹 서비스를 더 쉽게 구현할 수 있습니다.

728x90
반응형

'Software > JAVA' 카테고리의 다른 글

JAVA 시작하기 - 개발분야  (0) 2024.07.31
JAVA 시작하기 - 개발환경  (0) 2024.07.31
JAVA 시작하기 - JSP 소개  (0) 2024.07.30
JAVA 시작하기 - Tomcat 소개  (0) 2024.07.30
VScode에서 Java 시작하기 - Java환경설치  (0) 2023.12.20

+ Recent posts