Django는?

💡 Tips Django의 국제음성기호는 ˈdʒæŋgoʊ로, 한글로 표시하면 쟁고이지만 국내에서는 대부분 장고라 발음한다.

Django 는 파이썬으로 작성된 웹 프레임워크이다. 프레임워크란, 반복적으로 사용되는 특정 기술을 모아놓은 도구상자와 같은 기능을 말한다. 이렇게 설명하면 직관적으로 이해가 되지 않을테니, 예를 하나 들어보자.

우리가 자주 들어가는 웹 사이트를 생각해보자. 예를 들어, 여러 쇼핑몰 사이트들이 있을 수 있겠다. 대부분의 쇼핑몰에서는 회원가입, 로그인, 사용자 정보 수정, 장바구니, 결제 등등의 공통적인 기능들을 제공한다.

인터넷 상에는 아주 많은 쇼핑몰 사이트가 있다. 각각의 쇼핑몰을 구현할 때 항상 처음부터 끝까지의 모든 기능들을 개발한다면, 각각의 사이트마다 매우 유사한 회원가입과 로그인 기능을 매번 만들어야한다.

만약 회사이름만 채워넣으면 해당 기업명으로 회원가입 기능을 구현할 수 있는 기반이 되는 코드가 공유되고 있다면, 각각의 쇼핑몰 사이트 개발자들은 해당 코드를 사용해서 쉽게 회원가입 기능을 만들 수 있을 것이다. 이러한 기능(코드조각)들을 모아놓은 코드집합을 프레임워크라고 부른다.

Django는 프레임워크로서 웹 사이트를 만들기 위해 일반적으로 필요로 하는 기능들을 가지고 있다.

Django의 핵심기능

Django가 가진 기능들은 몇 페이지로 요약하기 힘들 정도로 많으나, 여기서는 쉽게 이해할 수 있으면서도 중요한 기능들을 몇 개 소개한다.

데이터베이스 관리

데이터베이스(Database), 줄여서 DB라고도 하는 단어를 들어보았을 것이다. 컴퓨터에서 정보들을 저장하고, 불러오며, 저장된 정보들을 찾기 위한 저장소이다.

웹 사이트를 구성할 때, 데이터베이스에 정보를 입력하고, 저장되어있는 정보들을 특정 조건에 따라 다시 가져오는 작업은 필수적인 작업이지만, 입문자에게는 어려운 일이다. Django는 데이터베이스에 정보를 저장하고, 불러오기 위한 일관적이며 쉬운 방법을 제공한다.

강력한 관리자 기능

어떠한 웹 사이트를 운영하든, 개발자가 모든 데이터를 관리할수는 없다. 시스템의 설계는 개발자가 맡지만, 운영되고 있는 사이트의 데이터는 내부 관리인력이 다루기 마련이고, 그 사람들은 대부분의 경우 데이터베이스를 다루지 못한다(앞서 말했듯, 데이터베이스를 직접 조작하는 것은 꽤 어려운 일에 속한다).

그러므로 개발자는 내부 인력이 데이터베이스의 정보들을 조회하고, 추가/수정/삭제할 수 있는 관리자페이지를 개발해서 제공해야 한다. 이 관리자 페이지를 제작하는 것은 유사한 페이지를 반복적으로 만들어야 하는 소모적인 작업이며, 많은 개발자들은 관리자 페이지를 제작하는 반복작업을 그다지 좋아하지 않는다.

Django는 처음부터 이 관리자 기능에 중점을 두고 만들어졌다. 실제로 전혀 노력하지 않아도 꽤 쓸만한 수준의 데이터베이스 조회/추가/수정/삭제 기능을 제공하며, 약간의 수정만으로도 실제 운영되는 서비스에서도 사용할 만 한 관리자 페이지를 자동으로 생성해준다.

웹 프로그래밍 세계에는 많은 프레임워크들이 있지만, 필자는 Django의 관리자 기능이야말로 지금까지 Django가 도태되지않고 계속해서 사랑받고 있는 가장 중요한 두 이유 중 하나라고 여긴다. (나머지 하나는, Django가 인기있는 언어인 파이썬으로 작성되었다는점이다)

보안

해킹으로 개인정보가 유출되었다거나, 랜섬웨어에 피해를 입은 뉴스들을 보았을 것이다. 비 개발자의 시선에서는 공격한 해커들이 대단한 기술을 사용했다고 생각 할 수 있지만, 대부분의 경우에는 해당 사이트에서 보안을 위해 반드시 지켜야 할 사항들을 무시한 결과이다.

하지만 이 반드시 지켜야 할 사항들은 굉장히 많다. 인터넷은 오래전에 개발 된 기술이며, 인터넷이 개발 될 때는 해킹과 같은 악성 행위에 대한 대책이 정확히 마련되지 않은 상태였다. 추후 여러가지 보안기술이 추가되었고, 그 덕에 지금 우리는 안전한 웹 서핑을 할 수 있게 된 것이다.

입문자가 이런 보안기술들을 모두 신경쓰며 개발하기는 어려운 일이다. 예를 들어, 이 책을 읽는 독자가 개발을 처음 접하는 입문자라면, 아래와 같은 사실을 전혀 몰랐을 수 있다.

  • 당신이 가입한 사이트의 서버 관리자는 당신 계정의 비밀번호를 모른다. (서버에는 비밀번호가 암호화되어 저장되며, 이를 복호화 하는것은 불가능하다)
  • 당신이 누군가의 공유기를 사용해서 무선 인터넷을 하고 있다면, 특정 사이트(모든 사이트는 아니다)에서 로그인 할 경우 해당 ID/PW를 공유기의 소유자가 직접 볼 수 있다. (그러므로 잘 모르는 공개 Wi-Fi를 사용할때는 주의해야한다)
  • 당신의 개인컴퓨터가 인터넷에 연결되어 있다면, 그 컴퓨터에는 무수한 해킹시도가 24시간 일어나고있다. 다만, 당신의 컴퓨터는 정보를 “제공”하는 목적이 아닌 “사용”하기 위한 설정만 되어있으며, 그로인해 그 시도가 무위로 돌아갈 뿐이다. (대부분의 개인용 컴퓨터는 정보를 “제공”하는 기능을 OFF시킨 상태로 설정되어있으므로, 해킹시도 자체를 원천적으로 차단한다)

Django는 다양한 보안장치를 기본적으로 탑재하고 있으며, 숙련자의 경우 자신이 원하는대로 보안 요소들을 쉽게 추가할 수 있게 설계되어있다. 실제로, Django가 제공하는 기능을 굳이 비활성화 하지 않는다면, Django가 관리하는 영역의 보안은 크게 신경쓰지 않아도 될 정도이다.

다양한 내장 기능과 파이썬 확장기능

Django는 웹 사이트를 만들기 위해 필요한 많은 내장 기능들을 가지고 있다. 그 중에는 입문자의 입장에서는 무엇인지 알기 힘든 항목도 있으니, 누구나 알 수 있는 기능들만 추려서 나열해보겠다.

  • 데이터베이스 관리
  • 이메일 전송
  • 언어별 번역관리
  • 로그인/회원가입/비밀번호 변경 등의 인증
  • RSS피드 / 검색엔진을 위한 Sitemap 생성
  • CSV, PDF생성 기능

Django는 자체적으로 탑재된 내장기능과 함께, 유연하게 확장기능을 추가 할 수 있다. 파이썬의 최대 강점은 수많은 확장 기능 프로젝트(일반적으로, 이를 라이브러리라고 부른다)들을 가지고 있다는 것이다. 여러분이 상상할 수 있는 거의 모든 기능들은 이미 파이썬과 Django확장 프로그램에 존재할 것이다. 자신의 사이트를 만들고 싶은 사람들이 구현하고 싶어하는 기능들로 예를 들면,

  • 문자메시지 보내기
  • 채팅
  • 온라인 결제
  • WYSIWYG 에디터
  • 모바일 앱(안드로이드, iOS)에 푸시메시지 발송

등등이 있다. Django의 최대 장점은, 이러한 파이썬 라이브러리(확장기능)을 자유자재로 사용 할 수 있다는 것이다.