노트

스프링과 장고 비교

Spring vs. Django

백엔드#spring#django · 연결된 개념 9개

쉽게 말하면

스프링과 장고는 요청 처리, DB 접근, 부가 기능 끼우기라는 같은 숙제를 다르게 풀어요. 스프링은 집사 같은 컨테이너가 객체를 만들어 나눠 주고, 장고는 필요한 걸 직접 import하고 데코레이터로 눈에 보이게 붙여요.

비유가 깨지는 곳 장고에 집사 역할이 아예 없는 건 아니에요. 인증 백엔드나 캐시처럼 바꿔 끼울 부품은 settings.py에 경로 문자열로 적어 프레임워크가 불러오게 하는데, 이것도 설정 기반 제어의 역전이에요.

스프링과 장고는 같은 문제(요청 처리, 의존성 관리, 부가 기능 분리, DB 접근)를 각 언어의 성격에 맞게 다르게 푼다. 스프링은 명시적인 IoC(Inversion of Control) 컨테이너와 프록시 기반 AOP(Aspect-Oriented Programming)를, 장고는 설정 파일·import·데코레이터·미들웨어 같은 파이썬다운 장치를 쓴다.

관심사스프링장고
객체 생성·연결IoC 컨테이너가 빈을 만들고 주입모듈 import와 settings.py
부가 기능 끼우기AOP(프록시, @Around)데코레이터, 미들웨어
요청 전처리서블릿 필터, 시큐리티 필터체인미들웨어 체인
이벤트 반응ApplicationEvent, 리스너시그널(post_save 등)
DB 접근JPA·Spring Data 리포지터리ORM 모델·매니저
라우팅@GetMapping 어노테이션urls.py의 URLconf
설정어노테이션 + application.yml파이썬 코드(settings.py)

IoC 쪽

  • 스프링은 ApplicationContext가 빈의 생성·생명주기·주입을 맡는다(의존성 주입 (DI))
  • 장고에는 컨테이너가 없다. 필요한 것은 import하고, 교체 가능한 구성요소(인증 백엔드, 캐시, 이메일 백엔드)는 settings.py에 경로 문자열로 적어 프레임워크가 불러오게 한다. 일종의 설정 기반 제어의 역전(inversion of control)이다

AOP 쪽

  • 스프링 AOP는 프록시가 호출을 가로채 트랜잭션·로깅을 끼운다(스프링 AOP)
  • 장고는 같은 일을 데코레이터(@login_required, @transaction.atomic), 요청 전체에 걸치는 미들웨어, 모델 이벤트에 반응하는 시그널(signal)로 나눠 한다. 프록시 생성이 자동이 아니라 코드에 명시적으로 보인다

고를 때

스프링은 큰 팀·복잡한 도메인에서 구조를 강제하는 데 강하고, 장고는 "배터리 포함(batteries included)"으로 관리자 화면·ORM·인증이 바로 나와 빠르게 만드는 데 강하다. 같은 개념이 언어마다 어떤 모양이 되는지 보는 연습은 새 프레임워크를 배울 때 큰 도움이 된다(학습 프레임과 실행 프레임). 장고 구조는 Django MVT 구조, 스프링 요청 흐름은 Spring MVC 요청 흐름를 본다.

출처: Django 문서: Signals · Spring Framework 문서: AOP Concepts

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • Lombok

    Lombok은 게터·세터·생성자·toString 같은 반복 코드를 어노테이션으로 대신 생성해 주는 자바 라이브러리다. 컴파일할 때 어노테이션 처리기(annotation processor)가 바이트코드(bytecode)에 메서드를 넣는다. 스프링과는 별개 라이브러리라 따로 추가한다.

  • NestJS

    NestJS는 TypeScript를 전제로 모듈·의존성 주입(Dependency Injection, DI)·데코레이터(decorator) 구조를 제공하는 Node.js 서버 프레임워크다. 2017년 Kamil Myśliwiec가 만들었고, 구조를 강제하는 방식 때문에 흔히 "Node.js의 Spring"이라 불린다.

  • 스프링 부트 자동 설정

    스프링 부트는 스프링 앱을 만들 때 반복되던 설정(의존성 버전 맞추기, 서블릿 컨테이너 연결, 배포)을 관례(convention over configuration)로 대신해 주는 도구다. 클래스패스(classpath)에 무엇이 있는지 보고 필요한 빈을 자동으로 등록하고, 웹 서버를 내장해 java -jar 하나로 실행된다.

  • 스프링에서 외부 API 호출

    스프링 앱에서 다른 서버의 REST API를 부르는 도구는 여러 세대가 있다. 지금 새 코드라면 동기 호출은 RestClient, 리액티브·비동기는 WebClient, 인터페이스 선언 방식은 HTTP Interface나 OpenFeign이 흔한 선택이다(2026 기준).

  • 동기·비동기와 블로킹·논블로킹

    동기·비동기는 결과를 언제 어떻게 받느냐, 블로킹·논블로킹은 기다리는 동안 호출한 스레드가 멈추느냐의 문제다.

보기 옵션