기록/백엔드

Django, 그리고 웹 서비스 구조

YongE 2025. 3. 20. 15:05

Django


Django는 Python 기반의 고급 웹 프레임워크로, 빠르고 안정적인 웹 애플리케이션 개발을 지원한다. "Batteries included" 철학을 따르며, 인증, ORM, 보안 등 다양한 기능을 기본적으로 제공한다. Django는 대규모 데이터 기반 웹사이트부터 소셜 네트워크, 뉴스 사이트까지 다양한 유형의 웹 애플리케이션을 개발하는 데 적합하다. 이 프레임워크는 MVT(Model-View-Template) 아키텍처를 사용하여 코드의 재사용성과 유지보수를 용이하게 한다.

Django의 장단점

장점

  1. 빠른 개발: Django는 개발자가 애플리케이션을 신속하게 제작할 수 있도록 지원하며, 초기 아이디어부터 배포까지 효율적이다.
  2. 기능 완비: 인증, 사이트 맵, 콘텐츠 관리 등 다양한 추가 기능을 기본적으로 제공한다.
  3. 보안: SQL Injection, XSS 방지 등 강력한 보안 기능을 내장하고 있다.
  4. 확장성: 높은 트래픽 요구를 효과적으로 처리할 수 있어 대규모 프로젝트에 적합하다.
  5. 다양성: 콘텐츠 관리 시스템, 과학 플랫폼, 대규모 기업용 애플리케이션 등 다양한 용도로 활용 가능하다.

단점

  1. 모놀리틱 구조: Django는 특정 방식으로 작업을 정의하고 실행하도록 강제하며, 사용자 정의 파일 구조를 허용하지 않는다.
  2. 소규모 프로젝트 부적합: 작은 프로젝트에서는 Django보다 Flask와 같은 경량 프레임워크가 더 적합할 수 있다.

웹 서버와 웹 애플리케이션 서버 (Upstream과 Downstream)

웹 서버와 웹 애플리케이션 서버는 클라이언트-서버 아키텍처에서 핵심적인 역할을 한다.

웹 서버

  • 정적 콘텐츠(HTML 페이지, 이미지 등)를 제공하며 HTTP 요청을 처리한다.
  • 클라이언트의 요청을 받아 애플리케이션 서버로 전달하거나 캐시된 데이터를 반환한다.

웹 애플리케이션 서버

  • 동적 콘텐츠 생성 및 비즈니스 로직 처리에 중점을 둔다.
  • 데이터베이스와 상호작용하며 복잡한 요청을 처리한다.

Upstream과 Downstream

  • Upstream: 클라이언트가 서버로 데이터를 요청하는 방향.
  • Downstream: 서버가 클라이언트로 데이터를 반환하는 방향.

웹 서비스 구조

웹 서비스 아키텍처는 클라이언트(웹 브라우저), 웹 서버, 데이터베이스 서버로 구성된다.

  1. 클라이언트: 사용자의 입력을 받고 이를 처리하여 요청을 생성한다.
  2. 웹 서버: 요청을 받아 백엔드 로직을 실행하며 필요한 경우 데이터베이스와 통신한다.
  3. 데이터베이스 서버: 데이터를 저장하고 필요한 정보를 제공한다.

주요 아키텍처 유형

  • 모놀리틱 아키텍처: 모든 컴포넌트를 하나의 애플리케이션으로 통합.
  • 마이크로서비스 아키텍처: 각 기능별 독립적인 서비스로 구성.
  • 서버리스 아키텍처: 클라우드에서 이벤트 기반으로 실행되는 함수 사용.

프로세스와 스레드

프로세스와 스레드는 백엔드 시스템에서 작업 병렬 처리를 관리하는 데 중요한 개념이다.

프로세스

  • 실행 중인 프로그램으로 독립적인 메모리 공간과 자원을 가진다.
  • 프로세스 간 통신은 IPC(Inter-process Communication) 메커니즘을 사용한다.

스레드

  • 프로세스 내에서 실행되는 경량 작업 단위로 메모리를 공유한다.
  • 스레드는 빠른 생성과 효율적인 자원 사용이 가능하지만 동기화가 필요하다.

차이점 비교

구분 프로세스 스레드
메모리 공유 독립적 메모리 공간 부모 프로세스와 공유
생성 속도 느림 빠름
자원 사용 더 많은 자원 소모 적은 자원 소모
통신 방식 IPC 사용 공유 메모리를 통한 통신
안정성 하나의 프로세스 실패 시 독립적 하나의 스레드 실패 시 영향

Python에서의 활용 예시

import threading

def print_numbers():
    for i in range(10):
        print(i)

# 스레드 생성 및 실행
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()

위 코드에서는 Python 스레드를 사용하여 숫자를 출력하는 작업을 병렬로 수행할 수 있다.

728x90
반응형

'기록 > 백엔드' 카테고리의 다른 글

REST API란?  (0) 2024.04.14
Google Cloud Storage + Spring boot - 이미지 파일  (0) 2024.03.08