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 |