JAVA

Django vs Spring 검증 기능 비교 - 무엇이 더 편할까?

min민 2025. 2. 17.

백엔드 개발을 하다 보면 입력값을 검증하는 기능이 필수적이다.

 

Django와 Spring은 각각 강력한 검증 기능을 제공하지만, 사용 방식에는 차이가 있다.

특히 Django는 검증 메시지를 자동으로 생성해 주는 반면, Spring은 대부분 커스텀해야 한다.

이번 글에서는 두 프레임워크의 검증 기능을 비교해 보겠다.

 

 

 

1. Django의 검증 기능

Django에서는 serializer.is_valid()를 호출하면 자동으로 필드별 검증이 수행된다. 필드 타입과 제약 조건에 따라 적절한 오류 메시지가 생성되므로, 개발자가 직접 메시지를 작성할 필요가 없다.

예제 코드

from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=50, required=True)
    email = serializers.EmailField(required=True)
    password = serializers.CharField(min_length=6, required=True)

 

잘못된 입력값 예제

serializer = UserSerializer(data={"name": "", "email": "invalid", "password": "123"})
if not serializer.is_valid():
    print(serializer.errors)

 

출력 결과

{
    "name": ["이 필드는 필수 항목입니다."],
    "email": ["올바른 이메일 주소를 입력하세요."],
    "password": ["이 필드는 6자 이상이어야 합니다."]
}

 

Django는 입력값에 맞춰 자동으로 메시지를 생성해 주므로 개발자가 직접 설정할 필요가 없다.

 

 

 

 

2. Spring의 검증 기능

Spring에서는 @Valid 또는 @Validated를 활용해 검증을 수행할 수 있다. 하지만 기본 메시지는 영어로 제공되며, 원하는 메시지를 사용하려면 직접 설정해야 한다.

 

예제 코드

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

public class UserDto {
    @NotBlank
    private String name;

    @Email
    @NotBlank
    private String email;

    @Size(min = 6)
    private String password;
}

잘못된 입력값 예제

{
    "name": "",
    "email": "invalid",
    "password": "123"
}

출력 결과 (기본 메시지)

{
    "name": "must not be blank",
    "email": "must be a well-formed email address",
    "password": "size must be at least 6"
}

 

 

 

3. Spring에서 커스텀 메시지 설정하기

Spring에서도 Django처럼 자동 메시지를 설정할 수 있다. messages.properties 파일을 생성하고 메시지를 정의하면 된다.

 

 

messages.properties 예제

이메일NotBlank=필수 입력 항목입니다.
Email=올바른  주소를 입력하세요.
Size=최소 {min}자 이상 입력해야 합니다.

 

application.properties에서 메시지 설정

spring.messages.basename=messages

 

이제 검증 실패 시 다음과 같이 한글 메시지가 출력된다.

{
    "name": "필수 입력 항목입니다.",
    "email": "올바른 이메일 주소를 입력하세요.",
    "password": "최소 6자 이상 입력해야 합니다."
}

 

Spring도 메시지를 커스텀하면 Django처럼 사용할 수 있지만, 추가 설정이 필요하다.

 

 

4. Django vs Spring 검증 기능 비교

기본 메시지 제공 ✅ 자동 생성됨 ❌ 기본 메시지는 영어로 제공됨
필드별 자동 메시지 ✅ 필드 타입에 맞게 생성됨 message 속성을 직접 설정해야 함
커스텀 메시지 설정 🔄 필요할 경우 error_messages 사용 🔄 messages.properties 활용 가능
사용 편의성 ⭐⭐⭐⭐⭐ (바로 사용 가능) ⭐⭐⭐ (설정 필요)

 

Django는 기본적으로 자동 메시지를 제공하므로 설정이 필요 없고, Spring은 메시지를 직접 작성해야 하지만 설정을 통해 Django처럼 만들 수 있다.

 

 

 

결론

1. Django는 serializer.is_valid()만 호출하면 자동으로 적절한 검증 메시지를 제공하므로 매우 편리하다.

 

2. 반면, Spring은 기본적으로 영어 메시지를 제공하며, 원하는 메시지를 사용하려면 messages.properties를 설정해야 한다.

 

3. 즉, Django는 기본적으로 편리하고, Spring은 커스텀이 필요하지만 Django처럼 만들 수 있다.

 

4. Spring 개발자가 되기 위해서는 다양한 예외 상황을 고려하고, 이를 효과적으로 처리할 수 있는 능력을 키워야 할것 같다.