Django란 무엇인가? API 호출 단위 (Object)와 Relation Table을 서로 맵핑해주는 웹 프로그래밍 프레임워크이다. (ORM이다.)
전체적인 프로젝트 진행 방식
기본적인 구조 api(1)를 호출 할 때와 web page(2) 를 호출 할 때, return 이 각각 다르다 .
(1) : template 리턴해준다.
(2) : data를 리턴해준다 .
nospoons.urls.py --> api.urls.py (url 패턴을 매치함) --> view.py 에서 함수 호출한다. --> models.py 파일에서 데이터 테이블을 만든다.
models.py에서 오브젝트에 대한 db테이블을 생성한다.
*models.py의 역할은? : 각 앱에 대한 데이터베이스 스키마를 정의한다.
python manage.py migrate "app_name" 을 통해 마이그레이션 한다. (마이그레이션 해줌으로써 각 앱의 데이터베이스 테이블을 생성한다.)
2. python manage.py migrate [app_name] [migration_name]
- 마이그레이션을 적용하는 명령어입니다. 즉 실제 DB에 변경사항을 적용하는 명령어라고 생각하시면 됩니다.
makemigrations와 같이 app_name을 지정해서 특정 app만 migrate 할 수 있으며 app_name 뒤에 마이그레이션 파일의 이름을 지정하면 해당 번호(버전)의 마이그레이션을 적용하게 됩니다. 즉 이전 버전으로 되돌리는 것도 가능합니다.
예시로 한번 살펴봅시다.
마이그레이션(Migration)이란?
장고 공식 문서에서는 마이그레이션이 모델의 변경 내역을 DB *스키마에 적용시키는 장고의 방법이라고 설명하고 있습니다.
장고는 ORM을 사용하기 때문에 models.py와 클래스를 통해 DB 스키마를 생성하고 컨트롤 하게 되는데, 이 때 DB 스키마를 git처럼 버전으로 나눠서 관리 할 수 있게 해 주는 시스템이라 생각하시면 됩니다.
즉 하나의 마이그레이션 파일은 해당 마이그레이션이 생성된 시점의 모델의 구조(DB의 스키마)를 담고 있습니다.
https://tibetsandfox.tistory.com/24
그럼 장고를 왜 사용할까?
Object (함수 객체)단위의 프로그래밍으로 Relational DataBase를 다루기 위해서 사용한다. (아래 링크를 참고)
https://hanamon.kr/orm%EC%9D%B4%EB%9E%80-nodejs-lib-sequelize-%EC%86%8C%EA%B0%9C/
❗️ORM 사용 이유
- OOP vs Relational Database
- 객체 지향 프로그래밍은 클래스를 이용하고 관계형 데이터베이스는 테이블을 이용하는데 객체 모델과 관계형 모델 간의 불일치가 존재한다.
- ORM을 이용해서 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다.
- ORM을 이용해서 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
- ORM을 이용해서 SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다.
- ORM을 이용해서 객체를 통해 간접적으로 데이터베이스를 다룬다.
- 이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여준다.
- 이를 통해 느슨하게 연결된, 테스트에 용이한 애플리케이션을 만들 수 있다.
1.엘라스틱 서치 데이터를 구축했다 . (filebeat로 데이터를 수집해서)
-엘라스틱 서버 포트 열기, 키바나 서버 포트 열기, 파일비츠 독자적인 수집기에서 elasticsearch 포트로 데이터 전송 했다.
2.가상환경 만들고 Django 설치 --> 기본 설정 후 특정 포트로 장고 서버 열었다.
3.장고안에 프로젝트를 만들고 그 안에 앱을 하나 만들었다 (하나의 앱은 여러가지 class(기능)을 한다. 이 기능을 하는 주체들을 Object라 한다.)
4.이 앱들은 yasg Api를 통해서 알 수 있다. (Swagger 페이지 , Swagger 페이지는 yasg 모듈에 의해 나타난다.)
https://velog.io/@emrrbs9090/DjangoSwagger-with-DRFyasg
(이 페이지 참조 해라)
이제 각 앱에 대해서 RestAPI를 통해 통신하는 메소드를 정의해야한다. 우리는 대표적으로 elasticsearch DB와 통신을 하여 그 데이터를 view.py를 거쳐서 template에 담아준 후, 홈페이지에 띄우는 실습을 진행한다.
모든 기능은 request를 매개변수로 받는다.
*여기서 질문 seettings.py에서 pagenation을 설정해주면, 어떻게 될까...?
'Django' 카테고리의 다른 글
장고 스터디 확장 (WSGI) (0) | 2023.08.16 |
---|---|
Swagger 설치법 (0) | 2023.08.14 |
장고 복습 (0) | 2023.08.14 |
Django 교육 2일차 (0) | 2023.08.08 |
Django 교육 1일차 (0) | 2023.08.07 |