ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 장고란?
    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 순서

    1. 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석
    2. URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 View를 결정
    3. View는 자신의 로직을 실행하면서 만일 데이터 베이스 처리가 필요하면 해당 모델에 요청하고 그 결과를 반환 받음
    4. View는 자신의 로직 처리가 끝나면 Template 을 사용하여 클라이언트에 전송할 HTML 파일을 생성
    5. 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 쿼리를 사용하지 않고도, 가능하게 하는 것을 말한다.

    장점

    1. 별도의 SQL문을 사용하지 않아도 객체 지향 프로그래밍 언어로 구현이 가능하며 이는 곧 생산성 증가로 이어진다. 
      • 대량의 SQL Query를 쓰지 않고도 객체 간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체간의 관계를 파악할 수 있다.
    2. 재사용 및 유지보수가 편리하다.
      • 매핑하게 되면 정보가 명확해지기 때문에 ERD를 보는 것에 대한 의존도를 낮출 수 있다.
      • ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능하다.
    3. DBMS에 대한 종속성이 줄어든다.
      • 대부분의 ORM 프레임워크들은 DB에 종속적이지 않다. 그러므로 개발자들은 객체에 집중함으로써 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다. (여기서 종속적이라는 것은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미한다)
    4. DB의 마이그레이션을 쉽게 할 수 있다.

     

    단점

    1. 직접 SQL문을 작성하는 것보다 상대적으로 복잡할 수가 있고 프로젝트의 복잡성이 높아질 경우 난이도가 그만큼 올라간다.
      • 모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다.
    2. 기존의 기업들은 ORM을 고려하지 않은 DB를 사용하고 있어 ORM에 적합하게 변환하려면 많은 시간과 노력이 필요로 한다.
    3. DB와 바로 연결하는 것보다 초기 설정이 더 많아지거나 복잡해질 수 있다.
    4. DB와 ORM 프레임워크, 내부 코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.
    5. DB에 직접 Query문을 보내는 것이 아니기 때문에 성능 저하가 발생한다.

     

    3) 자동으로 구성되는 관리자 화면

    장고는 웹 서버의 콘텐츠, 즉 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공한다.

     

    4) URL 설계의 유연성

    장고에서는 우아한 URL 방식을 채택하여 URL을 직관적이고 쉽게 표현할 수 있다. 또한 정규 표현식을 사용하여 복잡한 URL도 표현할 수 있으며, 각 URL 형태를 파이썬 함수에 1:1로 연결할 수 있도록 되어있어 개발이 편리하며, 이해하기도 쉽다.


    참고

    댓글

Designed by Tistory.