상세 컨텐츠

본문 제목

[Spring] MVC 패턴이란 ?

Backend/Spring

by hyeminyy 2024. 1. 8. 23:54

본문

728x90

 

spring MVC(Model-View-Controller) 패턴이란 ?

- 아키텍처 패턴을 기반으로 하는 Java 기반의 웹 애플리케이션 프레임워크이다.

- 소프트웨어를 구조화하고 설계하는 데 사용되며, 각 구성 요소가 역할을 명확하게 나누어 유지보수와 확장을 용이하게 만든다.

 

1. Model(모델) : 애플리케이션의 비즈니스 로직을 처리하고 데이터를 관리하는 부분

2. View (뷰) : 사용자에게 정보를 표시하고 사용자와의 상호작용을 담당하는 부분

3. Controller(컨트롤러) : 사용자의 입력을 처리하고 모델과 뷰 사이의 상호 작용을 관리하는 부분이다. 컨트롤러는 클라이언트의 요청을 수신하고, 해당 요청에 대한 응답으로 모델의 상태를 업데이트하거나 뷰를 변경한다.

 

한마디로, 소프트웨어를 모델, 뷰, 컨트롤러로 구분하여 설계하는 아키텍처 패턴으로, 데이터의 처리, 표현, 사용자 입력을 분리하여 유지보수와 확장성을 향상시키는 소프트웨어 디자인 패턴이다.

 

 

DispatcherServlet : 클라이언트의 모든 요청을 처리하고, 해당 요청을 적절한 컨트롤러에 전달한다.

HandlerMapping : 요청이 어떤 컨트롤러에 의해 처리되어야 하는지 결정하는 매핑을 제공한다.

Controller : 사용자의 요청을 처리하고 모델을 업데이트한 다음, 적절한 뷰를 선택하여 결과를 반환한다.

ViewResolcer : 뷰의 논리적인 이름을 실제 뷰 객체로 매핑하여 특정 뷰를 결정한다.

 

현재 프로젝트를 진행중인데, 간단한 MVC를 살펴봅시당

 

StaffController.java

    @GetMapping("/visit/list")
    public String getProductForStaff(@RequestHeader(name = "Authorization", required = false) String token, Model model) {
        if (token != null && !token.isEmpty()) {
            String account = jwtUtil.getUsername(token);
            List<Product> productList = staffService.getProductForStaff(account);
            model.addAttribute("items", productList);
            return "staff/staffdriveList"; 
        } else {
            return "error";
        }
    }

 

@GetMapping("/visit/list")

 - 이 어노테이션은 HTTP GET 요청이 "/visit/list" 경로로 들어왔을 때 이 메서드가 실행이 된다.

@RequestHeader(name ="Authorization", requird = false) String token

 - HTTP 요청의 헤더 중 "Authorization" 헤더를 받아오는데, 이 헤더는 클라이언트에서 서버로 인증 토큰을 전송할 때 사용된다. required = false 로 설정되어 있어 이 헤더가 없는 경우에도 메서드가 실행된다.

String account = jwtUtil.getUsername(token) 

 - 받아온 토큰을 처리하기 위해 jwtUtil 객체를 사용하여 사용자의 계정 정보를 추출한다. 이 부분에서 JWT를 디고딩하여 사용자 계정을 가져오는 것이다.

List<Product> productList = staffService.getProductForStaff(account) 

 - 계정 정보를 이용하여 staffService에서 해당 사용자에 대한 제품 목록을 조회한다.

model.addAttribute("items", productList)

 - 조회한 제품 목록을 모델 "items"라는 이름으로 추가한다. 이렇게 하면 해당 뷰에서 이 데이터에 접근할 수 있게 된다.

return "staff/staffdriveList"

 - 처리가 완료된 후에 staff/staffdriveList 뷰를 반환한다.

 return "error"

 - 토큰이 없는 경우 error 뷰를 반환한다.

 

StaffService.java

	//staff 담당된 회원의 제품 목록 조회
	@Override
	public List<Product> getProductForStaff(String account) {
		Long userId = staffRepository.getIdByAccount(account);
		
		if(userId != null) {
			List<Product> productList = staffRepository.getProductForStaff(userId);
			return productList;
		}else {
			throw new IllegalArgumentException("유효하지 않은 사용자 계정입니다.");
		}
	}

 

Long userId = staffRepository.getIdByAccount(account);

 - staffRepository를 사용하여 주어진 계정에 해당하는 사용자의 ID를 조회한다. 

if(userId != null) 

 - 검색된 사용자 ID가 null이 아닌 경우에만 아래의 블록이 실행된다. 유효한 사용자 ID가 있는 경우에만 제품 목록을 조회하고 반환하도록 하는 조건문이다.

List<Product> productList = staffRepository.getProductForStaff(userId)

 - 유효한 사용자 ID를 이용하여 해당 사용자에게 할당된 제품 목록을 staffRepository를 통해 조회한다. getProductForStaff메서드는 사용자 ID를 기반으로 제품 목록을 가져온다.

728x90

관련글 더보기