1. RESTful이란?
RESTful은 REST(Representational State Transfer) 아키텍처 원칙을 잘 지킨 API 스타일을 의미합니다.
REST는 2000년 Roy Fielding의 논문에서 처음 제안된 웹 아키텍처 설계 제약 조건이며,
이를 충실히 반영한 API를 RESTful API라고 부릅니다.
2. REST의 핵심 원칙
RESTful하게 설계하려면 다음 제약 조건을 지켜야 합니다.
- 클라이언트-서버 구조
- 클라이언트와 서버는 역할을 분리
- 클라이언트: UI/UX 처리
- 서버: 데이터 및 비즈니스 로직 처리
- 무상태성(Stateless)
- 서버는 요청 간 클라이언트 상태를 저장하지 않음
- 모든 요청은 필요한 정보를 자체적으로 포함
- 캐시 가능(Cacheable)
- 응답 데이터는 캐싱 가능해야 하며, 이를 명시해야 함
- 균일한 인터페이스(Uniform Interface)
- 리소스(데이터)는 고유한 URI로 식별
- HTTP 메서드 의미를 일관성 있게 사용
- 계층화(Layered System)
- 서버 구조는 여러 계층으로 구성 가능(로드밸런서, 프록시 등)
- Code on Demand (Optional)
- 요청 시 서버에서 스크립트를 내려 클라이언트 실행 가능 (거의 사용 X)
3. RESTful API 설계 원칙
- 명사 기반 URI 사용 (동사 대신)
- HTTP 메서드에 의미 부여:
- GET → 데이터 조회
- POST → 데이터 생성
- PUT → 전체 수정
- PATCH → 부분 수정
- DELETE → 삭제
- 응답 상태코드 활용:
- 200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found 등
4. 예시
잘못된 설계 (RESTful 아님)
GET /getUserInfo
POST /createUser
DELETE /deleteUser/1
RESTful 설계
GET /users # 사용자 목록 조회
GET /users/1 # 특정 사용자 조회
POST /users # 사용자 생성
PUT /users/1 # 사용자 전체 수정
PATCH /users/1 # 사용자 부분 수정
DELETE /users/1 # 사용자 삭제
📌 Django REST Framework 예시
from rest_framework import viewsets
from .models import User
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
routers.py에서 라우팅하면 RESTful API 자동 생성:
from rest_framework.routers import DefaultRouter
from .views import UserViewSet
router = DefaultRouter()
router.register(r'users', UserViewSet)
urlpatterns = router.urls
5. 면접 답변 예시
Q. RESTful이 무엇인가요?
RESTful은 REST 아키텍처 원칙을 준수하여 설계된 API 스타일을 의미합니다.
리소스를 URI로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)에 맞춰 CRUD 동작을 매핑합니다.
서버는 무상태성을 유지하며, 클라이언트와 서버가 독립적으로 동작합니다.
이를 통해 일관성 있는 API 설계와 확장성이 보장됩니다.
6. 꼬리 질문 & 대응
Q1. REST와 RESTful의 차이는 무엇인가요?
REST는 아키텍처 스타일(설계 제약 조건)이고, RESTful은 그 원칙을 충실히 구현한 API를 말합니다.
REST를 일부만 적용하거나 어긴 경우는 REST-like라고 표현하기도 합니다.
Q2. 무상태성(Stateless)의 장점과 단점은 무엇인가요?
장점: 서버 확장성(Scale-out) 용이, 장애 복구 쉬움
단점: 매 요청마다 모든 정보를 포함해야 하므로 네트워크 부하 증가 가능
Q3. RESTful이 아닌 경우에는 어떤 문제가 생기나요?
일관성 없는 API, 유지보수 어려움, 클라이언트-서버 간 혼동 가능성, 문서화 비용 증가
Q4. RESTful과 gRPC, GraphQL 비교해 보세요.
- gRPC: 바이너리 프로토콜 기반, 빠르고 타입 안전하지만 브라우저 호환성이 떨어짐
- GraphQL: 필요한 데이터만 요청 가능, 유연하지만 캐싱과 서버 부하 관리가 어려울 수 있음
- RESTful: 표준 HTTP 기반, 범용성 높음, 단 요청 데이터 과다 전송 가능
7. 마무리
RESTful은 단순히 “GET, POST 쓰는 것”이 아니라,
리소스 중심의 URI 설계와 HTTP 메서드 의미 부여, 무상태성, 일관성이 핵심입니다.
면접에서는 REST의 제약 조건과 RESTful 설계 예시를 정확히 설명할 수 있어야 합니다.
💡 추천 참고자료
- REST 논문: Roy Fielding, Architectural Styles and the Design of Network-based Software Architectures
- Django REST Framework: 공식 문서
'Programming > 기술 면접' 카테고리의 다른 글
| [CS Study] Programming (프로그래밍 공통) (2) | 2025.08.11 |
|---|---|
| 🏛️ 객체지향 설계의 5대 원칙, SOLID 완벽 이해 (2) | 2025.08.05 |
| [개발자 기술 면접 대비] 네트워크 관련 기출 (6) | 2025.08.04 |
| [개발자 기술 면접 대비] 프로그래밍 공통 기술 면접 정리 (5) | 2025.08.04 |
| ✅ 웹 서버 vs 웹 프레임워크 차이 (2) | 2025.07.30 |