의견.png

"장고"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(특징)
36번째 줄: 36번째 줄:
 
*다국어 지원
 
*다국어 지원
 
장고는 동일한 소스코드를 다른 나라에서도 사용할 수 있도록 텍스트이 번역, 날짜/시간/숫자의 포맷, 타임존의 지정 등과 같은 다국어 환경을 제공한다. 간단한 작업만으로 메시지를 하나 이상의 언어로 번역해주기 때문에 다국어를 제공하는 웹 사이트에서 유용하게 사용이 가능하다.<ref name="특징2">한빛미디어, 〈[https://post.naver.com/viewer/postView.nhn?volumeNo=17705170&memberNo=25379965 파이썬 웹 프레임워크, "장고(Django)의 특징 9가지"]〉, 《네이버 포스트》, 2019-01-28</ref>
 
장고는 동일한 소스코드를 다른 나라에서도 사용할 수 있도록 텍스트이 번역, 날짜/시간/숫자의 포맷, 타임존의 지정 등과 같은 다국어 환경을 제공한다. 간단한 작업만으로 메시지를 하나 이상의 언어로 번역해주기 때문에 다국어를 제공하는 웹 사이트에서 유용하게 사용이 가능하다.<ref name="특징2">한빛미디어, 〈[https://post.naver.com/viewer/postView.nhn?volumeNo=17705170&memberNo=25379965 파이썬 웹 프레임워크, "장고(Django)의 특징 9가지"]〉, 《네이버 포스트》, 2019-01-28</ref>
 +
 +
==설계 원칙==
 +
;일반사항
 +
*약한 결합(Loose coupling)
 +
*경량 코드(Less code)
 +
*신속 개발(Quick development)
 +
*반복 방지(DRY, Don't Repeat Yourself)
 +
*암시보다는 명시적으로 표현(Explicit is better than implicit)
 +
*일관성(Consistency)
 +
 +
;모델
 +
*암시보다는 명시적으로 표현(Explicit is better than implicit)
 +
*관련 도메인 로직을 모두 포함(Include all relevant domain logic)
 +
;데이터베이스 API
 +
*SQL 효율성(SQL efficiency)
 +
*간결하고 강력한 문법(Terse, powerful syntax)
 +
*필요 시 쉽게 작성할 수 있는 SQL(Option to drop into raw SQL easily, when needed
 +
 +
;URL 설계
 +
*약한 결합(Loose coupling)
 +
*제약없는 유연설(Infinite flexibility)
 +
*베스트 프랙티스 권장(Encourage best practices)
 +
*결정적인 URL(Definitive URLs)
 +
 +
;템플릿 시스템
 +
*표현과 로직의 분리(Separate logic from presentation)
 +
*중복 배제(Discourage redundancy)
 +
*HTML과 분리(Be decoupled from HTML)
 +
*템플릿 언어로 XML 금지(XML should not be used for template languages)
 +
*디자이너의 능력 가정(Assume designer competence)
 +
*여백을 확실하게 처리(Treat whitespace obviously)
 +
*프로그래밍 언어를 만들지 말자(Don't invent a programming language)
 +
*안정성과 보안(Safety and security)
 +
*확장성(Extensibility)
 +
 +
;뷰
 +
*간단함(Simplicity)
 +
*요청 객체의 사용(Use request objects)
 +
*약한 결합(Loose coupling)
 +
*GET, POST 간 차이(Differentiate between GET and POST)
 +
 +
;캐시 시스템
 +
*경량 코드(Less code)
 +
*일관성(Consistency)
 +
*확장성(Extensibility)
  
 
==코드==
 
==코드==

2019년 8월 20일 (화) 13:52 판

장고(Django)는 파이썬(Python) 언어를 사용하여 웹 애플리케이션과 웹 서비스를 개발하기 위해 사용하는 표준 프레임워크이다.

개요

장고는 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크로 모델-뷰-컨트롤러(MVC) 패턴을 따르고 있다. 파이썬 기반 웹 프레임워크 중 가장 널리 퍼져 있다. 보안이 우수하고 유지보수가 편하며 고도의 데이터베이스 기반 웹사이트를 작정하는데 있어서 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어져 있다. 장고는 콤포넌트의 재사용성과 플러그인화 가능성, 빠른 개발 등을 강조하며 중복배제 DRY의 원리를 따른다. 훌륭한 개발자에 의해 만들어진 이 프레임워크는 웹 개발을 하는데 많은 도움을 주기 때문에 새롭게 웹 개발을 시작할 필요없이 그저 프레임워크를 활용하여 앱 개발에만 집중할 수 있다. 활발한 커뮤니티들이 있어 좋은 참고자료와 무료 및 유료 지원을 하는 옵션들이 제공된다.[1] 현재는 장고 소프트웨어 재단에 의해 관리되고 있다.

역사

초기에 웹 개발자들은 수작업으로 모든 웹페이지를 작성했다. 웹사이트를 수정하기 위해 HTML을 직접 수정했다. 웹 사이트가 성장할수록 웹페이지 접근이 까다롭고 시간이 많이 소요되며 처리가 불가능할 정도가 됐다. 최초의 그래픽 웹브라우저인 모자이크를 개발한 연구소 NCSA의 그룹이 웹서버가 동적으로 HTML을 생성할 수 있는 외부 프로그램을 생성하게해 이 문제를 해결했다. 이 프로토콜을 CGI라 불렀다. CGI의 개발이 1세대 동적 웹사이트를 선도했지만 자체적으로 문제를 안고있다. 많은 반복적인 상용구 코드를 포함해야 하고 코드 재사용을 어렵게 만들고 처음보는 개발자가 작성하거나 이해하기 어렵다. 그래서 나온게 PHP프로토콜이다. PHP는 이러한 많은 문제를 해결했고 현재까지도 동적 웹사이트를 만드는 데 많이 사용되는 도구이며. 비슷한 수 많은 언어들이 PHP의 설계를 따른다. 하지만 PHP도 사용하기가 매우 쉽고 반복적이며 엉성한 코드가 만들어지고 보안 취약성을 보호하는 기능이 없다. 이러한 문제가 현재의 3세대 웹개발 프레임워크 개발에 기여했고, 장고는 이 문제들을 해결하기 위해 개발되었다.[2]

장고는 2003년 ~ 2004년에 로렌스 저널-월드(Lawrence Journal-World)라는 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티(Adrian Holovaty)와 사이먼 윌리슨(Simon Willison)이 파이썬을 이용해 애플리케이션을 만들기 시작하면서 처음 개발되었다. 여러 지역 뉴스 웹 사이트의 제작 및 유지보수를 담당하는 로렌스는 기사 마감 시한을 맞춰야 하기 때문에 관리자는 웹 사이트에 여러 기능들을 추가해야 하고 전체 프로그램은 며칠 또는 한 시간만에 빠르게 구축해야 했다. 그래서 사이먼과 홀로바티는 시간을 절약할 수 있는 웹 개발 프레임워크 개발이 필요했다. 당시 로렌스 신문사의 웹사이트는 PHP 기반으로 쓰여졌는데, 홀로바티와 윌리슨은 당시 PHP가 규모가 큰 웹사이트에 적합하지 않다고 생각했고 평소에 관심을 가지고 있던 파이썬으로 웹 개발을 했다. 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 새롭게 장고를 개발하게 된 것이다.

장고는 2008년 9월 첫 번재 주요 릴리즈 1.0에서부터 2017년의 최근 버전 2.0까지 발전했다. 장고는 각각의 버전에서 기능을 추가하고 버그를 수정했다. 새로운 유형의 데이터베이스, 탬플릿 엔진들 그리고 캐싱에 대한 지원에서부터 일반 보기 함수와 클래스들의 추가 기능을 만들어 프로그래밍 작업을 위해 개발자들이 작성해야 할 코드를 줄여주었다. 장고는 수많은 사용자와 기여자가 있는 협력적이고 번성하는 프로젝트다. 여전히 몇 가지 장고만의 특징이 있지만 장고는 모든 유형의 웹 사이트를 개발할 수 있는 다용도적인 웹 프레임워크로 발전했다.[1]

특징

  • MTV 개발 방식

장고는 MTV 방식을 기반으로 하는 프레임 워크다. MTV는 Model-Template-View의 약자로 웹 프로그래밍 영역을 3가지 개념으로 나누어 개발하는 방식이다. 모델(Model)은 테이블을 정의하는 영역, 템플릿(Template)는 사용자가 보게 될 화면의 모습을 정의하는 영역, 뷰(View)는 애플리케이션의 제어 흐름 및 처리 로직을 정의하는 영역이다. 이렇게 개발을 하게 되면 모델, 템플릿, 뷰 모듈 간에 독립성을 유지하며 디자이너, 응용 개발자, DB 설계자 간에 협업도 쉬워진다.[3]

  • 객체 관계 매핑

장고의 객체 관계 매핑은 데이터베이스 시스템과 데이터 모델 클래스를 연결하는 다리와 같은 역할을 한다. 이런 ORM 기능을 통해 다양한 데이터베이스 시스템을 지원하고 있으며, 이미 구축한 데이터베이스 시스템을 다른 데이터베이스로 변경하는 경우에도 설정을 조금만 변경하면 가능해 쉽고 편리하다.

  • URL 설계

웹 프로그램이에서 URL 디자인은 필수다. 장고에서는 유연하면서도 강력한 기능을 제공하낟. 장고는 우아한 URL 방식을 채택하여 URL을 직관적이고 쉽게 표현할 수 있다. 또한 정규 표현식을 사용하여 복잡한 URL도 표현할 수 있으며, 각 URL 형태를 파이썬 함수에 1:1로 연결할 수 있도록 되어있어 개발이 편리하며, 이해하기도 쉽다.

  • 캐시 시스템

동적인 페이지를 만들기 위해서는 데이터베이스 쿼리를 수행하고 템플릿을 해석하면, 관련 로직을 실행해서 페이지를 생성하는 일은 서버에 엄청난 부하를 주는 작업이다. 그래서 캐시 시스템을 사용하여 자주 이용되는 내용을 저장해 두었다가 재사용하면 성능을 높일 수 있는데, 장고의 캐시 시스템은 캐시용 페이지를 메모리, 데이터베이스 내부, 파일 시스템 중 아무 곳에나 저장할 수 있다. 또한 캐시 단위를 페이지에서부터 사이트 전체 또는 특정 뷰의 결과, 템플릿의 일부 영역만을 지정하여 저장해둘 수도 있다.

  • 풍부한 개발 환경

장고는 개발에 도움이 될 수 있는 여러 가지 환경을 제공한다. 대표적으로 테스트용 웹 서버를 포함하고 있어서 개발 과정에서 아파치 등의 웹 서버가 없어도 테스트를 진행할 수 있다. 또한 디버깅 모드를 사용할 경우에는 에러를 쉽게 파악하고 해결할 수 있도록 아주 상세한 메시지를 보여준다.

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

장고는 웹 서버의 콘텐츠, 즉 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공한다. 이런 관리자 화면을 통해서 애플리케이션에서 사용하는 데이터들을 쉽게 생성하거나 변경할 수 있으며, 개발자가 별도로 관리 기능을 개발할 필요도 없다.

  • 자체 템플릿 시스템

장고는 내부적으로 확장이 가능하고 디자인이 쉬운 강력한 템플릿 시스템을 가지고 있다. 이를 통해 화면 디자인과 로직에 대한 코딩을 분리하여 독립적으로 개발 진행이 가능하다. 장고의 템플릿 시스템은 HTML과 같은 텍스트형 언어를 쉽게 다룰 수 있도록 개발되었다.

  • 다국어 지원

장고는 동일한 소스코드를 다른 나라에서도 사용할 수 있도록 텍스트이 번역, 날짜/시간/숫자의 포맷, 타임존의 지정 등과 같은 다국어 환경을 제공한다. 간단한 작업만으로 메시지를 하나 이상의 언어로 번역해주기 때문에 다국어를 제공하는 웹 사이트에서 유용하게 사용이 가능하다.[4]

설계 원칙

일반사항
  • 약한 결합(Loose coupling)
  • 경량 코드(Less code)
  • 신속 개발(Quick development)
  • 반복 방지(DRY, Don't Repeat Yourself)
  • 암시보다는 명시적으로 표현(Explicit is better than implicit)
  • 일관성(Consistency)
모델
  • 암시보다는 명시적으로 표현(Explicit is better than implicit)
  • 관련 도메인 로직을 모두 포함(Include all relevant domain logic)
데이터베이스 API
  • SQL 효율성(SQL efficiency)
  • 간결하고 강력한 문법(Terse, powerful syntax)
  • 필요 시 쉽게 작성할 수 있는 SQL(Option to drop into raw SQL easily, when needed
URL 설계
  • 약한 결합(Loose coupling)
  • 제약없는 유연설(Infinite flexibility)
  • 베스트 프랙티스 권장(Encourage best practices)
  • 결정적인 URL(Definitive URLs)
템플릿 시스템
  • 표현과 로직의 분리(Separate logic from presentation)
  • 중복 배제(Discourage redundancy)
  • HTML과 분리(Be decoupled from HTML)
  • 템플릿 언어로 XML 금지(XML should not be used for template languages)
  • 디자이너의 능력 가정(Assume designer competence)
  • 여백을 확실하게 처리(Treat whitespace obviously)
  • 프로그래밍 언어를 만들지 말자(Don't invent a programming language)
  • 안정성과 보안(Safety and security)
  • 확장성(Extensibility)
  • 간단함(Simplicity)
  • 요청 객체의 사용(Use request objects)
  • 약한 결합(Loose coupling)
  • GET, POST 간 차이(Differentiate between GET and POST)
캐시 시스템
  • 경량 코드(Less code)
  • 일관성(Consistency)
  • 확장성(Extensibility)

코드

각주

  1. 1.0 1.1 skim0726, 〈Django 소개〉, 《MDN 웹 문서》, 2019-05-17
  2. 김땡땡, 〈장고 마스터하기 - 1장〉, 《김땡땡의 블로그》, 2018-09-10
  3. Pydjango, 〈Django - 일반적인 특징〉, 《티스토리》, 2016-09-01
  4. 한빛미디어, 〈파이썬 웹 프레임워크, "장고(Django)의 특징 9가지"〉, 《네이버 포스트》, 2019-01-28

참고자료

같이 보기

  의견.png 이 장고 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.