'll Hacker
[WIL] 3주차, Django의 모델 및 데이터베이스 본문
MVT패턴에서 Model을 살펴보자.
MVT 패턴에 대한 설명은 아래 블로그를 참고하면 되겠다!
https://successing.tistory.com/89
데이터 구조
- 각 클래스는 데이터의 테이블과 매칭되며, 클래스 속성은 테이블의 열에 해당된다.
관계 정의
- 테이블 간의 관계정의
- 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
여러 메소드를 '.'을 이용해 묶어서 사용하는 것을 말함.
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/
나는 계속 사용할 것 같아서 데스크 탑 앱으로 다운받았다.
2. 테스트용 API 준비
요청하고 응답받을 서버가 필요한데, 만일 따로 서버가 준비되어있지 않아도 간단하게 Http request와 response의 동작을 확인할 수 있도록 서비스를 제공해주는 도메인들이 있다.
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 요청 보내기
3-6. POST요청 보내기
3-7. 성능 지표보기
3-8. 전체 테스트 실행
GDSC에서 배운 내용말고도 더 조사해서 추가했습니다!
참고
https://hyunki99.tistory.com/93
'Dev > GDSC' 카테고리의 다른 글
[WIL] 5주차, Django REST Framework(DRF) (6) | 2024.11.16 |
---|---|
[WIL] 4주차, Django 사용자 인증 시스템 (0) | 2024.10.11 |
[WIL] 2주차, Django의 MVT 아키텍처 이해 (0) | 2024.09.27 |
[WIL] 1주차, Django 기본 이해 및 환경설정 (0) | 2024.09.20 |
gdsc ewha 합격 후기 (1) | 2024.09.10 |