본문 바로가기
Python/Django

[Django] 파이썬 대표 풀 스택 오픈소스 프레임 워크 (기본 개념 / 입문 / Django vs FastAPI / 개발 환경 구성)

by 비전공자 기록광 2024. 9. 22.
반응형

https://docs.djangoproject.com/ko/5.0/

 

Django 문서 | Django 문서

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

회사에서 프로젝트를 대부분 FastAPI로 하다보니 자바보다 파이썬을 더 많이 하고 있다. 하다보니 Django도 궁금해져서 공부해보기로 했다.

이전에 블로깅한 FastAPI 글과 비교해서 보면 더 좋을 듯 하다.

 

2023.06.06 - [Python/FastAPI] - [FastAPI] 파이썬 경량 프레임워크 (기본 개념 / 입문 / 개발 환경 구성)

 

[FastAPI] 파이썬 경량 프레임워크 (기본 개념 / 입문 / 개발 환경 구성)

https://fastapi.tiangolo.com/lo/ FastAPI FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https://github.com/tiangolo/fastapi FastAPI is a modern, fast (

datamoney.tistory.com

 

 

Django 기본 개념

장고는 대표적인 Python 웹 프레임워크이다. 인스타그램과 Jetbrains가 대표적인 장고 웹사이트로 꼽힌다.

 

기본적인 구조는 MVT 구조로 불린다.

- Model

- View

- Template

 

우리가 기본적으로 알고 있는 MVC 패턴과 비교하자면

Controller 와 Service를 합친 비즈니스 로직을 담당하는 부분이 바로 View가 된다.

또 MVC의 View가 Template 이 된다.

 

MVT 패턴을 통해 API 뿐만아니라 화면단 자체를 쉽게 생성할 수 있다.

 

 

오래된 오픈소스 프레임워크다보니 기본적인 기능도 다양한데, 

Spring Security와 같은 인증처리를 쉽게 구현할 수 있고 무엇보다 관리자 기능이 엄청나다. 

모델만 정의하면 crud 기능을 바로 제공해 코드 한줄 없이 데이터를 관리할 수 있다.

 

Django vs FastAPI

FastAPI는 비동기 웹 프레임워크이고 Django는 풀스택 웹 프레임워크이다.

FastAPI는 애초에 asgi 기반으로 기본적인 API 구축에 필요한 기능만 제공하는 경량화된 프레임워크로 사용해보니 정말 쉽고 유연하다. swagger, redocs 같은 문서도 자동으로 만들어준다. 

 

장고는 위에서 말했듯 MVT 구조로 쉽게 화면을 만들 수 있는 풀 스택 웹 프레임워크이다. 

(FastAPI에서도 템플릿 엔진인 jinja2를 설치해 ssr을 간단하게 구현할 수 있지만 안써봐서 모름..)

 

결론적으로 쉽고 빠르게 API 서버를 만들고자 할때는 FastAPI를, 대규모의 복잡한 비즈니스 로직을 요하는, 잘 만들어진 기본 기능을 제공하는 웹 개발에는 장고를 추천한다고 한다.

 

 

Mac OS에서 개발 환경 구성

M1 기준으로 설명하겠다.

# 가상 환경 설정
pyenv virtualenv 3.10.6 djangotest

# 가상 환경 실행
pyenv activate djangotest

pip install django
django-admin startproject djangotest .

# 서버실행
python manage.py runserver

 

가상환경을 만들어 django를 설치해 startproject로 djangotest 라는 프로젝트를 만들어줬다.

그러면 자동으로 manage.py가 생기는데 그대로 runserver을 해주면 된다.

 

이렇게 django 자체 내장된 wsgi로 서버가 실행되었다.

 

 

Hello World

개발의 첫 걸음인 hello world를 찍어보자

 

장고에는 앱이라는 개념이 있는데 이는 프로젝트의 구성 요소를 말하며 특정 기능/동작을 담당하는 모듈로서 사용된다.

# 앱 생성
python manage.py startapp basic

 

startproject 와 같이 startapp 명령으로 쉽게 생성할 수 있다.

생성하면 아래와 같은 기본적인 파일이 생성된다.

 

 

 

여기서 migrations는 DB 스키마 버전을 관리하고 변경하는데 사용되는 파일이다.

 

앱을 생성했으니 사용하기 위해서는 프로젝트의 루트 settings.py에 추가해줘야 한다. 

 

settings.py

 

INSTALLED_APPS 에 만들어준 앱을 적어준다.

 

 

basic/views.py

from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello, World!")

 

 

HttpResponse를 통해 Hello, World를 응답해줄 것이다. hello_world라는 메소드를 미리 정의해주고 요청을 받아줄 부분을 정의해줘야 한다.

 

basic/urls.py

from django.urls import path
from .views import hello_world

urlpatterns = [
    path('', hello_world, name='hello_world'),
]

 

basic 아래에 urls.py 파일을 새로 만들어 여기로 진입하는 요청에 대해 hello_world 메소드를 타게 해줬다. 이 진입점을 사용하기 위해서는 프로젝트의 루트 urls.py에 경로를 추가해줘야 한다.

 

각 앱별로 url 관리를 하기 위해 해당 부분이 필요한 것이다.

 

 

 

이렇게 서버를 재 실행하면 Hello, World가 잘 뜬다.

 

 

하지만 해당 hello world는 HttpResponse이다. 이제 장고의 가장 큰 특징이자 장점인 MVT 구조를 활용해 화면으로 만들어 띄워보겠다.

 

basic/templates/hello.html

 

앱에 templates라는 폴더를 만들어 hello.html을 만들어줬다

내 맘대로 html 파일을 꾸며 줬다.

 

<!-- myapp/templates/myapp/hello.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body style="background-color: #FFFFE0;">
    <div>
        <h1 style="font-style: italic;">Hello, World!</h1>
        <img src="https://devhumor.com/content/uploads/images/February2024/new_programming_language_meme.jpg" alt="Programming Language Meme" style="width: 300px; font-style: italic;">
    </div>
  </body>
</html>

 

 

basic/views.py

 

그리고 views.py 의 hello_world 메소드의 응답을 바꿔줬다.

말그대로 HttpResponse 응답이 아닌 html render로 바꿔준다는 것이다.

 

 

재실행해보니 내가 작성했던 html 로 바뀌었다.

 

FastAPI와 비교해 구조도 뭔가 복잡하고 자동 생성되는 것들이 많아 조금은 당황했다.

공부하다보니 삽질도 길어졌다.

확실히 러닝커브는 좀 있지만 워낙 사용자도 많고 기능도 다양해 계속 보면 좋을 것 같다. 

 


코드

https://github.com/recordbuffer/TIL/tree/main/Django

 

TIL/Django at main · recordbuffer/TIL

Today I Learned. Contribute to recordbuffer/TIL development by creating an account on GitHub.

github.com

 

반응형

댓글