'll Hacker

[WIL] 3주차, Django의 모델 및 데이터베이스 본문

Dev/GDSC

[WIL] 3주차, Django의 모델 및 데이터베이스

씨이오가 되자 2024. 10. 4. 13:41
728x90

MVT패턴에서 Model을 살펴보자.

MVT 패턴에 대한 설명은 아래 블로그를 참고하면 되겠다!

https://successing.tistory.com/89

 

[WIL] 2주차, Django의 MVT 아키텍처 이해

MVT 패턴Model- 데이터베이스와의 상호작용을 관리하여, 데이터 구조와 비즈니스 로직을 정의- Django ORM을 통해 데이터를 쉽게 조회, 저장, 업데이트 가능View- 클라이언트의 요청을 받아 필요한 데

successing.tistory.com

 

데이터 구조 

  • 각 클래스는 데이터의 테이블과 매칭되며, 클래스 속성은 테이블의 열에 해당된다.

관계 정의

  • 테이블 간의 관계정의
  • ForeignKey, ManyToManyField 등을 사용하여 테이블 간 관계를 설정

1:1

Models.OneToOneField( )

이론적으로는 unique = True인 ForeignKey와 같지만, 반환하는 결과가 다르다.

특히 역참조할 때, OneToOneField는 객체 1개를 반환하지만 ForeignKey는 Queryset을 반환

Queryset?
전달받은 모델의 객체 목록
역참조?
참조당하는 테이블이 참조하는 테이블을 참조하는 것
Django에서는 기본적으로 ForeignKey로 설정된 모델에서 자동으로 역참조가 가능 

 

1:N

models.ForeignKey()

처음 create 시 ForeignKey()를 지정하여 생성 

 

M:N

models.ManyToManyField()

Django에서 자동으로 중간 테이블을 만들어 관리

참조객체.참조속성.add()를 통해 속성에 객체 추가 가능

OneToOneField는 생성 시 자동으로 match되지만,

M:N관계는 처음에 추가하지 않아도 후에 add()를 통해 추가 

 

Attribute

CharField() : 짧은 문자열 데이터를 저장하는 필드로, 텍스트를 저장할 때 주로 사용

IntegerField() : 정수(int)값을 저장하는 필드로, 데이터베이스에서 정수 타입으로 처리

DateField() : 날짜 정보를 저장하는 필드, 날짜 형식의 데이터를 저장

  • auto_now : 저장할 때마다 자동으로 현재 날짜로 갱신
  • default : 디폴트 날짜 설정

EmailField() : 이메일 주소를 저장하는 필드, CharField를 상속받아 만들어졌으며,
기본적으로 이메일 주소 형식이 맞는지 검증

BooleanField()

FileField() : 파일을 업로드하고 저장할 수 있는 필드. 사용자가 업로드한 파일을 저장하고,
해당 파일에 대한 경로를 데이터베이스에 저장한다

  • upload_to 파일이 업로드될 경로를 지정.

Django ORM

Object Relation Mapper

SQL문이 아닌 비교적 간단한 파이썬 문법으로 데이터를 다룰 수 있는 추상화된 레이어

관계형 데이터베이스 관리 시스템 중
널리 사용되는 PostgreSQL, MySQL, Oracle, sqlite3 등의 RDBMS를 Mapping하여 사용가능.

model.objects.all() 모든 객체 조회하기
model.objects.create() 객체 생성하기
model.objects.remove() 객체 삭제하기
model.objects.get() 객체 가져오기
model.objects.filter() 필터링 검색하기
- 필드명 뒤에 두 개의 밑줄(_)과 함께 다양한 Lookup 표현식을 사용가능
model.objects.order_by() 정렬하기
- 앞에 -를 붙일 경우 역정렬이 가능

 

filter()

모델 객체를 필터링하며, 다양한 옵션을 넣을 수 있다

get은 조건에 해당하는 한 개의 객체를 반환하지만, filter()은 조건에 해당하는 여러 개의 queryset을 반환

 

[Lookup Filter]

  • exact : 정확한 값과 일치하는 레코드
  • contains : 특정 문자가 포함된 레코드
  • gt, gte : 값이 주어진 값보다 크거나 같은 big 레코드
  • lt, lte : 값이 주어진 값보다 작거나 같은 small 레코드
  • startswith : 특정 문자열로 시작하는 레코드
  • endswith : 특정 문자열로 끝나는 레코드
  • date, year, month, day, week, time, hour, minute, second 날짜 및 시간 필터링

ORM chaining

여러 메소드를 '.'을 이용해 묶어서 사용하는 것을 말함.

ex1. 2022년에 작성된 글들 내림차순 정렬
ex2. 작가 정보를 가져온 다음 해당 작가가 쓴 글 필터링

ORM slicing

쿼리 셋에 슬라이싱을 적용하여 여러 데이터 중 일부만 가져올 수 있음

페이지네이션
정렬된 결과의 일부분


CRUD 구조

이 구조를 살펴보기 전에 HTTP request method를 잠깐 복습해보자!

[HTTP request method]

GET

: 특정한 리소스를 읽어와야할 때 사용되는 메소드

content나 payload를 담지 않는 것이 바람직.

POST

: 서버로 데이터를 전송할 때 사용되는 메소드

content-type으로 요청 본문의 유형을 나타냄

보통 html 양식을 통해 서버에 전달되며, 서버에 변경사항을 만듦.

DELETE

: 특정한 리소스를 지워야할 때 사용되는 메소드

PUT

: 새로운 리소스를 생성하거나 수정해야할 때 사용되는 메소드 POST와 비슷

여러번 요청해도 같은 결과를 반환 (idempotent)

 

C reate

데이터 생성

ORM을 사용하여 모델 인스턴스를 생성하고 이를 데이터베이스에 저장

save()를 통해 따로 저장하거나 create()를 써서 한 번에 생성 및 저장하기도 함.

R ead

데이터 읽어오기

django orm의 queryset을 이용하여 수행

all(), filter(), get() 메소드 등을 사용

U pdate

데이터 수정

해당 객체를 조회한 후, 원하는 필드를 변경하고 .save() 메소드를 호출하여 변경 사항을 저장

D elete

데이터 삭제

삭제하려는 모델 객체를 조회한 후, 이를 지정하여 delete() 메소드로 삭제

 


POSTMAN - API 테스트 tool (과제)

포스트맨을 사용하기 전에, 기본 용어부터 알아보자.

API?
Application Programming Interface
고유한 기능을 가진 모든 소프트웨어 두 개가 있다고 가정할 때. (애플리케이션 두개)
두 애플리케이션이 요청(Request)과 응답(Response)을 사용하여 서로 통신하는 방법이다.

API 종류
1. SOAP API - 단순 객체 접근 프로토콜
2. RPC API - 원격 프로시저 호출
3. Websocket API - JSON 객체를 사용하여 데이터를 전달하는 최신 웹 API
4. REST API - 오늘날 웹에서 볼 수 있는 가장 많이 사용되는 유연한 API
       * 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고
         출력 데이터를 다시 클라이언트에 반환.

 

REST API?
Representational State Transfer
Rest는 클라이언트가 서버 데이터에 액세스하는데
사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의
클라이언트와 서버는 HTTP를 사용하여 데이터를 교환함.
주된 특징은 무상태
* 무상태란
      서버가 요청 간에 클라이언트 데이터를 저장하지 않음

 

포스트맨은 API 개발 및 테스트를 위한 협업 도구이므로 웹 개발할 때 유용하게 사용가능하다.

벡엔드 코드를 작성하고, 굳이 프론트에서 요청코드 작성해서 테스트하지않아도됨.

API 테스트뿐만 아니라 디버깅, 문서화도 가능 

💡언제 사용?
프론트 개발 - 화면을 개발하기 전에 백엔드에 테스트로 요청을 보낼 수 있어서 데이터가 어떤 형식인지 확인가능
백엔드 개발 - 프론트엔드 코드 작성없이 개발한 API를 바로 테스트가능

 

1. 포스트맨 다운로드

https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 30 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

다운로드 후 화면

나는 계속 사용할 것 같아서 데스크 탑 앱으로 다운받았다.

 

2. 테스트용 API 준비

요청하고 응답받을 서버가 필요한데, 만일 따로 서버가 준비되어있지 않아도 간단하게 Http request와 response의 동작을 확인할 수 있도록 서비스를 제공해주는 도메인들이 있다.

https://httpbin.org/

https://jsonplaceholder.typicode.com/

난  두번째 링크로 시도해보겠음.

 

3. 포스트맨 실행

  3-1. Workspaces 생성 - 새로 워크스페이스를 생성하거나 기본적으로 만들어져있는 My Workspace에 진입

 

  3-2. Collecition 생성

    3-2-1 HTTP Request : 간단하게 요청 하나 테스트할 때

    3-2-2 Collection : 요청들을 체계적으로 그룹화하여 관리할 때

  3-3. folder 생성

  3-4. Request 생성 - 실제로 API에 대한 테스트를 진행하기 위해서는 Request를 생성해줘야 함.

  3-5. GET 요청 보내기

get으로 send결과
쿼리 파라미터 추가

  3-6. POST요청 보내기

Body 부분
Headers 부분
저장

 

POST send 후 결과

 

  3-7. 성능 지표보기

 

  3-8. 전체 테스트 실행

 


GDSC에서 배운 내용말고도 더 조사해서 추가했습니다!

참고

https://hyunki99.tistory.com/93

https://binit.tistory.com/17

https://inpa.tistory.com/entry/POSTMAN-%F0%9F%92%BD-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A7%A8-%EC%82%AC%EC%9A%A9%EB%B2%95-API-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94-%EA%B3%A0%EA%B8%89-%ED%99%9C%EC%9A%A9%EA%B9%8C%EC%A7%80

 

 

 

 

728x90