Django 소개
1. 강의에 대하여
이 강의는 인프런 'Django 베이스캠프' 강의에 기초합니다. 다만 책으로 읽기에도 문제가 없도록 설명이 추가, 생략되어 있습니다. 이점 참고하시어 학습하시기 바랍니다.
Django 베이스캠프 강의이상적인 강의 순서로는 아래와 같습니다. 다만, 아래 순서대로 학습하지 않아도 이 강의를 수강하실 수 있습니다. Django와 FastAPI는 별개의 프레임워크이기 때문에 택1로 선택하시면 됩니다.
- HTML/CSS 베이스캠프
- JavaScript 베이스캠프
- Python 베이스캠프
- (택1) FastAPI 베이스캠프
- (택1) Django 베이스캠프
- 네트워크 베이스캠프
2. Django에 대하여
Django 공식 GitHubDjango는 파이썬 기반의 오픈소스 웹 프레임워크로, 빠른 개발과 깔끔한 설계를 통해 효율적인 웹 애플리케이션 구축을 지원합니다.
Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design.
Django는 빠른 개발과 깔끔하고 실용적인 설계를 장려하는 고수준 Python 웹 프레임워크입니다. -Django 공식 GitHub
공식문서에도 나와있는 것처럼 Django는 실용적이며 고수준입니다. 이는 Django가 웹 개발을 더 쉽고 효율적으로 만들기 위해 다양한 기능을 제공한다는 것을 의미합니다. 예를 들어, admin 페이지를 여러분이 만들지 않으셔도 Django가 자동으로 만들어줍니다.
Django는 2003년부터 개발되어 2005년에 공개되었습니다. 이후 계속해서 업데이트되어 현재까지도 활발하게 사용되고 있습니다. Django는 많은 기업과 개발자들이 사용하고 있어, 다양한 문제에 대한 해결책을 찾기 쉽습니다.
또한 오픈소스이기 때문에 보안 취약점이 나오면 공유가 되고, 이것을 다음 버전에서 업데이트 합니다. 이는 Django를 더 안전하게 사용할 수 있도록 도와줍니다.
3. 용어 정리
Django는 오픈소스 웹 프레임워크라고 했는데 오픈소스는 무엇이고, 웹 프레임워크는 무엇일까요? 이를 이해하기 위해 오픈소스, 프레임워크, 라이브러리, 서드파티에 대해 알아보겠습니다.
3.1 오픈소스
오픈소스란 "누구나 자유롭게 사용, 수정, 공유할 수 있는 소프트웨어"입니다. 코드를 누구나 확인할 수 있고, 무료로 사용할 수도 있습니다. 우리가 Django를 비용을 내지 않고 사용하는 것처럼요. 또한 오픈소스 기여자로 참여하여 소프트웨어를 개선할 수도 있습니다. 이런 방식으로 오픈소스는 더 빠르게 발전하고, 더 안정적인 소프트웨어를 만들 수 있습니다.
3.2 프레임워크
프레임워크는 집을 지을 때의 기본 뼈대와 같습니다. 프레임워크는 이런 기본 틀, 전체적인 구조를 미리 제공해 줍니다. 개발자들은 이 틀 안에서 자신이 원하는 기능을 추가할 수 있습니다. 내 코드가 '주'가 되는 것이 아니라 '부품'이 되는 것이라 생각해주시면 됩니다.
이 방식은 큰 규모의 복잡한 프로그램을 만들 때 유용합니다. 프레임워크를 사용하면 프로젝트 구조, 데이터베이스 연결과 같은 기본적인 부분에 대해 고민할 필요 없이 중요한 기능 개발에 집중할 수 있기 때문입니다. 프레임워크의 예시로는 파이썬에서 사용하는 Django나 자바에서 사용하는 Spring이 대표적인 프레임워크입니다.
반면 아주 작은 프로그램을 만들 때는 프레임워크를 사용하지 않고 직접 만드는 것이 더 효율적일 수 있습니다. 프레임워크는 프로젝트의 규모와 복잡도에 따라 적절히 선택하는 것이 중요합니다. 예를 들어, 파이썬 진형에서 작은 규모의 프로젝트를 할 때에는 Django보다는 FastAPI를 사용하는 것이 더 효율적일 수 있습니다.
3.3 라이브러리
라이브러리는 도구 상자입니다. 프로그래밍에서 자주 사용되는 유용한 기능들을 모아놓은 것이죠. 라이브러리를 사용하면 개발자는 필요한 기능을 직접 만들지 않고도 쉽게 가져와 사용할 수 있습니다. 상자에서 도구를 꺼내는 것처럼 개발자는 원하는 기능을 라이브러리에서 골라 사용할 수 있습니다. 프레임워크와 다르게 여기서는 내 코드가 '주'이고 라이브러리가 '부품'이 됩니다.
파이썬의 requests 라이브러리는 인터넷에서 정보를 가져오는 복잡한 과정을 몇 줄의 코드로 쉽게 처리할 수 있게 해줍니다. 또한 Pandas 라이브러리는 대량의 데이터를 쉽게 다룰 수 있게 도와주어, 복잡한 데이터 분석 작업을 효율적으로 수행할 수 있게 합니다.
이렇게 라이브러리를 사용하면 개발자는 시간을 절약하고 더 효율적으로 프로그램을 만들 수 있습니다.
3.4 서드파티
서드파티는 프로그램을 만든 회사가 아닌 다른 회사나 개발자들이 만든 추가 도구입니다. 스마트폰에 다양한 앱을 설치하여 기존에 할 수 없었던 책을 읽는 기능, 운동을 기록하는 기능 등을 추가할 수 있듯이, 서드파티는 프로그램에 새로운 기능을 더해줍니다.
Django는 이러한 서드파티 생태계가 풍부합니다. 예를 들어, Django Channels라는 이름의 서드파티를 사용하면 실시간 채팅 서비스를 보다 쉽게 만들 수 있습니다. 이런 서드파티 도구들 덕분에 Django를 사용할 때 더 다양하고 강력한 기능을 쉽게 추가할 수 있습니다.
3.5 프레임워크 vs 라이브러리
많이 혼동되는 개념이 프레임워크와 라이브러리의 차이입니다. 둘 다 개발을 도와주는 도구이지만, 사용하는 방식과 목적이 다릅니다. 아래 표를 통해 둘의 차이를 살펴보겠습니다.
특성 | 프레임워크 | 라이브러리 |
---|---|---|
제어의 주체 | 프레임워크가 전체 흐름을 제어하고 개발자의 코드를 호출 | 개발자가 흐름을 제어하고 필요할 때 라이브러리를 호출 |
유연성 | 정해진 구조와 규칙이 있어 유연성이 상대적으로 낮음 | 개발자가 원하는 대로 사용할 수 있어 유연성이 높음 |
학습 곡선 | 전체 구조와 철학을 이해해야 해서 초기 학습 곡선이 가파름 | 필요한 기능만 학습하면 되어 상대적으로 학습이 쉬움 |
개발 속도 | 초기 설정 후에는 빠른 개발이 가능 | 모든 것을 직접 구현해야 해서 처음부터 빠른 개발이 어려울 수 있음 |
4. Django의 주요 특징
-
데이터베이스 사용이 편합니다. (ORM)
ORM(Object-Relational Mapping)을 사용해 데이터베이스를 다룰 수 있습니다. SQL 문을 몰라도 파이썬 코드로 데이터를 저장하고 불러올 수 있습니다. -
서비스 구현에 필요한 기능이 대부분 제공됩니다.
웹사이트 관리를 위한 페이지가 자동으로 만들어집니다. 데이터 추가, 수정, 삭제 등을 쉽게 할 수 있어 별도의 관리 도구를 만들 필요가 없습니다. 또한 관리자 페이지를 원하는대로 커스터마이징할 수도 있습니다. 이 밖에도 사용자 인증, URL 관리, 폼 처리, 파일 업로드 등 다양한 기능을 제공합니다. 직접 구현하지 않고, Django가 제공하는 기능을 사용하여 빠르게 웹사이트를 만들 수 있습니다. -
보안 기능이 있습니다.
SQL 인젝션, 크로스 사이트 스크립팅(XSS)등 흔한 웹 공격을 자동으로 방어해줍니다. 사용자 인증, 비밀번호 관리 등의 보안 기능도 기본으로 제공합니다. 새로운 보안 위협이 발생되면 Django는 빠르게 업데이트 하기 때문에 버전업만으로도 보안을 강화할 수 있습니다. -
웹사이트 구조를 쉽게 만들 수 있습니다. (MTV 패턴)
Django는 Model(데이터 관리), Template(화면 디자인), View(기능 구현)로 웹사이트를 구성합니다. MTV 패턴은 각 부분을 따로 개발하고 수정하기 쉽다는 장점이 있습니다.
- 기능 추가, 확장이 쉽습니다.
Django 앱이라는 개념을 통해 기능을 모듈화할 수 있습니다. 다른 개발자들이 만든 앱(서드파티 앱)을 쉽게 설치하고, 사용이 가능합니다.
중규모 프로젝트부터 대규모 웹사이트까지 다양한 규모의 프로젝트에 사용할 수 있습니다. Instagram 등 큰 기업들도 Django를 사용하고 있습니다.
5. Django의 설계 철학
Django가 어떤 설계 철학을 가지고 만들어졌는지 공식문서로 살펴보고 이번 장을 마무리 하겠습니다. 이 글은 공식문서에서 일부 내용만 발췌한 것입니다.
Django의 설계 철학-
느슨한 결합 Django 스택의 근본적인 목표는 느슨한 결합, 탄탄한 응집입니다. 프레임워크의 각 계층은 정말로 필요하기 전에는 서로 "알지 못해야" 합니다. 알지 못한다는 표현은 필요하기 전까지는 코드가 연결되지 않는다로 이해하시면 됩니다.
-
적은 코드 Django는 가능한 한 최소한의 코드를 사용하며, 틀에 박힌 코드를 배제합니다.
-
신속한 개발 21세기 웹 프레임워크의 핵심은 웹 개발의 지루한 부분을 빠르게 만드는 것입니다. Django는 놀랄 만큼 빠른 웹 개발을 가능하게 합니다.
-
반복하지 말 것(DRY) 고유한 개념 및 데이터는 단 한 번, 단 한 곳에 존재하는 것으로 족합니다. 중복성은 나쁜 것이고, 정규화는 좋은 것입니다.
6. Django로 개발할 수 있는 방법
Django로 개발할 수 있는 방법은 크게 두 가지로 나눌 수 있습니다. 하나는 모놀리식 아키텍처으로 만드는 것이고, 다른 하나는 마이크로서비스 아키텍처로 만드는 것입니다. 모놀리식은 하나의 애플리케이션으로 모든 기능을 구현하는 방식이고, 마이크로서비스는 여러 개의 애플리케이션으로 기능을 나누어 구현하는 방식입니다.
모놀리식으로 개발하는 방법은 FBV(Function-Based View)와 CBV(Class-Based View)로 나눌 수 있습니다. CBV는 일반 View를 사용하는 방법과 Generic View를 사용하는 방법으로 나눌 수 있습니다. 마이크로서비스는 이보다 복잡합니다. 마이크로서비스도 FBV와 CBV로 나눌 수 있지만, CBV의 경우 APIView, Generic, ViewSet 등으로 나눌 수 있습니다.
우리는 가장 배우기 쉬운 모놀리식의 FBV로 시작합니다. 이는 Django의 기본적인 개념을 이해하고, 코드의 흐름을 파악하는데 도움이 될 것입니다. 이후 CBV, 마이크로서비스로 발전해 나가는 것이 좋습니다. Django는 쉽게 접근하여 빠르게 개발할 수 있지만, 그렇다고 하여 Django의 모든 기능을 효율적으로 알고 사용하는 것이 쉽다는 것은 아닙니다. Django의 놀랍고도 풍부한 생태계를 이해하고 활용하기 위해서는 꾸준한 학습과 연습이 필요합니다. Django를 오랫동안 사용하면서 많은 것을 배우고, 많은 것을 만들어보세요. Django의 세계에 오신 것을 환영합니다.