- CORS (교차 출처 자원 공유): 웹 브라우저는 기본적으로 다른 출처(서버)에서 리소스를 가져오는 것을 차단합니다. 하지만 CORS는 특정 조건에서 다른 출처에 있는 리소스를 허용할 수 있도록 해주는 메커니즘입니다. 서버는 HTTP 응답 헤더에 허용하는 도메인을 명시해, 어떤 출처에서 요청을 받을지를 지정할 수 있습니다.
- 교차 출처 (Cross-Origin): 출처(도메인, 프로토콜, 포트 번호 중 하나라도 다를 때) 간의 리소스 요청을 의미합니다. 예를 들어, http://example.com에서 https://another.com로 요청을 보낼 때 교차 출처 요청이 발생합니다.
- 동일 출처 (Same-Origin): 프로토콜, 도메인, 포트 번호가 동일한 경우를 의미합니다. 동일 출처에서는 자원을 제약 없이 공유할 수 있습니다. 예를 들어, http://example.com과 http://example.com:8080은 포트 번호가 다르기 때문에 다른 출처로 간주됩니다.
사용 예시:
- CORS 사용: 프론트엔드와 백엔드 서버가 서로 다른 도메인에 있을 때, 백엔드에서 프론트엔드 도메인을 허용하면 교차 출처 요청을 허용하게 됩니다.
- 동일 출처 정책: 브라우저는 기본적으로 보안상의 이유로 동일 출처 내에서만 데이터를 주고받도록 제한합니다. 이를 "동일 출처 정책"이라고 부르며, 이 정책을 통해 보안을 강화합니다.
DTO (Data Transfer Object)와 DVO (Data View Object)
- DTO (Data Transfer Object):
- 계층 간 데이터를 전달하는 데 사용됩니다.
- 주로 클라이언트와 서버 간 데이터 전송, 서비스 계층 간 통신 등에 사용됩니다.
- 복잡한 비즈니스 로직 없이 데이터를 단순히 전송하는 데 목적이 있습니다.
- 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은 총 두 가지 방식으로 사용될 수 있습니다.
- 쿼리 스트링 (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으로 매핑됩니다.