안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

장고 (Django)

[Django] REST API, Django REST framework (DRF)

피그브라더 2020. 6. 26. 17:41

1. REST API

REST(REpresentational State Transfer) API란, HTTP 프로토콜을 통해 요청할 수 있는 API를 만들 때 프로그래머들이 널리 사용하는 형식 중 하나이다. 즉, REST API는 HTTP 기반 API의 한 형식을 의미할 뿐, 특정 기술이나 언어에 의존하는 개념이 아니다.

 

HTTP 프로토콜을 통해 요청을 전송하기 위해서는 크게 두 가지가 필요하다. 하나는 요청하고자 하는 자원을 나타내는 URI(Uniform Resource Identifier), 나머지 하나는 그 자원을 대상으로 수행하고자 하는 동작을 나타내는 메소드(Method)이다. HTTP 요청의 대표적인 메소드로는 GET, POST, PUT, PATCH, DELETE 등이 있으며, 각각은 데이터의 조회, 생성, 수정, 부분 수정, 삭제를 위해 사용하도록 권장된다. 그러나 그렇게 권장만 될 뿐 실제로는 GET 요청으로도 데이터를 생성할 수 있고, POST 요청으로도 데이터를 조회할 수 있다. 즉 특정 기능을 수행하는 API를 요청하기 위한 URI와 메소드는 전적으로 그 API를 만드는 사람의 마음에 달려 있다.

 

이때 REST API는 HTTP 요청 시 사용하는 URI와 메소드의 종류만을 보고도 해당 API가 무슨 자원을 대상으로 무슨 동작을 수행하는지를 쉽게 추측할 수 있도록 하는 형식을 갖춘 API를 말한다. 요청하고자 하는 자원은 반드시 명사로 표현하고, 해당 자원의 목록이 아닌 특정 한 자원에 대한 요청이라면 해당 자원의 고윳값을 명시하며, 해당 자원의 하위 자원에 대한 요청이라면 바로 이어서 그 자원을 동일한 방식으로 명시한다. 다음 예를 보면 이해하기 쉬울 것이다.

 

▼ REST API 예시

요청 URI의 형태 메소드 추측 기능
/classes/ GET 모든 반들의 목록 정보를 조회하는 것
/classes/ POST 새로운 반을 추가하는 것
/classes/0/ GET 0번 반의 정보를 조회하는 것
/classes/0/ PUT 0번 반의 정보를 수정하는 것
/classes/0/
PATCH 0번 반의 정보를 부분 수정하는 것
/classes/0/
DELETE 0번 반의 정보를 삭제하는 것
/classes/0/students/ GET 0번 반에 속한 학생들의 목록 정보를 조회하는 것
/classes/0/students/
POST 0번 반에 새로운 학생을 추가하는 것
/classes/0/students/0/
GET 0번 반의 0번째 학생의 정보를 조회하는 것
/classes/0/students/0/
PUT 0번 반의 0번째 학생의 정보를 수정하는 것
/classes/0/students/0/
PATCH 0번 반의 0번째 학생의 정보를 부분 수정하는 것
/classes/0/students/0/
DELETE 0번 반의 0번째 학생의 정보를 삭제하는 것

 

2. Django REST framework (DRF)

장고(Django)는 기본적으로 웹 애플리케이션이기 때문에 이것만을 사용하더라도 온전한 서버를 충분히 개발할 수 있다. 그러나 프론트 엔드와 백 엔드가 구별되기 시작하면서 장고는 백 엔드 애플리케이션으로서 훨씬 더 많이 사용되기 시작했다.

 

백 엔드 애플리케이션은 프론트 엔드가 요청하는 동작을 수행하기 위한 API를 제공할 수 있어야 한다. 이를 위해, 장고는 REST API 서버로 기능하는 백 엔드 애플리케이션을 편하게 개발할 수 있도록 별도의 프레임워크를 제공하고 있다. 그것이 바로 Django REST Framework(약칭 DRF)이며, 이는 장고에 의존하는 파이썬 패키지이다. DRF가 REST API 개발의 편의를 위해 제공하는 대표적인 기능으로는, 특정 모델에 대응하는 객체 목록 조회, 객체 생성, 객체 조회, 객체 수정, 객체 삭제의 기능을 위한 뷰들을 기본적으로 제공한다는 것이 있다. 그리고 필요하다면 그러한 뷰들을 적절히 커스터마이징 할 수 있는 기능 또한 제공한다. DRF에 대해서는 이어서 포스팅할 튜토리얼의 내용을 통해 자세히 알아보도록 하자.

 

3. 튜토리얼 시작 전 개발 환경 설정

다음 포스팅부터는 DRF 공식 사이트에서 제공하는 튜토리얼의 내용을 부분적으로 다뤄볼 것이다. 이에 앞서서, 다음과 같이 기본적인 개발 환경을 세팅해두자. 이에 대한 설명은 여기에 자세히 나와 있으니 참고 바란다. 혹은 DRF 공식 사이트의 내용을 참고해도 좋다.

 

  • 가상 환경 생성
  • 파이썬 패키지 설치 (django, djangorestframework, pygments)
  • 장고 프로젝트 생성 (이름 : tutorial)
  • 장고 앱 생성 (이름 : snippets)
  • 장고 설정 파일의 INSTALLED_APPS에 'rest_framework'와 'snippets.apps.SnippetsConfig' 추가