본문 바로가기

PYTHON-BACK

#파이썬 22일차_Django

728x90

1. 웹 개발의 구조

2. 백엔드 개발자가 하는 일

 
  1. 서버 개발
    • 클라이언트의 요청을 접수하고 이를 처리한 후 적절한 응답을 보내는 서버의 개발
    • 백엔드 개발 언어와 프레임워크를 사용해 웹 애플리케이션의 핵심 로직 구현
  2. 데이터베이스 설계 및 관리
    • 웹 애플리케이션의 데이터를 효율적으로 저장, 관리하기 위한 데이터베이스의 설계 및 관리
    • 웹 애플리케이션을 운영할 적절한 DBMS의 선택
    • 데이터베이스의성능과 확장성을 고려한 데이터 모델의 설계 및 운영
  3. API 개발
    • API: 프론트엔드와 백엔드가 데이터를 효율적으로 주고받을 수 있는 인터페이스
    • 백엔드 개발자는 이러한 API를 개발하여 프론트엔드에서 특정 데이터나 기능에 접근할 수 있게 함
    • API는 다른 서비스나 플랫폼과 통합할 때에도 중요한 역할을 함
  4. 보안 및 인프라 관리
    • 외부 공격으로부터 서버와 데이터를 지키기 위한 보안 정책의 수립 및 관련 기술 적용
    • 안정적인 서비스의 제공을 위해 서버 구성 및 모니터링 등의 인프라 관리 업무 수행
    • 인프라
      • 인프라스트럭처(Infrastructure)
      • 서버를 구성하는 하드웨어 기기(서버 장비, 스토리지, 네트워크 장비 등), 미들웨어, 운영체제 등
  5. 네트워크 설정
    • 네트워크 설정을 통해 서버와 클라이언트 간의 효율적인 통신 보장

로드 밸런싱(Load Balancing, 작업을 나누어 부하를 분산하는 것), 캐싱(Caching, 자주 사용하는 데이터의 복사본을 고속 저장소에 저장하는 것), 네트워크 보안 설정 등을 통해 사용자 경험과 서버의 성능을 향상시킴

 

 

3. Django 개요

  • Django는 2005년부터 시작된 Python의 오픈 소스 웹 프레임워크이자 풀 스택 프레임워크
  • 보안이 우수하고 유지보수가 편리한 웹사이트를 신속하게 개발 하도록 도움을 주는 파이썬 웹 프레임워크
  • 매우 대중적이고 Python으로 쓰여진 매우 중요한 서버-사이드 웹 프레임워크

3.1 Django의 개발 경위

  • 2003~2004년
  • 로렌스 저널-월드(Lawrence Journal-World) 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티(Adrian Holovaty)와 사이먼 윌리슨(Simon Willison)이 파이썬을 이용해 애플리케이션을 만들기 시작하면서 처음 개발
  • 2003년 로렌스 신문사의 웹사이트는 PHP 기반으로 개발
    • 홀로바티와 윌리슨은 당시 PHP 버전은 객체지향을 지원하지 않아서 (PHP 4.3) 규모가 큰 웹사이트에 적합하지 않다고 생각
    • 평소에 관심을 가지고 있던 파이썬으로 웹 개발을 하기로 결심
    • 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 새롭게 장고를 개발하게 된 것
  • 사실 처음 장고를 개발할때엔 웹 프레임워크보다는 그냥 CMS를 개발하는 것이라고 생각했다고 함
    • 장고라는 이름은 홀로바티가 좋아하던 기타리스트 장고 라인하르트에서 따온 것
    • 또한 장고는 사실 오직 로렌스 웹사이트를 구동하기 위해 개발된 것
  • 홀로바티와 윌리슨이 로렌스의 오너 기업인 더 월드 컴퍼니(The World Company)를 설득하여 오픈 소스로 2005년 7월에 BSD 라이선스로 공개
    • 윌리슨은 더 월드 컴퍼니도 다른 오픈 소스 프로젝트를 많이 사용했기 때문에 쉽게 설득할 수 있었다고 얘기함

3.2 Django의 Release 정책

 

 

  • 장고 버전은 1.0 부터 A.B.C 정책을 사용하기 시작
  • 크게 기능 릴리즈, 패치 릴리즈, LTS 릴리즈로 구분
  • 여기서 1 버전과 2 버전 이후로 버전 정책이 서로 다르지만 현재 지원이 완전히 종료된 1[10] 버전은 생략하고, 2 버전부터 사용중인 정책 기준으로 설명
    • 기능 릴리즈
      • A.0 ~ A.1로 끝나는 버전
      • 이 버전들은 대략 8개월 단위로 출시되며, 약 1년 4개월간 지원됨
      • 기능 릴리즈에는 이전 버전에 없던 신규 기능, 기존 기능의 개선 사항 등이 포함됨
      • LTS 버전의 밑거름이 되는 버전
      • 이전 LTS에서 다음 LTS로 업그레이드를 준비한다면 기능 릴리즈 단위로 차근차근 업그레이드 및 테스트하는 것을 권장함
    • 패치 릴리즈
      • A.B.C 형식에서 C에 해당하는 버전
      • 보안 이슈나 데이터 유실 등의 크리티컬한 버그를 수정하는 패치 버전
      • 정말 업그레이드를 하기 어려운 사정이 있지 않은 이상, 기능 릴리즈와 100% 호환되므로 즉시 업데이트 하는 것이 좋음
    • LTS 릴리즈
      • A.2로 끝나는 버전
      • 장기 지원 릴리즈에 걸맞게 출시로부터 3년간 패치 릴리즈를 제공하는 것이 보장된 버전
      • 실 서비스에 사용할 목적이라면 LTS 버전을 기준으로 개발하고 운영하는 것을 추천
  • 2024년 7월 기준, 5.0.7 버전을 공식 사이트에서 다운로드 받을 수 있음

3.3 Django 기반 개발

 

  • Django는 Python 기반 웹 프레임워크 중에 가장 널리 사용됨
    • 일반적으로 파이썬을 웹 서비스에 쓴다고 하면 Django 또는 Flask
    • 둘의 차이는 풀 스택 프레임워크(Django)냐 아니냐 정도.
 
  • 특징: 강력한 풀스택 웹 프레임워크답게 기본적으로 제공하는 것들이 많음
    • ORM을 기본적으로 제공
    • 관리자 페이지를 기본적으로 제공
    • 자주 사용되는 로직들을 묶어서 기본적으로 제공
    • 만들어진 엔티티에 따라 권한 목록을 알아서 제공
 

 

  • 단점
    • 성능 이슈
      • 100% 쓰기 어려운 방대한 기능들을 제공: 소규모 프로젝트에서는 불필요한 기능들로 인한 성능 저하 발생 가능
      • ORM 특성상 쿼리 호출시 모델 클래스에 정의된 속성을 필드로 프로젝션: 불필요한 정보가 딸려들어와 이로 인한 성능 저하가 발생하기도 함
    • ORM 자유도
      • ORM 상에서 명시적으로 INNER / OUTER JOIN 연산을 정의할 수 없음
        • select_related나 prefetch_related를 사용하여 직/간접적인 JOIN을 강제할 수 있으나,
        • 이 또한 모델간 관계에 따라 사용이 제한되므로
        • 작성된 ORM 문장이 실제로 실행되는 방식을 이해하지 못한다면 n+1 문제로 인한 성능 저하 발생 가능
      • 그렇기에 SQL 성능이 중요한 비즈니스 로직에서는
        • ORM 호출문이 실행됨에 따라 쿼리가 어떻게 변환되어 호출되는지를 파악하기 위해
        • 프로파일링 패키지 (django-silk, Django Debug Toolbar) 등을 활용하여
        • 쿼리 분석 및 최적화가 필요함
    • ORM에서 지원하지 않는 기능을 활용한 쿼리를 사용하고자 한다면
      • 별도의 뷰 (View)를 구성하거나
      • extra 또는 Raw SQL을 이용하여 직접 쿼리문을 호출해야 함
      • 이마저도 각 레코드가 모델 인스턴스로 변환되기 때문에
      • 쿼리 결과를 모델 인스턴스로 변환하는 것이 어렵거나 성능 이슈가 우려되는 경우
        • 커서 컨텍스트 매니저를 이용하여 DB에서 직접 데이터를 인출하기도 함

4. Django 환경 설정

4.1 Django 개발 환경

  • Django를 로컬 컴퓨터에 설치하여 장고 어플리케이션을 개발, 실행, 테스트할 수 있는 환경
  • Django 자체가 제공하는 주요 툴
    • Django 프로젝트를 생성하고 작업하기 위한 파이썬 스크립트들
    • 심플한 개발용 웹 서버
      • 개발용 웹 서버로 우리는 로컬 컴퓨터에서 개발한 Django 어플리케이션을 같은 로컬 컴퓨터에서 테스트해 볼 수 있음
      • 예: 자신의 PC에서 개발한 Django 웹 어플리케이션을 크롬 브라우저와 같은 웹 브라우저 상에서 실행하고 테스트해볼 수 있음
  • Django 개발 환경에서 제공하는 다른 도구들
    • 코드 작성을 돕는 텍스트 에디터와 IDE
    • 소스코드의 버전을 안전하게 관리하기 위한 Git과 같은 소스 관리 도구 등

4.2 Django 설치 옵션

 

  • 여러 운영 체제(Windows, Mac OS X, Linux/Unix 등)에서 설치 가능(기본적으로 파이썬 깔려있음 다 가능)
  • 소스에서, 파이썬 패키지 인덱스(PyPi)에서, 그리고 많은 경우 호스트 컴퓨터의 패키지 매니저 어플리케이션에서 설치 가능
  • 별도로 설치 및 구성되어있어야 하는 여러가지 데이터베이스 중 하나를 사용하도록 설정할 수 있음
  • 메인 시스템의 파이썬 환경 또는 별도의 파이썬 가상 환경에서 실행됨

4.3 Django 다운로드

 

  • Django를 다운로드하는 세 가지 방법
    • pip 도구를 이용한 PyPi(Python Package Repository)에서 설치
      • Django의 최신 버전을 받을 수 있는 최적의 방법
    • 본인 컴퓨터의 패키지 매니저에 있는 버전 사용
      • 운영체제와 함께 제공되는 Django는 친숙한 설치 방법을 제공함
      • 단 오래된 버전일 수 있음
    • 소스에서 설치하기
      • 소스에서 Django의 최신버전을 다운로드하여 설치할 수 있음
      • 초심자에게는 비추천
      • Django에게 기여할 수 있는 준비가 됐다면 필요함

PS C:\workspace> python -m venv django_project
PS C:\workspace> cd django_project
PS C:\workspace\django_project> pip install django

 

 

728x90