Back-End/Django
장고란?
정찡이
2022. 7. 31. 13:12
728x90
장고란?
The web framework for perfectionists with deadlines. (마감에 쫓기는 완벽주의자를 위한 웹 프레임워크)
장고는 웹 프로그램을 개발하는 데 사용하는 파이썬 웹 프레임워크다. 장고의 특징으로는 다른 프레임워크에 비하면 많은 기능이 존재한다. 예를 들어 Flask는 데이터베이스 관리, 사용자 인증 등 대부분의 것을 직접 다 개발을 해야한다.
장고의 장점
- 파이썬의 라이브러리를 사용할 수 있다.
- 오픈소스
- 기본적인 기능들을 미리 만들어 제공해 쉽고 빠르게 개발
- Full Stack Framework : front, backend 등 서버가 필요로 하는 것을 모두 Django가 맡아서 함.
장고의 단점
- 수많은 만들어진 기능을 제공하지만 원하는 대로 커스텀은 어렵다.
- 파이썬의 단점을 가진다.
- 인터프리터 언어라서 느리다는 단점
장고의 특징
1) MVT(Model-View-Template)
💡 Python의 Django 프레임워크에서 사용하는 디자인 패턴이다.
- Model ⇒ Model
- 데이터베이스에 저장되는 데이터를 CRUD 하는 부분
- View ⇒ Template
- 사용자에게 보이는 UI 부분
- Controller ⇒ View
- 프로그램의 비즈니스 로직을 구현하여 데이터를 요청 및 가져오고 가져 온 데이터를 Template에 전달
MVT 순서
- 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석
- URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 View를 결정
- View는 자신의 로직을 실행하면서 만일 데이터 베이스 처리가 필요하면 해당 모델에 요청하고 그 결과를 반환 받음
- View는 자신의 로직 처리가 끝나면 Template 을 사용하여 클라이언트에 전송할 HTML 파일을 생성
- View 는 최종 결과로 HTML 파일을 클라이언트에 보내어 응답
Django Model API
- all(): 테이블 데이터를 전부 가져옴
- value(*fields): dictionary 형태로 변환하여 데이터를 가져옴
- get(): 하나의 row만을 가져옴
- filter(): 특정 조건에 맞는 row들을 가져옴
- exclude(): 특정 조건을 제외하고 나머지 row들을 가져옴
- count(): 데이터의 개수(row의 수)를 가져옴
- order_by(): 데이터를 키에 따라 정렬하기 위해 order_by() 사용, -붙으면 내림차순
- disinct(): 중복된 값은 하나로 표시하여 필드 중복 방지
- first(): 데이터들 중 처음에 있는 row만 가져옴
- last(): 데이터들 중 마지막 row만 가져옴
- create(**kwargs): 새로운 object를 생성하는 동시에 저장. 테이블에 새로운 데이터 추가하고 생성된 instance를 반환 (insert)
- save(): 테이블에 데이터 갱신 (update)
- delete(): 테이블에 데이터 삭제
- model api를 연결해서 사용 가능
- ex) Object.objects.filter(category = 1). values()
2) 객체 관계 매핑(ORM:Object-Relation Mapping)
💡 ORM이란, 객체(Object)와 관계형 데이터베이스(Relational)을 연결(Mapping) 해 주는 것을 의미한다.⇒ 데이터베이스의 테이블을 객체(Object)와 연결하여 테이블에 CRUD를 할 때, SQL 쿼리를 사용하지 않고도, 가능하게 하는 것을 말한다.
장점
- 별도의 SQL문을 사용하지 않아도 객체 지향 프로그래밍 언어로 구현이 가능하며 이는 곧 생산성 증가로 이어진다.
- 대량의 SQL Query를 쓰지 않고도 객체 간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체간의 관계를 파악할 수 있다.
- 재사용 및 유지보수가 편리하다.
- 매핑하게 되면 정보가 명확해지기 때문에 ERD를 보는 것에 대한 의존도를 낮출 수 있다.
- ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능하다.
- DBMS에 대한 종속성이 줄어든다.
- 대부분의 ORM 프레임워크들은 DB에 종속적이지 않다. 그러므로 개발자들은 객체에 집중함으로써 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다. (여기서 종속적이라는 것은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미한다)
- DB의 마이그레이션을 쉽게 할 수 있다.
단점
- 직접 SQL문을 작성하는 것보다 상대적으로 복잡할 수가 있고 프로젝트의 복잡성이 높아질 경우 난이도가 그만큼 올라간다.
- 모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다.
- 기존의 기업들은 ORM을 고려하지 않은 DB를 사용하고 있어 ORM에 적합하게 변환하려면 많은 시간과 노력이 필요로 한다.
- DB와 바로 연결하는 것보다 초기 설정이 더 많아지거나 복잡해질 수 있다.
- DB와 ORM 프레임워크, 내부 코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.
- DB에 직접 Query문을 보내는 것이 아니기 때문에 성능 저하가 발생한다.
3) 자동으로 구성되는 관리자 화면
장고는 웹 서버의 콘텐츠, 즉 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공한다.
4) URL 설계의 유연성
장고에서는 우아한 URL 방식을 채택하여 URL을 직관적이고 쉽게 표현할 수 있다. 또한 정규 표현식을 사용하여 복잡한 URL도 표현할 수 있으며, 각 URL 형태를 파이썬 함수에 1:1로 연결할 수 있도록 되어있어 개발이 편리하며, 이해하기도 쉽다.