본문 바로가기
개발/Spring

[Spring] 프레젠테이션 층의 설계와 구현

by devhooney 2022. 7. 28.
728x90

1. 프레젠테이션 층이란

- 프레젠테이션 층은 사용자 인터페이스와 컨트롤러를 말한다.

- 프레젠테이션 층에서는 스프링MVC와 스프링 웹 플로를 이용할 수 있다.

 

2. 스프링 MVC와 REST

- URL을 자유롭게 결정할 수 있다.

- HTTP 메소드에 따라 실행할 처리를 전환할 수 있다.

- URL의 일부를 쉽게 추출해 사용할 수 있다.

 

3. 스프링 MVC의 구성 요소

이름 역할
DispatcherServlet - 프론트 컨트롤러를 담당
- 모든 HTTP 요청을 받아들여 그 밖의 오브젝트 사이의 흐름을 제어
- 기본적으로 스프링 MVC의 DispatcherServlet 클래스를 그대로 적용
Handler Mapping - 클라이언트의 요청을 바탕으로 어느 컨트롤러를 실행할 지 결정
Model - 컨트롤러에서 뷰로 넘겨줄 오브젝트를 저장하기 위한 오브젝트
- HttpServletRequest와 HttpSession처럼 String 형 키와 오브젝트를 연결해서 오브젝트를 유지
ViewResolver - View 이름을 바탕으로 View 오브젝트를 결정
View - 뷰에 화면 표시 처리를 의뢰
비즈니스 로직 - 비즈니스 로직을 실행
- 애플리케이션 개발자가 비즈니스 처리 사양에 맞게 작성
컨트롤러 - 클라이언트 요청에 맞는 프레젠테이션 층의 애플리케이션 처리를 실행해야 한다.
- 애플리케이션 개발자가 애플리케이션 처리 사양에 맞게 작성
- 클라이언트에 대해 화면 표시 처리

- 동작 순서

(1) DispatcherServlet이 브라우저로부터 요청을 받음

(2) DispatcherServlet은 요청된 URL을 핸들러 매핑 오브젝트에 넘기고 호출 대상의 컨트롤러 오브젝트를 얻어 URL에 해당하는 메소드 실행

(3) 컨트롤러 오브젝트는 비즈니스 로직으로 처리를 실행하고, 그 결과를 바탕으로 뷰에 전달할 오브젝트를 Model 오브젝트에 저장 후 컨트롤러 오브젝트는 처리 결과에 맞는 View 이름을 반환

(4) DispatcherServlet은 컨트롤러에서 반환된 View 이름을 뷰 리졸버에 전달해서 View 오브젝트를 얻음

(5) DispatcherServlet은 View 오브젝트에 화면 표시를 요청

(6) View 오브젝트는 해당하는 뷰를 호출해서 화면 표시를 요청

(7) 뷰는 Model 오브젝트에서 화면 표시에 필요한 오브젝트를 가져와 화면 표시 처리를 실행

 

- 컨트롤러의 개요와 Model 오브젝트

> 컨트롤러는 클라이언트의 요청에 따라 프레젠테이션 층의 애플리케이션 처리를 구현

> View 이름을 반환

@Controller
public class UserListController {
    @Autowired
    private UserService userService;
    
    @RequestMapping("/user")
    public String showAllUser(Model model) {
    	List<User> allUsers = userService.findAll();
        
        model.addAttribute("users", allUsers);
        
        return "user/list";
    }
}

 

- View와 뷰 리졸버

> View 인터페이스를 구현한 View 오브젝트가 애플리케이션 개발자가 작성한 뷰를 호출해서 화면 표시를 처리

> 뷰 기술은 여러가지가 있다.(나는 JSP, Thymeleaf 사용해봄) -> Spring boot 사용 시 Thymeleaf 강력 권장

// 컨트롤러-뷰 사이의 독립성이 유지X -> 뷰 리졸버의 중요성!
public View showAllPerson(Model model) {
	...(생략)...
    return new JstlView("/WEB-INF/views/user/users.jsp");
}

> JSP 사용 예시

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

// 인터페이스 생성
public interface ViewResolver{
    View resolveViewName(String viewName, Locale locale) throws Exception;
}

 

728x90

 

4. 스프링 MVC와 관련된 스프링의 기능

- 메시지 관리

(1) 메시지를 코드와 연결해 관리

(2) 국제화 대응

 

- 데이터 바인딩

(1) 사용자가 입력한 정보를 메모리의 오브젝트에 설정 처리 하는 것

@DateTimeFormat(pattern="yyyy/MM/dd")
private Date birthday;

 

- 검증 처리

(1) 검증처리는 원래 비즈니스 로직에서 처리.

(2) 준비하는 기능?

(3) Bean 검증

public class Persion {
    @Notnull
    @Size(max = 20)
    private String name;
    
    ...(생략)...
}

 

 

 

728x90