PSA, 스프링 웹 MVC

servlet이란?

웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

웹에서 클라이언트가 어떠한 요청을 하면 그에대한 결과를 돌려줘야하는데 이를 수행하는 것이 servlet이다
즉, 어떠한 사용자가 로그인을 하려고 할 때 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누른다
그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 바로 서블릿이다

특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용하여 요청에 응답한다
  • Java Thread를 이용하여 동작한다
  • MVC 패턴에서 Controller로 이용된다
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다

Portable Service Abstraction

servlet 애플리케이션을 만들고 있음에도 servlet을 전혀 사용하지 않는다

일반적인 서블릿 형태

// /owner/create
public class OwnerServlet extends HttpServlet {

	// GET
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doGet(req, resp);
	}
	
	// POST
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doPost(req, resp);
	}
}

현재 코드 모습

@GetMapping("/owners/new")
@LogExecutionTime
public String initCreationForm(Map<String, Object> model) {
	Owner owner = new Owner();
	model.put("owner", owner);
	return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}

@PostMapping("/owners/new")
@LogExecutionTime
public String processCreationForm(@Valid Owner owner, BindingResult result) {
	if (result.hasErrors()) {
		return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
	}
	else {
		this.owners.save(owner);
		return "redirect:/owners/" + owner.getId();
	}
}

@GetMapping, @PostMapping을 이용하여 구현중이다
실제 아래에서는 위의 servlet 형태처럼 작동된다 현재 코드는 추상화를 통해 구현한 모습이다

추상화 서비스

스프링 웹 MVC

MVC(Model View Contrller)

스프링이 제공하는 스프링 웹 MVC에서 추상화 계층 알아보기

@Controller

위 애노테이션을 사용하면 요청을 매핑할수 있는 Contrller역활을 수행하는 클래스가 된다,
따라서 해당 클래스에 @GetMapping, @PostMapping을 이용해서 요청을 매핑을 한다

매핑
@GetMapping("/owners/new")와 같은 형태에서 해당 url요청이 들어왔을때 해당 애노테이션이 달린 메소드가 처리하게끔 매핑을 하는것

@RequestMapping

요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
클라이언트는 URL로 요청을 전송하고, 요청 URL을 어떤 메서드가 처리할지 여부를 결정하는 것

형태
@RequestMapping("/owners/{ownerId}")

@Transactional

A -> B -> C의 순서로 작업이진행 될 때 중간에 하나라도 안된다면 작업이 중단되는 형태를 Transaction이라 한다
즉, 다같이 되거나 하나라도 안되면 중단되는 형태 ex) 인터넷 쇼핑 물건 구매

@Cachealbe, @CacheEvict

좋은 웹페이지 즐겨찾기