파이썬 웹개발

[장고 설계철학으로 시작하는 파이썬 장고 입문] 2. django 핵심 설계철학

냄비짱 2024. 1. 19. 01:08
728x90

 

 1. 장고 프롤로그

1) 마감 시간이 있는 완벽주의자를 위한 웹 프레임워크

2) 바퀴를 다시 발명하지 마라

3) 시간이 가장 큰 비용이니, 장고를 누리고 시간을 아껴라

4) 고유한 개념 및 데이터는 한 곳에.

5) 중복(redundancy)은 X, 정규화(Normalization)은 O

2. 장고의 설계 철학

1) 일반

(1) 신속한 개발 : 21세기 웹 프레임워크의 핵심은 지루한 부분을 빠르게 만드는 것

(2) 느슨한 결합 : 장고 스택의 근본적인 목표는  "느슨한 결합, 탄탄한 응집"

(3) 적은 코드 : 반복을 줄이고, 가능한 최소한의 코드를 사용하며, 다른 언어/프레임워크의 틀에 박힌 코드를 배제

(4) 반복하지 않기 : 중복은 줄이고, 정규화를 지향 / 파이썬의 특성을 활용하여 반복을 축소 / 반복되는 함수 기반 뷰를 클래스 기반 뷰로 축소

(5) 명시적인 것이 묵시적인 것보다 낮다 : PEP 20에 기술된 Python 핵심 원칙

2) 뷰(View)

(1) 단순성 : 뷰를 작성하는 것은 함수를 작성하는 것만큼 단순하고 직관적이어야한다.

(2) 요청 객체의 사용 : 요청(request) 객체 (HttpRequest 타입)는 장고에서 자동으로 생성하여, 뷰에 명시적으로 전달

(3) 템플릿 시스템과의 느슨한 결합 : 명시적으로 템플릿 시스템을 호출하여, 필요한 문자열을 렌더링

(4) GET과 POST를 구분 : 일반적으로 조회 목적으로는 GET 방식을, 생성/수정/삭제 목적으로는 POST 방식을 사용

 

3) URL 설계

(1) 뷰와 URL의 느슨한 결합 : 뷰 구현에 직접 URL을 매핑하지 않고, URL 매핑을 뷰 구현과 따로 처리

(2) 엄격한 URL 패턴 : URL 문자열 패턴에 정규표현식을 지원하기에 보다 엄격한 URL 패턴이 가능

(3) 모범 사례를 장려 : 보다 가독성 높게 URL 패턴을 정의할 수 있도록 도와줌

(4) 명확한 URL : 검색엔진이 혼동하지 않도록 URL을 정규화하는 옵션이 기본 활성화

4) 템플릿 시스템

(1) 템플릿 언어는 간결해야 한다 : 프로그래머가 아닌 디자이너가 작성하는 것을 전제로 한다.

(2) HTML 조합에서 자주 사용 : 브라우저 요청에서는 HTML 문자열 응답이 대부분 / render API를 통해 손쉽게 HttpResponse 응답을 만들어낸다.

(3) 다양한 문자열을 조합할 수 있도록 설계 : 복잡한 문자열을 단순히 언어의 기본 기능만으로 조합하는 것은 어려움

(4)  템플릿 파일은 HTML 파일이 아니다 : HTML 포맷 뿐만 아니라, 어떠한 문자열 조합에도 활용될 수 있다.

(5) 스파게티 개발을 원척적으로 봉쇄 : Stupid 템플릿 시스템으로 템플릿 시스템은 구현이 아닌 표현을 제어하는 도구

(6) 안전과 보안 : 템플릿 시스템은 DB 레코드를 삭제하는 명령과 같은 악의적 코드를 포함할 수 없어야한다.

(7) 중복을 배제 : 대다수 동적 웹사이트는 공통 헤더, 푸터, 네비게이션 바와 같은 공통 디자인을 가진다.

                            템플릿 상속을 통해 중복을 제거할 수 있다, 상속은 여러 계층으로 이뤄질 수 있다.

(8) 확장성 : 템플릿 태그/필터 문법은 단순하기에 HTML을 읽고 쓸 수 있다면 손쉽게 활용 가능

                    써드파티 템플릿/필터 라이브러리를 통해, 템플릿 시스템은 더욱 확장된다.

5) 모델(Model)

 

6) 데이터베이스 API