웹개발/SpringBoot

Rest API

bergerac 2025. 5. 26. 09:11

1. REST API란

REST는 REpresentational State Transfer의 줄임말이다. 이름이 길고 복잡해 보이지만 본질은 간단하다. 웹에서 자원을 URI로 표현하고, 해당 자원을 HTTP 메서드로 조작하는 아키텍처 스타일이다.

  • Representation: 자원의 표현 (JSON, XML 등)
  • State: 클라이언트가 전송하거나 서버가 응답하는 데이터의 상태
  • Transfer: 클라이언트-서버 간 상태 정보를 전달하는 행위

예를 들어, GET /api/v1/users/1 라는 요청은 ID가 1번인 사용자라는 '자원'에 대해 조회(GET)하겠다는 의도를 명확히 드러낸다.

 

2. REST API 키워드

REST API를 잘 설계하고 구현하려면 다음 개념을 먼저 이해하고 있어야 한다.

HTTP 프로토콜

웹 통신의 기본 규약. 주로 사용되는 메서드는 다음과 같다:

  • GET: 자원 조회
  • POST: 자원 생성
  • PUT: 자원 전체 수정
  • PATCH: 자원 부분 수정
  • DELETE: 자원 삭제

 URI(URL)

자원(Resource)을 식별하는 주소. 예를 들어, /api/v1/users/1 은 사용자라는 자원의 고유한 식별자다. 참고로 URI와 URL은 다음처럼 구분된다:

  • URL: 자원의 위치
  • URI: 자원의 식별자 (URL 포함)

요청과 응답

  • 클라이언트는 요청(Request)을 보낸다
  • 서버는 응답(Response)으로 결과를 전달한다

3. RESTful API란?

RESTful API는 REST 원칙을 잘 지킨 API를 의미한다. "REST스럽다"는 표현처럼, 설계 규칙을 얼마나 잘 따랐느냐에 따라 API의 RESTfulness가 결정된다.

 RESTful API 설계 원칙 요약

  • 리소스는 명사로 표현 (동사는 HTTP 메서드로 표현)
    • /users (O)
    • /getUser (X)
  • 계층 구조는 슬래시(/)로 표현
    • /users/1/schedules/2
  • URI 마지막에 슬래시 붙이지 않기
    • /users/1/ (X) → /users/1 (O)
  • 소문자 사용, 밑줄(_) 대신 하이픈(-) 사용
  • 복수형 사용 권장
    • /books, /menus, /orders

4. 실무에서 자주 쓰는 REST API 설계 예시

Spring Boot 프로젝트에서 다음과 같은 패턴이 자주 사용된다:

사용자 관련

  • 전체 조회: GET /api/v1/users
  • 특정 사용자 조회: GET /api/v1/users/{id}
  • 사용자 등록: POST /api/v1/users
  • 사용자 정보 수정: PUT /api/v1/users/{id}
  • 사용자 삭제: DELETE /api/v1/users/{id}

 쇼핑몰 예시

  • 상품 목록: GET /api/v1/products
  • 상품 리뷰 조회: GET /api/v1/products/{productId}/reviews
  • 배송 주문 조회: GET /api/v1/deliveries/{deliveryId}/orders

인증 처리

  • 로그인: POST /api/v1/auth/login
  • 로그아웃: POST /api/v1/auth/logout
  • 회원가입: POST /api/v1/auth/signup
  • 이메일 중복 체크: GET /api/v1/auth/check-email?email=test@example.com

 내 정보/설정

  • 내 정보 조회: GET /api/v1/users/me
  • 비밀번호 변경: PUT /api/v1/users/me/password
  • 내 설정 정보 조회: GET /api/v1/users/me/settings

 

5. Spring Boot + MySQL에서 REST API 구현 구조

클라이언트
   ↓
Controller - 요청 받음
   ↓
Service - 비즈니스 로직 처리
   ↓
Repository - DB와의 인터페이스 (JPA, MyBatis 등)
   ↓
MySQL - 실제 데이터 저장

 

'웹개발 > SpringBoot' 카테고리의 다른 글

JWT(JSON Web Token)  (0) 2025.05.28
Security  (0) 2025.05.27
Response/Request &Validation  (0) 2025.05.25
@Bean VS @Component  (0) 2025.05.24
Controller Mapping Annotation  (0) 2025.05.23