JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Spring

스프링에서 받을 데이터는 '명시적'이어야 한다.

lamarcK 2025. 6. 13. 12:04

🎯 백엔드에서는 받을 정보에 대한 '명시'가 반드시 필요하다.

핵심 원리

Spring은 "있는 것만" 받아준다.

// 이것만 받겠다고 명시
public class OrderItemRequestDto {
    private Long productId;    // ← 이것만 받음
    private int quantity;      // ← 이것만 받음
}
// 클라이언트가 더 많이 보내도...
{
  "productId": 1,      // ✅ 받음 (명시됨)
  "quantity": 2,       // ✅ 받음 (명시됨)  
  "color": "red",      // ❌ 무시됨 (명시 안됨)
  "discount": 1000     // ❌ 무시됨 (명시 안됨)
}

일종의 허가된 데이터의 형식이라고 볼 수도 있는데 명시적으로 받을 데이터를 정해두지 않을 경우 아예 해당 데이터 자체가 사라진다.

왜 이런 방식일까?

보안상 이유

// 악의적인 데이터가 와도 막아줌
{
  "productId": 1,
  "isAdmin": true,      // ← 이런 위험한 데이터도 무시됨
  "password": "hack"
}

데이터 검증

public class OrderItemRequestDto {
    @NotNull
    private Long productId;   // ← 받을 데이터를 명시하고 검증 규칙도 추가

    @Min(1)
    private int quantity;
}

명확한 계약

// "우리 API는 이런 데이터만 받습니다"라고 명시
// 프론트엔드도 이 구조를 보고 개발할 수 있음

결론

백엔드는 "수문장" 역할을 한다.

  • 허가된 데이터(명시된 필드)만 통과
  • 허가되지 않은 데이터는 차단

명시 = 보안 + 안정성 + 명확성을 제공하는 중요한 장치! 🛡️✨