본문 바로가기
Language/SPRING

어노테이션(@), MVC 디자인 패턴

by 박살낼겨 2021. 7. 28.
<< @ 어노테이션 >>
@MVC는 Controller 코드안에 어노테이션으로 설정함으로써
좀 더 편리하게 MVC 프로그래밍을 할 수 있다.




MVC(Model View Controller)

  Model      : 데이터(변수, 상수, 초기화 값 등)

   View        : 인터페이스요소(.jsp, .html 같은?)

                                 Controller :  데이터와 인터페이스를 이어주는 다리역할(이벤트 처리)

 


 

@의 종류 설명
★ @Controller  해당 클래스가 Controller임을 나타내기 위한 어노테이션
★ @RequestMapping 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestParam
Controller 메소드의 파라미터와 웹요청 파라미터와 맵핑하기 위한 어노테이션
@ModelAttribute Controller 메소드의 파라미터나 리턴값을 Model 객체와 바인딩하기 위한 어노테이션
@SessionAttributes Model 객체를 세션에 저장하고 사용하기 위한 어노테이션
@RequestPart Multipart 요청의 경우, 웹요청 파라미터와 맵핑가능한 어노테이션 (egov 3.0, Spring 3.1.x부터 추가)
@CommandMap Controller메소드의 파라미터를 Map형태로 받을 때 웹요청 파라미터와 맵핑(egov 3.0부터 추가)
@ControllerAdvice Controller를 보조하는 어노테이션으로 Controller에서 쓰이는 공통기능들을 모듈화하여 전역으로 쓰기 위한 어노테이션
(egov 3.0, Spring 3.2.X부터 추가)

★ 무조건 쓰이면서 자주쓰이면서 알아야하는 @

 


@ 실제 프로젝트에서 사용예

	// 아래 매핑된 이름대로 써줘야 여기까지 올 수 있다.
    @RequestMapping(value = "/useTong.do")
    
	// @RequestParam 없으면, 파라미터 값 Null 찍힘. 아무것도 안 들어있음.
    // 리턴 타입 String!!
    public String useTong(@RequestParam Map<String, Object> map, HttpServletRequest req, HttpServletResponse response, ModelMap modelMap) throws IOException {
		
        
        // 아래는 실제 프로젝트에서 쓴 내용이니 무시해도 된다.
        // 여기서부터
		HttpSession session = req.getSession();
		UserVO loginVo = (UserVO) session.getAttribute("logInVO");
		String id = loginVo.getId();

		cartCnt(req, id, modelMap);
		
        
		map.put("id", id);

		List<?> bhfInfoList = this.service.getAllBhfInfo(map);
		modelMap.addAttribute("condition", map.get("condition"));
		modelMap.addAttribute("bhfInfoList", bhfInfoList);

		UserVO vo = service.selectKaka(id);
		if (vo.getAdd1() == null) {
			return "redirect:/KakaSignIn.do?id=" + vo.getId();
		}

		if (bhfInfoList.size() == 0) {
			response.setContentType("text/html;charset=UTF-8");
			PrintWriter out = response.getWriter();
			out.print("<script>");
			out.println("alert(\"집 근처에 매장이 없습니다\");");
			out.println("history.back(-1) ");
			out.println("</script>");
			out.flush();
			response.flushBuffer();
			out.close();
		}
        // 여기까지
        
        
		return "user/useTong";
	}

※ 프로젝트 초기에 return 타입을 ModelAndView로 했었는 데 약간...올드한 느낌(?)이라는 현업자분의 소리를 듣고

   String으로 전환 사실 둘다 전혀 이상하거나 안되는거 아니라 코딩하는 사람의 마음인 것 같다