목차

  1. API란?
  2. REST API란?
    1. REST API 특징
  3. Django REST Framework(DRF)란?
  4. DRF를 이용한 API 예제
  5. Django MTV vs DRF
  6. Django의 요청 처리 흐름

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를 사용하면 좋은 점
  1. 코드 작성이 간편
    • 복잡한 SQL을 직접 작성하지 않고, APIView, ModelSerializer 등을 이용하면 API를 쉽게 만들 수 있습니다.
  2. 자동 API 문서 제공
    • 개발자가 API를 쉽게 테스트할 수 있도록 웹 브라우저에서 바로 API 요청을 보낼 수 있는 Browsable API를 제공합니다.
  3. 강력한 인증 및 권한 관리
    • 로그인한 사용자만 데이터를 볼 수 있도록 설정할 수 있습니다.
    • 토큰 기반 인증(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

🐾Recent posts