티스토리 뷰

728x90

시작한지 얼마 안지난 것 같은데 벌써 마지막 주차라니.. 시간 참 빠른 것 같다. 이번 주 주제는 Django REST framework 실습이다. 먼저 REST는 모르는 단어고 framework는 들어본 것 같다. 아직 알아야할 단어들이 많기에 이번주는 하나하나 차근차근 알아볼 예정이다.

728x90

 

질문1 : REST API, RESTful API란 무엇일까요?

개발자라면 API를 한번쯤 들어봤을 것이다. 개발자가 아니더라도 프로그래밍 언어를 접해본 사람이라면 들어는 보거나 읽어는 봤을 것이다. 들어는 봤지만 잘 알지는 못하는 것은 잘 쌓아올린 탑에 중요 기둥이 없는 것이나 마찬가지이다. 나는 이 기둥들이 없어서 이제부터 천천히 알아보려고 한다.

 

먼저 REST는 무엇일까? 

REST는 프로토콜이나 표준이 아닌 아키텍쳐 원칙 세트이다. 아키텍쳐는 무엇일까? 모르는게 참 많다..

아키텍쳐는 컴퓨터 구조에서 다루는데 최적화를 목표에 두고 시스템의 동작 원리, 구성환경 등을 설명 및 설계하는 청사진으로 생각하면 된다. 쉽게 말하면 소프트웨어를 구성하는데 아주 기초적인 설계도인 셈이다.

REST는 'Representational State Transfer' 의 약자로 웹에 존재하는 모든 자원(이미지나 영상, DB)에 고유한 URL을 부여하여 활용하는 방법으로 자원에 대한 주소를 지정하는 방식이다.

REST는 3가지의 구성요소로 이뤄져있다.

 

REST의 구성 요소

 

  1. 자원(Resource) , URI
    모든 자원은 고유한 ID를 가지고 ID는 서버에 존재하고 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다. HTTP에서 이러한 자원을 구별하는 ID는 ‘Students/1’ 같은 HTTP URI 이다.
  2. 행위(Verb) , Method
    클라이언트는 URI를 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용한다. HTTP 프로토콜에서는 GET , POST , PUT , DELETE 같은 Method를 제공한다.
  3. 표현(Representation)
    클라이언트가 서버로 요청을 보냈을 때 서버가 응답으로 보내주는 자원의 상태를 Representation이라고 한다. REST에서 하나의 자원은 JSON , XML , TEXT , RSS 등 여러형태의 Representation으로 나타낼수 있다.

 

REST를 사용하다보면 여러 충돌이 일어날 수 도 있는데 다음과 같은 특징을 고려한다면 REST를 좀 더 잘 이해할 수 있다.

 

REST의 특징

 

  1. 클라이언트 / 서버 구조 (Client-Server)
    자원이 있는 Server , 자원을 요청하는 Client의 구조를 가진다.
  2. 무상태 (Stateless)
    HTTP는 Stateless 프로토콜 이므로 REST 역시 무상태성을 가진다. 클라이언트의 Context 를 서버에 저장하지 않는다.
  3. 캐시 처리 가능 (Cachealble)
    웹 표준 HTTP 프로토콜을 그대로 사용하므로 , 웹에서 사용하는 기존의 인프라를 그대로 활용 가능하다.
  4. 계층화
    API 서버는 순수 비즈니스 로직을 수행하고 그 앞단에 사용자 인증 , 암호화 , 로드밸런싱 등을 하는 계층을 추가하여 구조상의 유연성을 줄 수 있다.
  5. 인터페이스 일관성(Uniform Interface)
    URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. HTTP 표준에만 따른다면 모든 플랫폼에 사용이 가능하다.
  6. 자체 표현 구조
    동사(Method) + 명사(URI) 로 이루어져있어 어떤 메서드에 무슨 행위를 하는지 알 수 있으며 REST API 자체가 매우 쉬워서 API 메세지 자체만 보고도 API를 이해할 수 있다

 

그럼 API는 무엇일까?

대충 데이터 중 내가 원하는 데이터를 뽑는 이미지가 상상된다. 이런 이미지가 맞을까?

API는 'Application Programming Interface' 의 줄임말으로써 애플리케이션 소프트웨어를 구축하고 통합 정의하는 프로토콜이다. 쉽게 말하면 사용자(클라이언트)와 제공자(서버) 사이에서 계약의 성향을 띄고 있으며 소비자의 호출에 따라 자원을 응답의 형식으로 제공한다. 내가 상상했던 이미지와 비슷하게 맞는 것 같다.

 

그럼 REST API란 무엇일까?

REST API는 RESTful API로도 불리는데 API 중에서 REST의 특징을 가지고 있는 API, API로 REST를 구현한 것을 RESTful API라고 한다.

RESTful API는 요청이 수행될 때 RESTful API는 리소스 상태에 대한 표현을 요청자에게 전송한다. 이 정보 또는 표현은 HTTP: JSON(Javascript Object Notation), HTML, XLT 또는 일반 텍스트를 통해 몇 가지 형식으로 전송된다. JSON은 그 이름에도 불구하고 사용 언어와 상관이 없을 뿐 아니라 인간과 기계가 모두 읽을 수 있기 때문에 가장 널리 사용된다. 나도 JSON을 사용해본 적이 있는데 너무 어려워서 구글의 도움을 많이 받았던 기억이 난다..

 

실제 RESTful API 실습

실제 RESTful API 실습을 진행해봤다.

가장 먼저 해야할 일은 장고 서버 설정부터 다시 진행해야한다는 점이다. 

# 가상환경 만들기
$ virtualenv venv

# 만든 가상환경 실행하기
$ source venv/Scripts/activate

# git init 전에 할 일(안 올릴 파일들 정리)
$ touch .gitignore

#장고와 djangorestframework 설치
$ pip install django==2.1.15 djangorestframework

# 새롭게 git pull 이후에 받아야 할 부분을 설정해준다
$ pip freeze > requirements.txt

# 프로젝트 생성(뒤에 . 파일을 만들어서 안에서 프로젝트생성하는게 아니라 여기 위치에서 생성한다.)
$ django-admin startproject PackMan .

이렇게 초기 설정을 진행하고 다음 블로그에 적힌 대로 따라오면 쉽게 실습을 할 수 있다. 나는 블로그와 마찬가지로 Postman으로 실습을 진행했다.

https://han-py.tistory.com/214?category=907665 

지난 학기에 사용했지만 이게 날고있는 사람 모양인건 처음 알았다.

 

 

질문2 : HTTP 메서드에 대해 설명해주세요.

HTTP 메소드란 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정한다.

그럼 리소스란 무엇일까?

 

우리가 흔히 말하는 데이터에는 코드가 있다. 하지만 일반적으로 큰 의미의 데이터란 코드를 포함하여 비트맵, 아이콘, 메뉴 등 프로그램의 논리와 무관한 모든 것들이 데이터에 속한다. 그럼 왜 우리는 데이터하면 코드를 먼저 생각하게 되었을까?

윈도우즈 프로그래밍은 도스 프로그래밍과는 다르게 데이터 중 코드와 코드가 아닌 것으로 분류하여 별도의 작업 과정으로 분리한다. 여기서 코드가 아닌 것들이 바로 리소스 라고 불린다.

 

HTTP 메소드란 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정한다고 했다. 그러면 어떠한 동작들을 지정하는지 알아보자.

 

 

 

주요 HTTP 메소드 종류

GET

리소스의 조회에 사용한다. 서버에 전달하고 싶은 데이터를 query를 통해 전달한다.

 

POST

메시지 바디를 통해 서버로 요청 데이터를 전달한다. 서버는 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다. 주로 신규 리소스의 등록, 프로세스 처리 등에 사용한다

 

PUT

목적 리소스ㅗ를 현재 메시지의 값으로 생성하거나 만약 존재한다면 기존 리소스를 삭제하고 덮어쓰기 한다. 

 

PATCH

리소스를 부분적으로 변경한다. 지원하지 않는 경우도 있어 이런 경우 POST로 대체하여 사용한다.

 

DELETE

리소스의 삭제를 요청하는 데 사용한다.

 

기타 메소드

  • HEAD : GET과 동일하지만 메시지 바디를 제외하고 반환
  • OPTIONS : 대상 리소스에 대한 통신을 설정하는 데 사용
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

 

 

 

 

HTTP 메소드 속성

안전 Safe

호출해도 리소스를 변경하지 않는 특성이다.

멱등성 Idempotent

동일한 요청을 여러 번 보내도 한 번 보내는 것과 같은 것이라는 뜻이다.

외부 요인으로 중간에 리소스가 변경되는 것을 고려하지 않고 해당 요청을 기준으로 고려한다

올바르게 구현한 GET, PUT, DELETE 메소드는 멱등성을 지녀야 한다.

예) 

  • DELETE /members/100 → 200(성공)
  • DELETE /members/100 → 404(오류)
  • DELETE를 여러 번 호출하면 응답 코드는 달라질 수 있지만, 100번 member가 삭제된 것은 동일하다.

캐시 가능 Cacheable

응답 결과를 서버에 캐시 해서 사용해도 되는 메소드이다.

GET, HEAD, POST, PATCH가 가능하지만 실무에서는 구현이 어렵기 때문에 GET, HEAD 정도만 캐시 하여 사용한다고 한다.

 

 

728x90
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크