@RequestParam
Http 요청 ㅍ라미터를 받아오기 위해 사용
Body를 직접조회하지 않음
@RequestBody
클라이언트가 전송하는 JSON(application/josn)형태의 HTTP body 내용을 MessageConverter들 중 하나인 MappingJackson2 HttpMessageConverter를 통해 java object로 변환시켜주는 역할
cf) Reflection?
Reflection(리플렉션)은 Java에서 제공하는 API 중 하나로, 실행 시간(runtime)에 Java 객체의 내부 속성을 조사하거나 수정하고, 클래스의 메타데이터를 조회하거나 조작할 수 있게 해주는 기능입니다. 이를 통해 개발자는 클래스나 객체의 정보(예: 클래스 이름, 멤버 변수, 메서드 등)를 동적으로 알아낼 수 있으며, 그 정보를 바탕으로 새로운 객체를 생성하거나, 메서드를 호출하거나, 변수에 값을 할당할 수 있습니다.
Spring 프레임워크 내에서 리플렉션의 사용 사례는 다음과 같습니다:
DI (Dependency Injection): Spring은 의존성 주입을 위해 리플렉션을 사용합니다. 주어진 클래스에 정의된 Setter 메서드나 생성자를 찾아서 해당 의존성을 주입합니다.
AOP (Aspect-Oriented Programming): Spring의 AOP 구현은 리플렉션을 사용하여 프록시 객체를 생성하며, 이를 통해 주요 비즈니스 로직과 관심사(예: 로깅, 트랜잭션 관리 등)를 분리합니다.
데이터 바인딩: Spring은 데이터 바인딩 또는 메시지 변환 과정에서 리플렉션을 사용하여 객체의 기본 생성자를 호출하고, 해당 객체의 속성을 설정합니다.
@ModelAttribute
요청파라미터로 넣은 값들을 JSON형식으로 반환
만약에 Body에 값을 넣어 전송한다면 값이 담겨있지 않음
-> content-type multipart/form-data형태로 바꾸면 JSON 형식으로 반환됨
@ModelAttribute에는 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지를 포함한 다양한 검증(Validation) 작업이 추가적으로 진행된다.