230313 Spring boot MVC2

kangjuju·2023년 3월 13일
0

Spring

목록 보기
6/13

lombok

lombok 을 사용하여 클라이언트로부터 요청과 데이터를 받아 표시해본다.

로그인 화면

<form action="loginget" method="get">
i d : <input type="text" name="id">
passwd : <input type="text" name="pwd">
<input type="submit" value="전송"/>
</form>

LoginController.java : Controller mapping.

  • forward가 기본값. 클라-서버이기때문에 redirect로 명시.
  • views폴더는 클라이언트의 요청으로는 접근할 수 없다.
    따라서 login.html은 WEB-INF의 밖에서 작성해야함
@Controller
public class LoginController {
	@GetMapping("login")
	public String submitCall() {
		return "redirect:http://localhost/login.html";
	}
}
  • 이제 form에서 loginget이라는 요청명으로 전송한 파라미터값을 기존방법, Spring에서의 방법을 비교해본다.

기존방법

  • request.getParameter 로 보낸값을 변수에 받고, model.addAttribute 로 model에 데이터를 반영한다.
  • return "result" 뷰를 선택
	@GetMapping("loginget")
	public String submit(HttpServletRequest request,Model model) {
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");

		String data = "";
		if(id.equals("kbs") && pwd.equals("111")) {
			data = "로그인 성공";
		}else data="로그인 실패";
		model.addAttribute("data",data);
		return "result"; //jsp명 (forwarding방식)
	}

Spring 방식

  • Spring에서는 파라미터->변수 저장을 @RequestParam을 이용하여 단번에 한다.
  • value에는 요청명, 그후엔 변수타입과 이름을 지정한다.
	@GetMapping("loginget")
	public String submit(@RequestParam(value="id")String id,
			@RequestParam(value="pwd")String pwd,Model model) {
		
		String data = "";
		if(id.equals("kbs") && pwd.equals("111")) {
			data = "로그인 성공";
		}else data="로그인 실패";
	
		model.addAttribute("data",data);
		return "result";	
	}

DTO, Bean 이용하여 요청 처리하기

  • 먼저 webapp의 입력폼이다.
*자료 입력*
<form action="sangpum.do" method="post">
품명 : <input type="text" name="sang" /><br/>
수량 : <input type="text" name="su" /><br/>
단가 : <input type="text" name="dan" /><br/>
<input type="submit" value="전송(post)" />
</form>

action 속성의 이름이 요청명으로써 컨트롤러의 inputController에게 전달될 예정이다.
입력된 3개의 데이터는 SanpumBean에게 전달. 저장되어있다.
다음은 inputController의 내용이다.

@Controller
public class InputController {
	@Autowired
	private SangpumModel sangpumModel;
	
	@GetMapping("/insdata")
	public String submitcall() {
		return "redirect:http://localhost/input.html";
	}
	
	@PostMapping("sangpum.do")
	public String submit(SangpumBean bean, Model model) {
		model.addAttribute("data",sangpumModel.compute(bean));
		return "result";
	}
}

출력모델인 SangpumModel의 메소드를 사용할 수 있도록 @Autowired 하고,
클라이언트html의 요청명인 sangpum.do의 요청을 확인하고 submit메소드를 실행한다.

submit에서는 model.addAttribute으로 모델정보를 추가한다.

model.addAttribute("data",sangpumModel.compute(bean));
return "result";

result 뷰의 data 변수에게 모델의 처리(compute)를 거친 처리결과를 넘긴다.


Logger

//로그 확인시 해당 객체를 이용
private final Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info(id+pwd);

로그(Log)란 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링하기 위한 텍스트이다.

System.out.println(); 를 사용하여 로그를 확인할 수 있지만 이보다 로그를 기록하는 클래스를 만들어 사용하는 것이 더 나은 방법이다. (실무에서 Logging 방식을 사용한다)

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

INFO로 셋팅하면, INFO, WARN, ERROR, FATAL은 기록된다.

  • FATAL : 아주 심각한 에러가 발생한 상태를 나타낸다.

  • ERROR : 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 프로그램 동작에 큰 문제가 발생했다는 것으로 즉시 문제를 조사해야 하는 것 (DB를 사용할 수 없는 상태, 중요 에러가 나오는 상황)

  • WARN : 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다. WARN에서도 2가지의 부분에선 종료가 일어남
    -명확한 문제 : 현재 데이터를 사용 불가, 캐시값 사용 등
    -잠재적 문제 : 개발 모드로 프로그램 시작, 관리자 콘솔 비밀번호가 보호되지 않고 접속 등

  • INFO : 어떠한 상태 변경과 같은 정보성 메시지를 나타낸다.

  • DEBUG : 개발시 디버그 용도로 사용하는 메시지를 나타낸다.

  • TRACE : 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.

0개의 댓글