ORM, HTTP Method

chanloper·2024년 8월 16일

Django

목록 보기
3/8

ORM (Object-Relational-Mapping)

  • 객체-관계형-맵핑
    파이썬으로 데이터 베이스를 조작할 수 있게 해준다.
    객체 지향 언어에서는 클래스를 이용한 객체로 데이터와 기능을 캡슐화해서 다루고
    테이블과 행으로 데이터를 저장하고 관리하는데 이 두 가지 사이의 개념적인 간극을 줄인것이다.

장점
1. SQL을 잘 알지 못해도 DB조작이 가능하다.
2. SQL을 알아도 기존의 복잡한 쿼리문 작성없이 객체 지향적인 접근이 가능하다.
3. SQL을 잘 사용하지 못한다면 ORM이 변환해주는 것이 더 빠르다.
4. 생산성의 향상

단점
1. ORM에서 지원하지 않는 (복잡한) 쿼리라면 직접 작성해야 한다.
2. 서비스가 커질 수록 ORM만으로는 한계가 있을 수 있다.
3. 매우 효율적인 SQL을 작성하고 싶다면 불편할 수 있다.

Database API

Django ORM으로 Database API을 사용해서 데이터베이스를 조작하는 것이다.

Manager

모델 클래스를 생성하면 Django는 자동으로 CRUD 할 수 있는 Database API를 제공한다.
작성한 모델 클래스를 이용하여 데이터베이스 쿼리 작업을 도와주는 역할을 한다.

Queryset == ORM을 사용해서 데이터베이스로부터 전달박은 객체
매니저의 기본(default) 이름은 objects 이다.
MyModel.objects.all()

HTTP Method

GET

  • 원하는 리소스를 가져오는데에 사용한다.
  • 생성할 때도 사용할 수 있지만(로직상 문제는 없음), 하지만 리소스 조회용으로만 사용하자라는 개발세계의 약속이다.
  • DB에 변화를 주지 않는 요청임을 의미한다.
  • Read

POST

  • 서버로 데이터를 전송할 때 사용한다.
  • 특정 리소스를 생성 혹은 수정하기 위해 사용한다.
  • DB에 변화를 주는 요청임을 의미한다.
  • Create, Update, Delete

CSRF token

유저가 서버에 요청을 보낼 때 함께 제공되는 특별한 토큰 값으로, 이 토큰은 사용자의 세션과 연결되어 있다. 요청이 전송될 때, 함께 제출되며 서버는 요청을 받을 때 이 토큰을 검증하여 요청이 유효한지 확인하는 방식으로 CSRF을 방지한다.

  • 일반적으로 GET을 제외한 데이터를 변경하는 Method에 적용한다.
<form action="{%url 'create'%}" method="POST">
{% csrf_tocken %} 

</form>

Django에는 쉽게 CSRF Token 방식을 구현할 수 있게 template tag로 제공한다.

POST방식 vs GET방식

Header

  • HTTP전송에 필요한 모든 부가정보를 담고 있는 부분으로 메세지 크기, 압축 ,인증, 요청 클라이언트(웹 브라우저)정보, 서버 애플리케이션 정보,캐시 관리 정보 등등을 포함하고 있다.

BODY

  • 실제 전송할 데이터가 담겨있는 부분으로, 데이터가 없다면 비어있게 된다.

GET은 데이터를 url에 담아보내고, POST는 BODY에 담아 보낸다.
GET은 데이터 전송에 한계가 있으나, POST는 그렇지 않다.
POST방식으로 데이터를 전송할 때는 CSRF Token이 필요하다.

profile
이것 뭐에요?

0개의 댓글