목차
1. API란?
🌪️ API(Application Programming Interface, 애플리케이션 프로그래밍 인터페이스)
🌪️ API란 프로그램끼리 소통할 수 있도록 도와주는 중간 역할을 하는 시스템입니다.
🌪️ 우리가 스마트폰에서 앱을 사용할 때, 또는 웹사이트에서 데이터를 가져올 때 백그라운드에서 API가 작동하고 있습니다.
API 예시
🍔 햄버거 가게에서 주문하는 과정
1. 손님(A)이 햄버거를 주문합니다.
2. 점원(B)이 주방(C)으로 주문을 전달합니다.
3. 주방에서 햄버거를 만들고 점원에게 전달합니다.
4. 점원이 손님에게 햄버거를 줍니다.
여기서:
- 손님(A) → 사용자 (프런트엔드)
- 점원(B) → API (중간 역할)
- 주방(C) → 서버 및 데이터베이스 (백엔드)
즉, API는 사용자(손님)와 서버(주방) 사이에서 데이터를 요청하고 응답하는 점원의 역할을 합니다.
🔝
2. REST API란?
🌪️ API는 다양한 형태로 존재하지만, 가장 많이 사용하는 방식 중 하나가 REST API입니다.
2.1. REST API 특징
1. 자원을 URL로 표현
- 예 : /posts/ → 게시글 목록
- 예 : /posts/1/ → ID가 1인 게시글 상세 조회
2. HTTP 메서드 사용
HTTP 메서드 | 설명 | 예제 |
GET | 데이터 조회 | GET /posts/ (게시글 목록 조회) |
POST | 데이터 생성 | POST /posts/ (새 게시글 작성) |
PUT | 데이터 수정 | PUT /posts/1/ (게시글 전체 수정) |
PATCH | 일부 데이터 수정 | PATCH /posts/1/ (제목만 수정) |
DELETE | 데이터 삭제 | DELETE /posts/1/ (게시글 삭제) |
3. 클라이언트-서버 구조
- 클라이언트(프런트엔드)와 서버(백엔드)가 분리되어 동작합니다.
- 예 :
- 웹사이트(프런트엔드)가 API를 통해 서버(백엔드)에서 데이터를 가져옵니다.
4. JSON 형식으로 데이터 주고받기
- API 요청과 응답은 주로 JSON(JavaScript Object Notation) 형식으로 이루어집니다.
{
"id": 1,
"title": "첫 번째 게시글",
"content": "게시글 내용입니다."
}
🔝
3. Django REST Framework(DRF)란?
🌪️ Django REST Framework(DRF)는 Django에서 REST API를 쉽게 만들 수 있도록 도와주는 도구입니다.
🌪️ Django 자체에서도 API를 만들 수 있는 기능이 있지만, DRF를 사용하면 훨씬 편리하게 API를 개발할 수 있습니다.
DRF를 사용하면 좋은 점
- 코드 작성이 간편
- 복잡한 SQL을 직접 작성하지 않고, APIView, ModelSerializer 등을 이용하면 API를 쉽게 만들 수 있습니다.
- 자동 API 문서 제공
- 개발자가 API를 쉽게 테스트할 수 있도록 웹 브라우저에서 바로 API 요청을 보낼 수 있는 Browsable API를 제공합니다.
- 강력한 인증 및 권한 관리
- 로그인한 사용자만 데이터를 볼 수 있도록 설정할 수 있습니다.
- 토큰 기반 인증(Token Authentication), JWT 인증 등을 지원합니다.
🔝
4. DRF를 이용한 API 예제
(1) 모델 생성
🌪️ 먼저 Post 모델을 만들어봅시다.
# models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=255) # 제목
content = models.TextField() # 내용
created_at = models.DateTimeField(auto_now_add=True) # 작성 시간
updated_at = models.DateTimeField(auto_now=True) # 수정 시간
def __str__(self):
return self.title
(2) 직렬화 (Serializer)
🌪️ Django 모델을 JSON 데이터로 변환하는 과정입니다.
🌪️ 즉, 데이터를 사용자가 이해할 수 있는 형식(JSON)으로 바꿔줍니다.
# serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__' # 모든 필드 포함
(3) API 뷰 작성
🌪️ DRF의 APIView를 사용하여 CRUD API를 구현해 봅시다.
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.shortcuts import get_object_or_404
from .models import Post
from .serializers import PostSerializer
# 게시글 목록 조회 (GET)
class PostListAPIView(APIView):
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=stauts.HTTP_200_OK)
# 게시글 작성 (Post)
class PostCreateAPIView(APIView):
def post(self, request):
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
(4) URL 설정
🌪️ 이제 API 요청을 받을 수 있도록 urls.py을 설정합니다.
# urls.py
from django.urls import path
from .views import PostListAPIView, PostCreateAPIView
urlpatterns = [
path('posts/', PostListAPIView.as_view(), name="post-list"), # 목록 조회
path('posts/create/', PostCreateAPIView.as_view(), name='post-create'), # 글 작성
]
🔝
5. Django MTV vs DRF
🔝
6. Django의 요청 처리 흐름
🔝
'🔥 공부 > 📘 Django, DRF' 카테고리의 다른 글
[📘 DRF] APIView 기반 CRUD (0) | 2025.02.11 |
---|---|
[📘 Django] Django Views (0) | 2025.02.11 |
[📘 Django] 관계형 데이터베이스 (0) | 2025.02.10 |
[📘 Django] Django User 모델(Model) (0) | 2025.02.10 |
[📘 Django] Model (1) | 2025.02.10 |