본문 바로가기
django

3 - ORM과 Django Rest Framework (1)

by shinminkyoung 2024. 5. 23.

[REST API]

1. API란?

Application Programming Interface

한 프로그램에서 다른 프로그램으로 데이터 주고 받기 위한 방법

 

movies = Movie.objects.all()
serializer = MovieSerializer(movies, many=True)
return Response(serializer.data)

 

실행하면 DB에서 영화를 찾아서 응답하는 코드

여기서 사용자가 이 코드를 동작시키려면?

 

if request.method == 'GET': // GET 요청을 하면 아래 코드 실행
	movies = Movie.objects.all()
    serializer = MovieSerializer(movies, many=True)
    return Response(serializer.data)

 

일반적으로 API는 HTTP 프로토콜에 기반하여 설계 됨

 

2. API가 가져야 할 내용

(GET 요청) http://www.movielist.com/api/movies?titleId=12345

 

1) 요청 방식 (HTTP Method)

데이터를 달라고 할 건지 데이터를 보낼 건지 등등

 

2) 무슨 자료에 대한 요청인지 (endpoint)

요청하는 자료가 영화인지 마이페이지 정보인지 등등

 

3) 자료요청에 필요한 추가 정보

어떤 영화 보고 싶은지, 페이지 수, 최신순 등등

 

3. API 요청 어떻게 보내는가?

보통 직접 주소를 입력하지 않고 버튼을 클릭해서 API 요청 보냄

프론트가 이런 API 요청 보내는 버튼을 만듦

 

4. 사용자 -> (API 요청) -> 서버

1) CREATE (올려줘)

2) READ (불러와줘)

3) UPDATE (수정해줘)

4) DELETE (삭제해줘)

(좋은 설계가 아님)

 

5. REST API란?

API를 설계하는 데에 여러 규칙을 정해둠으로써 더 체계적으로 APi를 만들기 위한 방법

 

"REST"

(Representational State Transfer)

자원읃ㄹ 이름으로 구분하여 해당 자원의 상태를 주고 받는 것

 

자원(resource)을 HTTP URL로 명시

자원에 대한 행위(CRUD)를 HTTP Method를 통해 제공 

 

1) URL에서는 동사 대신 복수형 명사를 사용하자

2) URL에는 소문자만 사용하자

3) HTTP Method를 통해 행위를 나타내자

 

CREATE -> POST

READ -> GET

UPDATE -> PUT

DELETE -> DELETE

 

HTTP 메서드와 명사를 결합하면 동일한 URL인데도 서로 다른 API로 사용 가능

(개발자가 의도하는 바를 명확히 표현 가능)

 

API 응답에도 체계가 필요하지 않은가?

-> <HTTP 상태 코드>

 

API 응답으로 성공하면 -> 200번대 코드

실패하면 -> (클라이언트 잘못) 400번대 코드

-> (서버 잘못) 500번대 코드

 

6. JSON

클라이언트와 서버가 데이터를 주고 받을 때 사용하는 메시지 형식 중 하나

파이썬의 딕셔너리와 비슷하게 생김

 

(정리)

프로그램(서버) 간에 데이터를 주고 받읃ㄹ 때는 API를 사용

API는 HTTP 프로토콜에 기반하기 때문에 URL 처럼 생김

API의 형식은 REST 방식을 사용하는 REST API가 요즘 트렌드

(REST: 자원의 이름과 그에 대한 행위를 각각 HTTP URL와 HTTP Method로 나타냄)

API 응답은 HTTP 상태 코드를 사용하여 성공/실패에 대한 정보를 제공

API 요청/응답을 통해 주고 받는 데이터는 JSON 형식으로 작성됨

 

[도서 관리 시스탬 소개 및 설계]

1. DB 설계

db 설계 == 테이블 설계 == 데이터 모델링

 

(DB 설계 전에 알아야 할 개념)

1) PK (primary key)

2) FK (foreign key)

3) 관계 (relationship)

 

2. Primary Key (PK)

테이블에서 가장 기본적인 속성 (기본키)

다른 데이터(행)들과 이 데이터를 구분할 수 있는 값

(NOT NULL: PK의 값은 절대 NULL이 될 수 없음)

(UNIQUE: 유일무이! 다른 데이터의 PK값과 중복될 수 있음)

 

3. Foreign Key (FK)

다른 테이블의 PK를 참조하는 키 (외래키)

한 테이블과 다른 테이블을 연결해주는 역할

 

4. 관계 (Relationship)

테이블 간의 연관관계

1) 1:1

두 테이블이 각각 서로를 하나만 가질 수 있을 때

2) 1:N

한 테이블은 다른 테이블을 여러 개 반대편 테이블은 하나만 가질 수 있을 때

3) N:M

두 테이블이 각각 서로를 여러 개 가질 수 있을 때

 

[도서 관리 시스템 개발]

1. ORM이란?

object-relational ma[pping

데이터베이스의 테이블을 객체처럼 사용할 수 있도록 해주는 기술

 

ORM을 사용하면 마치 객체지향프로그래밍을 하듯이 데이터벵디스를 조작할 수 있음

 

2. ORM 실습

[장고 프로젝트의 Shell 실행하기]

$ python manage.py shell

 

<class 'django.db.models.query.QuerySet'>

QuerySet: 데이터베이스의 객체들의 집합을 으딛미

 

3. ORM 실습- 모든 데이터 / 데이터 1개 가져오기

1) 모델명.obejcts.all()

모델의 모든 데이터를 쿼리셋으로 가져오기

 

2) 모델명.obejcts.get(조건)

조건에 맞는 객체 하나 가져오기

 

3) 객체.속성

객체의 속성에 접근

 

4. ORM 실습- SQL문 확인하기

쿼리셋.query

해당 쿼리셋이 수행될 때 실제로 실행되는 SQL 쿼리문 확인

 

5. ORM 실습- 필터링하기

모델명.objects.filter(조건)

조건에 맞는 한 개 이상의 데이터 가져올 때 (필터링)

 

lookup 예시

1) gt (grated than)

2) gte (grater than or equal to)

3) lt (less than)

4) lte (less than or equal to)

5) contains / startwith / endswith

6) in : 주어진 리스트, 튜플, 쿼리셋 등의 값들 중 하나와 일치하는 객체를 검색

 

6. ORM 실습 - 데이터 생성하기

1) 객체.save() 메서드

[첫 번째 방법] 객체 생성하고 save() 메서드 사용하기

2) 모델명.objects.create() 메서드

[두 번째 방법] create() 메서드 사용하기

 

7. ORM 실습 - 데이터 수정하기

1) 먼저, 수정할 데이터에 접근

>>> book = Book.objects.get(id=2)
>>> print(book)
장고의 정석

 

2) 수정하고 save() 메서드 사용 

>>> book.title = '멋사의 정석'
>>> book.save()

 

 

8. ORM 실습 - 데이터 삭제하기

1) 먼저, 삭제할 데이터에 접근

>>> book = Book.objects.get(id=3)

 

2) 객체.delete()

>>> book.delete()
(1, {'bookapp.Book' : 1})

 

(모든 객체 삭제하는 법)

>>> Book.objects.all.delete()

 

이후 내용은 다음주에 추가

'django' 카테고리의 다른 글

모델링과 마이그레이션 (2)  (3) 2025.01.15
모델링과 마이그레이션 (1)  (4) 2025.01.15
장고에 대하여  (7) 2025.01.07
2 - Django Template과 Model  (8) 2024.05.22
1 - web과 Django 기초  (4) 2024.05.11