RedirectAttributes는 Spring Framework의 Spring MVC에서 사용되는 인터페이스로, 리다이렉션 시점에 속성을 추가하는 데 사용됩니다. 일반적으로 컨트롤러 메서드에서 RedirectAttributes 인스턴스를 메서드 매개변수로 받아 리다이렉션 후에도 데이터를 유지할 수 있게 합니다.
 
여기는 RedirectAttributes를 사용하는 간단한 예입니다:

public String update(RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("message", "Update successful");
    redirectAttributes.addAttribute("status", true);
    return "redirect:/view";
}

 
p.s. 이제는 스피링 db 관련해서 강의를 들으려고합니다.
김영한 개발자님 강의가 정말 쉽고 자세하게 설명해주시네요. 그리고 생각보다 지금 고쳐야할 코드부분이 많다고 느껴지네요.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

간단한 테스트 코드 함수 정리  (0) 2023.10.02
JpaReporitory vs EntityManager  (0) 2023.09.24
url 맵핑에 관하여  (0) 2023.09.17
http 메시지 컨버트 위치?  (0) 2023.09.03
returnvalue handler란?  (0) 2023.09.03

Spring MVC에서 클래스 레벨과 메서드 레벨에 URL을 매핑하는 방법에는 몇 가지 차이점이 있습니다.

 

1.클래스 레벨에서의 URL 매핑:
클래스 레벨에서 URL을 매핑하면, 해당 URL 접두사가 해당 컨트롤러 클래스에 있는 모든 요청 매핑 메서드에 적용됩니다. 이를 통해 관련된 작업을 그룹화하여 코드의 조직화를 개선할 수 있습니다.

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        // ...
    }

    @GetMapping("/list")
    public ResponseEntity<List<User>> getUserList() {
        // ...
    }
}

 

2.메서드 레벨에서의 URL 매핑:

메서드 레벨에서 URL을 매핑하면, 해당 URL은 단순히 해당 메서드에만 매핑됩니다. 이를 통해 메서드별로 다른 URL을 지정할 수 있습니다.

@RestController
public class UserController {

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        // ...
    }

    @GetMapping("/users/list")
    public ResponseEntity<List<User>> getUserList() {
        // ...
    }
}

정리:
클래스 레벨 매핑: 관련된 메서드를 그룹화하고 코드를 더 깔끔하게 만들어줍니다. 일종의 네임스페이스 역할을 합니다.
메서드 레벨 매핑: 메서드마다 다른 기본 URL을 제공할 수 있어 유연성이 증가하지만, 코드가 조금 더 분산될 수 있습니다.
어떤 방식을 선택할지는 특정 애플리케이션의 요구 사항과 개발자의 선호에 따라 달라집니다.

 

ps 회사 레거시 코드들이 메서드 방식으로 레벨매핑이 되어 있어서 항상 그런식으로 했는데요.

김영한 개발자님 강의를 듣는데 클래스 레벨 맵핑으로 하시길래 궁금해서 찾게 되었습니다.

차이점은 개발 상황에 따라 달라지는듯합니다. 근데 저도 클래스 레벨 매핑이 조금더 마음에 드네요.

기존 코드는 클래스 레벨 매핑 방식으로 변경할 예정입니다.

' > Spring' 카테고리의 다른 글

JpaReporitory vs EntityManager  (0) 2023.09.24
RedirectAttributes?  (0) 2023.09.17
http 메시지 컨버트 위치?  (0) 2023.09.03
returnvalue handler란?  (0) 2023.09.03
argument resolver란?  (0) 2023.09.03

 

  • 요청의 경우
    @RequestBody 를 처리하는 ArgumentResolver 가 있고, HttpEntity 를 처리하는 ArgumentResolver 가 있다. 이 ArgumentResolver 들이 HTTP 메시지 컨버터를 사용해서 필요한 객체를 생성하는 것이다.
  • 응답의 경우
    @ResponseBody 와 HttpEntity 를 처리하는 ReturnValueHandler 가 있다. 그리고 여기에서 HTTP 메시지 컨버터를 호출해서 응답 결과를 만든다.

스프링 MVC는

@RequestBody @ResponseBody 가 있으면
RequestResponseBodyMethodProcessor (ArgumentResolver)

HttpEntity 가 있으면 HttpEntityMethodProcessor (ArgumentResolver)를 사용한다.

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

RedirectAttributes?  (0) 2023.09.17
url 맵핑에 관하여  (0) 2023.09.17
returnvalue handler란?  (0) 2023.09.03
argument resolver란?  (0) 2023.09.03
HTTP 메시지 컨버터란?  (0) 2023.09.03

2023.09.03 - [웹/Spring] - argument resolver란?

argument resolver란?

Argument Resolver는 클라이언트의 HTTP 요청을 컨트롤러 메서드의 매개변수로 매핑해주는 역할을 합니다. ex) 예를 들어, @RequestParam, @PathVariable, @RequestBody 등의 애노테이션을 사용하면 이들은 내부적

kwaksh2319.tistory.com

returnvalue handler란?
HandlerMethodReturnValueHandler 인터페이스는 Spring MVC에서 컨트롤러 메서드가 반환하는 값을 어떻게 처리할지 정의합니다. 이 인터페이스는 컨트롤러에서 반환된 객체를 HTTP 응답으로 변환하는 역할을 합니다.
 
1.supportsReturnType(MethodParameter returnType): 이 메서드는 특정 반환 유형을 처리할 수 있는지 여부를 나타냅니다. 예를 들어, 일부 ReturnValueHandler는 @ResponseBody 애노테이션이 붙은 메서드를 처리하도록 설계되어 있습니다.

2.handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest): 이 메서드는 실제 반환 값을 처리합니다.
 
ex)

@RestController
public class MyController {
  
  @GetMapping("/hello")
  public String sayHello() {
    return "Hello, World!";
  }
  
}

위 예시에서 "Hello, World!" 문자열은 HandlerMethodReturnValueHandler에 의해 HTTP 응답 본문으로 변환됩니다.
 
커스텀 ReturnValueHandler
특별한 유형의 반환 값을 처리하려면, HandlerMethodReturnValueHandler 인터페이스를 구현하여 커스텀 ReturnValueHandler를 만들 수 있습니다. 그런 다음, 이를 Spring MVC에 등록합니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
  
  @Override
  public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
    handlers.add(new MyCustomReturnValueHandler());
  }
  
}

 
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

url 맵핑에 관하여  (0) 2023.09.17
http 메시지 컨버트 위치?  (0) 2023.09.03
argument resolver란?  (0) 2023.09.03
HTTP 메시지 컨버터란?  (0) 2023.09.03
view Resolver란?  (0) 2023.09.03

 

Argument Resolver는 클라이언트의 HTTP 요청을 컨트롤러 메서드의 매개변수로 매핑해주는 역할을 합니다.

 

ex)

예를 들어, @RequestParam, @PathVariable, @RequestBody 등의 애노테이션을 사용하면 이들은 내부적으로 Spring MVC의 기본 Argument Resolver에 의해 처리됩니다

@RestController
public class MyController {
  
  @GetMapping("/greet")
  public String greet(@RequestParam String name) {
    return "Hello, " + name;
  }
  
}

 

HandelrMethodArgumentResolver

public interface HandlerMethodArgumentResolver {

    boolean supportsParameter(MethodParameter parameter);
    
    @Nullable
	Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
     
     }

커스텀 Argument Resolver

HandlerMethodArgumentResolver 인터페이스를 구현하여 커스텀 Argument Resolver를 만들 수 있습니다.

public class CustomUserArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().equals(CustomUser.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        // 로직을 통해 CustomUser 객체를 생성하고 반환
        return new CustomUser("John", "Doe");
    }
}

이렇게 만든 후에는 이 Argument Resolver를 Spring MVC에 등록해야 합니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
  
  @Override
  public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
    resolvers.add(new CustomUserArgumentResolver());
  }
  
}

이제 컨트롤러 메서드에서 CustomUser 타입의 매개변수를 사용할 수 있고, 이 매개변수는 CustomUserArgumentResolver에 의해 처리됩니다

@RestController
public class MyController {
  
  @GetMapping("/custom")
  public String customEndpoint(CustomUser customUser) {
    return "Hello, " + customUser.getFirstName();
  }
  
}

이렇게 하면 CustomUser 객체는 CustomUserArgumentResolver를 통해 생성되고, 컨트롤러 메서드의 매개변수로 전달됩니다.

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

http 메시지 컨버트 위치?  (0) 2023.09.03
returnvalue handler란?  (0) 2023.09.03
HTTP 메시지 컨버터란?  (0) 2023.09.03
view Resolver란?  (0) 2023.09.03
HTTP 응답 방식  (0) 2023.09.02

 

  1. 웹 브라우저가 "localhost:8080/hello-api" 접근
  2. 서버를 거쳐 helloController 호출
  3. helloController의 @ResponseBody를 통해 HttpMessageConverter가 호출
  4. return 타입에 따라 JsonConverter 또는 StringConverter를 이용해 return

@ResponseBody의 사용

  • HTTP의 Body에 문자 내용을 직접 반환
  • viewResolver 대신 HttpMessageConverter 동작
  • 기본 문자 처리: StringHttpMessageConverter
  • 기본 객체 처리: MappingJacksonHttpMessageConverter
  • 바이트 처리 등: HttpMessageConverter가 기본으로 등록

HTTP 메시지 컨버터 인터페이스

boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);

List<MediaType> getSupportedMediaTypes();

T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
	throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
	throws IOException, HttpMessageNotWritableException;

스프링 부트의 기본 메시지 컨버터

ByteArrayHttpMessageConverter
StringHttpMessageConverter
MappingJacksonHttpMessageConverter
...

기본적으로 위의 컨버터들을 지원함
대상 클래스 타입과 미디어 타입을 체크해 사용여부 결정
(만족하지 않는 경우 다음 메시지 컨버터로 우선순위 넘어감)
ex)
StringHttpMessageConverter

content-type:application/json
@RequestMapping
void hello(@Request String data){}

MappingJackson2HttpMessageConverter

content-type:application/json
@RequestMapping
void hello(@Request HelloData data){}

컨버트 실패

content-type:text/html
@RequestMapping
void hello(@Request HelloData data){}

HTTP 요청 데이터 읽기

  1. HTTP 요청이 들어오고, 컨트롤러에서 @RequestBody나 HttpEntity 파라미터 사용
  2. 메시지 컨버터가 canRead() 호출    // 읽을 수 있는 메시지인지 확인
    - 대상 클래스 타입과 HTTP의 Content-Type 미디어 타입 지원하는지
  3. canRead() 만족 시 read() 호출해 객체 생성 및 반환


HTTP 응답 데이터 생성

  • 컨트롤러에서 @ResponseBody나 HttpEntity로 값 반환
  • 메시지 컨버터가 canWrite() 호출    // 메시지를 쓸 수 있는지 확인
    - 대상 클래스 타입과 HTTP의 Accept 미디어 타입 지원하는지
  • canWrite() 만족 시 write() 호출해 HTTP 응답 메시지 바디에 데이터 생성

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

returnvalue handler란?  (0) 2023.09.03
argument resolver란?  (0) 2023.09.03
view Resolver란?  (0) 2023.09.03
HTTP 응답 방식  (0) 2023.09.02
@RequestBody , @ModelAttribute 파라미터 어노테이션 사용방법  (0) 2023.07.05

실행할 뷰를 찾는 일

페이지 컨트롤러가 리턴한 뷰 이름에 해당하는 뷰 컴보넌트를 찾는 역할

 

종류?

1.ResourcBundleViewResolver

 *.properties 에서 뷰이름에 해당하는 url 을 찾는다.

   ex) .properties

home.index=org.springframework.web.servlet.view.JstlView
home.index.url=/WEB-INF/jsp/home.jsp

java

@Bean
public ViewResolver resourceBundleViewResolver() {
    ResourceBundleViewResolver resolver = new ResourceBundleViewResolver();
    resolver.setBasename("views");
    resolver.setOrder(1);
    return resolver;
}

 

2.InternalResourceViewResolver

Spring Framework에서 매우 일반적으로 사용되는 뷰 리졸버(View Resolver)입니다. 이 뷰 리졸버는 논리적인 뷰 이름을 실제 JSP 또는 다른 웹 리소스 경로로 변환해주는 역할을 합니다.

ex)xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

java

@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

설정에서 prefix와 suffix 속성은 뷰 이름 앞과 뒤에 추가될 문자열을 정의합니다. 예를 들어, 컨트롤러에서 "home"이라는 뷰 이름을 반환하면 InternalResourceViewResolver는 이를 /WEB-INF/views/home.jsp로 변환합니다.

 

ResourcBundleViewResolver,  InternalResourceViewResolver  차이점

뷰리졸브는 애플리케이션의 요구 사항에 따라 결정됩니다.

 

ResourceBundleViewResolver

장점

  • 설정 파일에서 명시적으로 뷰 클래스와 뷰 위치를 매핑하므로, 보다 구조화된 관리가 가능합니다.
  • 다국어(i18n) 지원 등에서 유용합니다.
  • 뷰에 대한 메타데이터를 쉽게 관리할 수 있습니다.

단점

  • .properties 파일을 따로 유지해야 하므로, 추가적인 관리 작업이 필요할 수 있습니다.
  • 각 뷰에 대한 설정이 별도로 존재하므로, 설정이 길어질 수 있습니다.


InternalResourceViewResolver

장점

  • 간단하고 빠른 설정이 가능합니다. 일반적인 경우에는 이 리졸버만으로 충분합니다.
  • 개발자가 명시적으로 매핑을 관리할 필요가 없어, 관리 부담이 적습니다

단점

  • 명시적인 뷰 매핑이 없으므로, 복잡한 뷰 로직을 처리하기 어렵습니다.
  • 다국어 지원 등의 복잡한 케이스에서는 덜 유연할 수 있습니다.


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

argument resolver란?  (0) 2023.09.03
HTTP 메시지 컨버터란?  (0) 2023.09.03
HTTP 응답 방식  (0) 2023.09.02
@RequestBody , @ModelAttribute 파라미터 어노테이션 사용방법  (0) 2023.07.05
spring 구조  (0) 2023.07.03

1.정적 리소스

  EX) 웹브라우저 정적인  HTML,CSS,JS를 제공할때 정적 리소스 사용

   정적 리소스란?

    웹서버에 저장되어 변하지않는 리소스

    /static, /resource, /public 

2.뷰 템플릿

   웹 브라우져에 동적인 HTML을 제공할떄는 뷰탬플릿

   /templates/response 

3.HTTP 메시지

   HTTP API를 제공하는 경우에는 HTML이 아닌 데이터만 전달, 즉 HTTP 메세지 바디에 JSON 형식으로 데이터를 보냄

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

HTTP 메시지 컨버터란?  (0) 2023.09.03
view Resolver란?  (0) 2023.09.03
@RequestBody , @ModelAttribute 파라미터 어노테이션 사용방법  (0) 2023.07.05
spring 구조  (0) 2023.07.03
스프링 mvc 패턴 이해  (0) 2023.06.22

+ Recent posts