- 현재, Django( backend )와 vue( frontend )를 통한 팀내 웹페이지 제작중
- 팀 프로젝트 지금까지의 과정 정리 + 앞으로 진행하는 방식 정리
node ./node_modules/@vue/cli-service/bin/vue-cli-service serve
명령어로 run server)vue (client) 디렉토리 구조
Django는 ORM이라고 하는 기능을 제공합니다. ORM이란, Object-Relational Mapping의 약자로 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 의미합니다. 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 sql쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있게 해줍니다. 즉, 파이썬과 데이터베이스의 SQL사이의 통역사 역할이라는 뜻!
ORM은 SQL 쿼리문 없이도 데이터베이스의 데이터들을 다룰 수 있게되는데, Model Class를 통해서 객체를 만들고 이 객체를 통해서 DB에 접근하는 형식입니다. 하지만 저희는 직접 SQL문을 짜고 적용할 것이기 때문에 그와 관련된 RAW SQL 쿼리문을 사용해 Django 백엔드 코드를 짜는 정보를 찾아봐야합니다!
RAW SQL문을 사용해서 백엔드 환경을 구축하는 방법 관련 document
Django에서 RAW SQL문을 사용하는 방법
실제 서비스에서는 보통 ORM을 통해서 개발을 많이 진행합니다. 하지만 이 ORM의 무서운 점은 실제 안에서 어떤 쿼리문을 발생시켜서 저렇게 쉽게 쓸 수 있도록 해주는지 알 수 없습니다.(특정 명령어를 사용하면 쿼리문 볼 수 있긴함). 또한 시간이 오래걸린다는 단점이 있다고 합니다. 따라서 RAW SQL을 사용
<Django에서 RAW(원시) SQL 사용하는 법>
1. Manger.raw ()를 사용하여 원시 쿼리를 수행하고 모델 인스턴스를 반환하는 것
2. 모델 레이어를 완전히 파괴하고 사용자 정의 SQL을 직접 실행시키는 것
# 예시
def student_list(request):
# posts = Student.objects.all()
sql = "SELECT * FROM student_student"
posts = Student.objects.raw(sql)[:2]
print(posts)
#print(connection.queries)
return render(request,'output.html',{'data': posts})
하지만 위에서 얘기해듯이, 우리는 Restful API 환경을 구축해야합니다.
Restful API ???
웹 서버에서 DB 서버의 데이터도 읽어오고 사용자들이 글을 남기면 DB 서버에 저장까지 하는 기능을 모두 담당했습니다. 하지만 스마트폰이 출시되고, 어플리케이션의 등장으로 더이상 웹으로만 서비스를 제공하는 것에는 한계가 있었습니다. 따라서 HTML로 렌더링 하는 웹서버가 아닌, JSON 혹은 XML 과 같은 형식을 통해서 데이터를 다루는 별도의 API 서버가 필요했습니다.
따라서 RESTful 아키텍쳐를 HTTP Method와 함께 사용해 웹, 데스크탑 앱, 스마트폰 어플들까지 하나의 API 서버를 생성할 수 있습니다.
이 Restful API 를 만들기 위해서는 Django-rest-framework(Django 안에서 RESTful API 서버를 쉽게 만들게 도와주는 라이브러리)
에서 제공하는 Serializer
가 필요합니다.
Serializer 란?
"데이터 변환 / 직렬화 지원해줍니다."
Django의 ORM에서는 QuerySet(전달받은 모델의 객체 목록) 사용합니다.
기존 Django를 이용한 웹 개발에서 Django ORM의 Queryset은 Django template로 넘겨지며 HTML로 렌더링되어 Response로 보내지게 됩니다. 하지만 JSON으로 데이터를 보내야 하는 RESTful API는 HTML로 렌더링 되는 Django template를 사용할 수 없습니다. 따라서 이 Queryset을 JSON으로 매핑하는 과정을 거쳐야 하는데, 이 Serializer가 쿼리셋, 모델 인스턴스 등의 복잡한 데이터를 JSON,XML 등의 컨텐트 타입으로 쉽게 변환 가능한 python datatype으로 변환시켜줍니다.사용법
setting.py
의INSTALLED_APPS
에rest_framework
추가api/serializers.py
생성 후 내용 작성api/views.py
에api/serializers.py
import 후 모델 생성api/urls.py
의 url 매핑
django 프로젝트에 mysql 을 연결하고 잘 실행되는지 확인해야합니다.
참고 블로그 링크1
참고 블로그 링크2
참고 블로그 링크3
참고 블로그 링크4
참고 블로그 링크5
MTV 패턴은 장고의 디자인 패턴입니다. MTV 패턴은 명칭이 조금 다를 뿐이지 기본적인 골자는 MVC 패턴과 동일합니다.
models.py
html
views.py
urls.py
RAW Query 를 사용하면서, Rest Framework 환경을 구축할 수 있나요? Restful API 를 만들려면 ORM의 Serializer가 꼭 필요한 것 같은데,,
stackoverflow의 한 답변에는 아래와 같이 RAW Query를 쓰면서 Rest Framework 구축할 수 있다고 합니다.
RAW SQL문 공식 document
Manager.raw(raw_query, params=(), translations=None)
이 메서드는 원시 SQL 쿼리를 가져와 실행하고 django.db.models.query.RawQuerySet 인스턴스를 반환합니다. 이 RawQuerySet 인스턴스는 객체 인스턴스를 제공하기 위해 일반 QuerySet처럼 반복될 수 있습니다.
raw sql 사용할 때, sql injection을 주의해야한다고 함
잘못된 정보가 있을 수도 있습니다. 있다면, 댓글로 알려주세요😎
참고링크