Django

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

개요

소개

 Django[장고]는 Python으로 만들어진 오픈소스 웹 애플리케이션 프레임워크(Web Application Framework)입니다. 단순한 문법을 지향하는 Python 철학에 기반해 빠르고 간단하게 웹 애플리케이션을 구축할 수 있습니다. 로그인/로그아웃, 페이지 네비게이션, 데이터베이스 액세스 등 웹 프로그래밍에서 빈번하게 사용되는 기능들이 고수준으로 추상화되어 있어 생산성이 상당히 높습니다.

추상화
 컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. - 위키백과
 예를 들어 C 언어의 문자열 처리처럼 아주 저레벨의 작업들을 Java에서는 String이라는 클래스로
 생산성
 컴퓨터 프로그래밍에서 생산성은 보다 적은 개발 노력으로 보다 많은 작업 결과를 만드는 정도를 뜻한다.
 메모장으로 HTML 문서 작성 : 생산성이 낮다.
 VSCode 등 전문 에디터로 HTML 문서 작성 : 생산성이 높다.

Django로 만들어진 주요 웹 사이트

 아직 국내 Django 프레임워크 개발 수요는 그리 많지 않습니다. 높은 생산성 때문에 주로 스타트업에서 채택하고 있습니다.

웹 애플리케이션 프레임워크(Web Application Framework)

그렇다면 웹 애플리케이션 프레임워크란 무엇일까요? 먼저 웹 애플리케이션이란 줄여서 웹 앱(Web App)이라고도 하는데요, 우리가 스마트폰에서 설치해 사용하는 소프트웨어를 앱이라 하듯이 웹(인터넷)에서 우리가 사용하는 동적인 웹 사이트를 웹 애플리케이션이라 칭합니다. (동적인 웹이란 용어는 나중에 설명해드릴께요.) 그리고 프레임워크란 사전적 의미로 '뼈대'라는 의미를 갖고 있는데요. 웹이 작동하는 동안 일어나는 여러 기능이나 구조들을 분리하여 개발자가 쉽게 유지보수 가능하게 하도록 도와주는 도구입니다. 말로만 들어보면 꼭 도입해야할 좋은 기술이죠? 하지만 비전공자 입장에서 Python을 갓 배운 현 시점에 Django 프레임워크를 얹어서 처음 프로그래밍을 시작하는 것은 프레임워크의 사용법도 배워야하는 짐으로 느껴질 수가 있습니다. 이미 단 기간동안 HTML/CSS/Python을 배운 것 만으로도 벅찬데! 그래서 Django를 배우실 때는 새로운 기술을 배운다 생각하지 마시고 프레임워크라는 개념에도 너무 얽매이지 말아주셨으면 좋겠습니다. 그냥 Python으로 웹을 만들려면 이렇게 하면 되는구나~ 정도로 가볍게 받아주세요!

소개 부분을 커버로 올리기

https://opentutorials.org/module/384/4332

프레임워크의 역할

  • 중복의 제거

 프레임워크를 소개할 때 웹이 작동하게 하는 기능들을 분리시켜준다고 했습니다. 구체적인 예를 들어볼까요? 우리가 예전 HTML 시간에 만들었던 예제를 다시 VSCode로 열어 봅시다.

<ol>
  <li><a href="1.html">기술소개</a></li>
  <li><a href="2.html">기본문법</a></li>
  <li><a href="3.html">하이퍼텍스트와 속성</a></li>
  <li><a href="4.html">리스트와 태그의 중첩</a></li>
</ol>

 이 부분은 index.html 파일에 보이는 차례를 링크로 연결시켜 둔 코드입니다. 생활코딩의 egoing님도 수차례 언급했지만, 우리는 개발을 하면서 처음에는 귀찮고 힘들더라도 항상 구조적으로 작성해야 한다고 했죠. 저 링크가 지금은 4개지만 우리가 보여주고픈 글들이 많아지고 많아져서 40개가 된다면? 100개가 넘어간다면? 아마 코드는 다음과 같아질 것입니다.

<ol>
  <li><a href="1.html">기술소개</a></li>
  <li><a href="2.html">기본문법</a></li>
  <li><a href="3.html">하이퍼텍스트와 속성</a></li>
  <li><a href="4.html">리스트와 태그의 중첩</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
  <li><a href="xxx.html">다른 여러가지 글들...</a></li>
</ol>

 이 웹 사이트를 우리가 운영한다고 해볼까요? 하루에 한 개씩만 글을 써도 100일이면 충분한데 이 수많은 글 마지막에 자신의 프로필 사진이나 이메일주소를 넣고 싶다면 어떻게해야할까요? 저 100개의 글을 모두 다 들어가서 프로필 사진을 넣고 메일 주소를 작성하고 저장하면 되나요? 생각만 해도 너무 귀찮지 않나요?

 

 

 

 

 

 

 

 

 

 

 

중복의 제거

 우리가 저번 수업까지 HTML/CSS로 만들어봤던 홈페이지를 한 번 볼까요?

[이미지 삽입]

 모든 프로그래밍 과정에서 개발자가 항상 염두해두어야 하는 작업은 바로 "중복의 제거"입니다. 우리가 만들었던 홈페이지를 한 번 볼까요? index.html 파일과 about.html, project.html 파일을 열어 소스코드를 비교해봅시다.

[이미지 삽입]

 상단 부분과 하단 부분의 코드가 계속 반복되는 것을 발견할 수 있는데요. 이렇게 파일이 몇 개 없으면 큰 문제가 되지 않지만 만약 수 천개의 거래 글들이 보관되어 있는 네이버의 '중고나라' 사이트는 상황이 어떨까요? 갑자기 '중고나라' 운영자가 카페 이름을 '평화나라'로 변경하려고 한다면 거래 글들의 소스코드가 보관되어 있는 html 파일들을 모두 뒤져서 고쳐야 하나요? 이런 반복적인 작업은 인간이 할 수 없을 뿐더러 도중에 자칫 실수할 수도 있습니다. 이러한 단순한 반복 작업은 컴퓨터에게 시켜야 합니다. 바로 위에서 언급했던 "중복의 제거"에 관한 개념입니다. django와 같은 웹 애플리케이션 프레임워크 도구를 사용하면 반복적으로 생성되는 html 파일들을 템플릿[template]이라는 개념으로 파일을 조각 조각 나누어 필요한 조각들끼리 모아서 웹 페이지를 제공하도록 합니다. 결국 '중고나라'라는 제목 부분을 담당하는 html 파일 하나만 변경하면 모든 글들의 제목이 바뀌도록 할 수 있습니다. 이 것이 중복 제거의 힘입니다. 항상 명심하세요!

동적인 웹

 이제 아까 언급했던 동적 웹(Dynamic Web)에 대해서 설명하려 합니다. 우리가 만들었던 홈페이지 예제를 다시 살펴보면 디자인적인 부분은 일단 제외하고 실제 우리가 사용하고 있는 블로그나 게시판과 다른 점은 무엇인가요?

마치며

  이제 django가 웹 애플리케이션을 개발하는 데 어떠한 도움을 주는지 감이 오시나요?

 Python 언어를 기반으로 한 django 말고도 여러 웹 애플리케이션 프레임워크가 있습니다. Python 언어 기반 Flask 및 Tornado, Java 언어 기반의 Spring, php 언어 기반의 CodeIgniter, JavaScript 언어 기반의 Express.js, Ruby 언어 기반의 Ruby on Rails 등이 있어요. 프레임워크가 다양하긴 하지만 운영되는 구조나 원리는 비슷합니다. 프레임워크마다 성능, 생산성 등의 장단점이 있기에 개발자들이 상황에 맞게 골라서 각 프로젝트를 진행합니다. 상식으로만 알아두셔도 됩니당!
  • 봤어요 (0명)

댓글

댓글 본문
버전 관리
Hyunseok Lim
현재 버전
선택 버전
graphittie 자세히 보기