Spring Boot #2

황현근·2023년 8월 17일
0

Spring Boot

목록 보기
2/3
post-thumbnail

📌 Component

구성요소라는 뜻으로 독립적인 단위 모듈을 뜻한다.
스프링 부트에선 IoC 컨테이너에 등록된 클래스를 뜻한다.

@Component 어노테이션을 사용해 직접 작성한 클래스를 IoC 컨테이너에 등록 할 수 있다.

Controller Component란?

Client의 요청을 직접적으로 받는 Component이다.
Cleint가 url을 통한 요청을 보내면 해당 url에 매칭되는 Controller가 해당 요청을 handle한다.

🤔 Controller

@Controller 어노테이션을 통해 생성한 컨트롤러는 전통적인 Spring MVC Framework에서 주로 사용하는 컨트롤러이다. 이 컨트롤러의 주요 목적은 View를 반환하기 위함이다. 즉, Client에 요청에 따라 그에 맞는 View를 찾아 반환해주는 역할을 수행한다.

사용 예시

@Controller
@RequestMapping("/user")
public class UserController {

    @Resource(name = "userService")
    private UserService userService;

    @PostMapping(value = "/info")
    public @ResponseBody User info(@RequestBody User user){
        return userService.retrieveUserInfo(user);
    }
    
    @GetMapping(value = "/infoView")
    public String infoView(Model model, @RequestParam(value = "userName", required = true) String userName){
        User user = userService.retrieveUserInfo(userName);
        model.addAttribute("user", user);
        return "/user/userInfoView";
    }

}

@RestController

@RestController@Controller@ResponseBody 어노테이션을 활용해 데이터를 반환하던 것과 같은 역할을 수행한다. 즉, @RestController는 View가 아니라 JSON와 같은 데이터를 반환하는 용도로 사용된다.

사용 예시

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

    @Resource(name = "userService")
    private UserService userService;

    @PostMapping(value = "/info1")
    public User info1(@RequestBody User user){
        return userService.retrieveUserInfo(user);
    }

    @PostMapping(value = "/info2")
    public ResponseEntity<User> info2(@RequestParam(value = "userName", required = true) String userName){
        User user = userService.retrieveUserInfo(userName);

        if(user == null){
            return ResponseEntity.noContent().build()
        }

        return ResponseEntity.ok(user)
    }

    @PostMapping(value = "/info3")
    public ResponseEntity<User> info3(@RequestParam(value = "userName", required = true) String userName){
        return Optional.ofNullable(userService.retrieveUserInfo(userName))
                .map(user -> ResponseEntity.ok(user))
                .orElse(ResponseEntity.noContent().build());
    }
}

🤔 WebConfig

SpringBoot에서 WebConfig 설정을 할 때,@EnableWebMvc, WebMvcConfigurer를 설정하는 방법이 있다.

@EnableWebMvc를 사용하거나 WebMvcConfigurer를 구현하지 않으면 아래와 같이 WebConfig 설정 시 Bean직접 등록해줘야하는 등으로 권장하지 않는 방법이라고 한다.

@Configuration
public class WebConfig {
	@Bean 
	public InternalResourceViewResolver viewResolver() {
   		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
   		viewResolver.setPrefix("/WEB-INF/jsp/");
   		viewResolver.setSuffix(".jsp");
   		return viewResolver;
	}
}

WebMvcConfigurer는 SpringBoot의 자동 설정(WebMvcAutoConfiguration)을 유지하면서 기능을 쉽게 확장할 수 있게 해준다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/jsp/",".jsp");
	}
}

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

정보 감사합니다.

답글 달기