본문 바로가기
Everyday Study

2024.10.14(월) { CORS (교차 출처 자원 공유), DTO&DVO, @RequestParam 과 @InitBinder, SimpleDateFormat, @RequestParam }

by xogns93 2024. 10. 14.
  1. CORS (교차 출처 자원 공유): 웹 브라우저는 기본적으로 다른 출처(서버)에서 리소스를 가져오는 것을 차단합니다. 하지만 CORS는 특정 조건에서 다른 출처에 있는 리소스를 허용할 수 있도록 해주는 메커니즘입니다. 서버는 HTTP 응답 헤더에 허용하는 도메인을 명시해, 어떤 출처에서 요청을 받을지를 지정할 수 있습니다.
  2. 교차 출처 (Cross-Origin): 출처(도메인, 프로토콜, 포트 번호 중 하나라도 다를 때) 간의 리소스 요청을 의미합니다. 예를 들어, http://example.com에서 https://another.com로 요청을 보낼 때 교차 출처 요청이 발생합니다.
  3. 동일 출처 (Same-Origin): 프로토콜, 도메인, 포트 번호가 동일한 경우를 의미합니다. 동일 출처에서는 자원을 제약 없이 공유할 수 있습니다. 예를 들어, http://example.com http://example.com:8080은 포트 번호가 다르기 때문에 다른 출처로 간주됩니다.

사용 예시:

  • CORS 사용: 프론트엔드와 백엔드 서버가 서로 다른 도메인에 있을 때, 백엔드에서 프론트엔드 도메인을 허용하면 교차 출처 요청을 허용하게 됩니다.
  • 동일 출처 정책: 브라우저는 기본적으로 보안상의 이유로 동일 출처 내에서만 데이터를 주고받도록 제한합니다. 이를 "동일 출처 정책"이라고 부르며, 이 정책을 통해 보안을 강화합니다.

DTO (Data Transfer Object)와 DVO (Data View Object)

 

  1. DTO (Data Transfer Object):
    • 계층 간 데이터를 전달하는 데 사용됩니다.
    • 주로 클라이언트와 서버 간 데이터 전송, 서비스 계층 간 통신 등에 사용됩니다.
    • 복잡한 비즈니스 로직 없이 데이터를 단순히 전송하는 데 목적이 있습니다.
  2. DVO (Data View Object):
    • 사용자 인터페이스(뷰)에 데이터를 전달하기 위해 사용됩니다.
    • 뷰에서 표시할 데이터만을 포함하며, 특정한 데이터 형식으로 변환할 수 있습니다.
    • 데이터 표현에 중점을 둡니다.

따라서 DTO는 비즈니스 계층 간 데이터 전달에, DVO는 사용자에게 표시될 데이터를 뷰에 전달하는 데 주로 사용됩니다.

 


@RequestParam 과 @InitBinder 

 

@InitBinder는 주로 요청 데이터를 바인딩할 때 그 과정을 커스터마이징하기 위해 사용됩니다. 하지만 @RequestParam은 이미 기본적인 바인딩을 제공하므로, 단순한 요청 파라미터를 다룰 때는 @RequestParam만으로 충분합니다. @InitBinder를 함께 사용하는 것은 불필요한 복잡성을 야기할 수 있으며, 이 두 애노테이션은 서로 다른 목적을 가진 바인딩 도구입니다.

 

예를 들어, 날짜 형식 변환과 같이 복잡한 바인딩이 필요할 때는 @InitBinder가 유용하지만, 일반적인 파라미터는 @RequestParam만으로 처리할 수 있습니다.

 


SimpleDateFormat

 

SimpleDateFormat은 Java에서 날짜와 시간을 원하는 형식으로 변환할 수 있도록 도와주는 클래스입니다. 예를 들어, 날짜를 "yyyy-MM-dd" 형식으로 출력하려면 SimpleDateFormat("yyyy-MM-dd")를 사용합니다. 이 외에도 다양한 형식을 지원합니다.

다른 예시로는:

  • "dd/MM/yyyy" → 14/10/2024
  • "E, MMM dd yyyy" → Mon, Oct 14 2024
  • "hh:mma" → 10:15:30 AM

@RequestParam

 

@RequestParam은 Spring MVC에서 요청 파라미터를 처리하기 위한 애노테이션입니다. 이 애노테이션을 사용하여 HTTP 요청으로 전달된 파라미터 값을 쉽게 컨트롤러 메서드의 매개변수로 바인딩할 수 있습니다. @RequestParam은 총 두 가지 방식으로 사용될 수 있습니다.

  1. 쿼리 스트링 (Query String)
    • URL에 포함된 쿼리 파라미터를 처리할 때 사용됩니다. 예를 들어, ?name=John&age=30와 같은 쿼리 스트링의 값을 받아올 수 있습니다.
@GetMapping("/greeting")
public String greeting(@RequestParam("name") String name) {
    return "Hello, " + name;
}

 

  • 요청 URL: /greeting?name=John
  • 출력: Hello, John

 

2. 폼 데이터 (Form Data)

  • POST 요청의 폼 데이터도 @RequestParam으로 처리할 수 있습니다. 이때 폼의 input 필드 값이 요청 파라미터로 전달됩니다.
@PostMapping("/submitForm")
public String submitForm(@RequestParam("username") String username, @RequestParam("age") int age) {
    return "Username: " + username + ", Age: " + age;
}

 

HTML Form 예시:

<form action="/submitForm" method="post">
    <input type="text" name="username" />
    <input type="number" name="age" />
    <button type="submit">Submit</button>
</form>

사용자가 폼을 제출하면, username age @RequestParam으로 매핑됩니다.

 

즉, @RequestParam은 GET 요청의 쿼리 스트링과 POST 요청의 폼 데이터를 모두 처리할 수 있는 강력한 도구입니다.