Development/Spring

[Spring] 웹 프로젝트 구현(6) 프레젠테이션 계층 구현/테스트/get과 post/post로 등록처리

juyeong 2022. 2. 24. 18:54
반응형

MVC는 로직(url)과 화면을 분리하는 것이므로 프레젠테이션 계층을 구현하기 위해서 먼저 URL을 설계해야 합니다.

보통 GET,POST 두가지가 많이 쓰이는데 get 방식은 단순한 조회라면 post는 우리가 작업을 하는 url에 적합한 메소드입니다. 

앞서 비즈니스계층에서 전체목록과 crud를 구현했기 때문에 각 task에 어떤 메소드를 쓸 것인지, 파라미터는 어떤 것을 부여할 것인지, url은 어떻게 작성할지를 미리 생각하고 시작하는 것이 좋겠습니다. 이 때 작성하는게 스토리보드입니다. 처음 개발을 배울 때 스토리보드를 작성하며 '이렇게까지 세세하게 해야할까?' 생각한 적이 있었으나

개발단계에선 스토리보드가 많은 도움이 됩니다. 

 

파라미터로 전달되는 값은 없지만 디비에서 값을 불러와 화면에 추가해야하기 때문에 model을 사용합니다. 

package com.sample.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sample.service.BoardService;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j;

@Controller
@RequiredArgsConstructor
@RequestMapping("/board/*")
@Log4j
public class BoardController {
	
	private final BoardService boardservice;
	
	@GetMapping("/list")
	public void list(Model model) {
		
		log.info("list-------------------");
		
		model.addAttribute("list", boardservice.getList());
	}

}
package com.sample.controller;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({
		"file:src/main/webapp/WEB-INF/spring/root-context.xml",
		"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
@Log4j
public class BoardControllerTests {
	
	@Setter(onMethod_ = {@Autowired})
	private WebApplicationContext ctx;
	
	private MockMvc mockMvc;
	
	@Before
	public void setup() {
		this.mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();
	}
	
	@Test
	public void testList() throws Exception {
		log.info(
				mockMvc.perform(MockMvcRequestBuilders.get("/board/list"))
				.andReturn()
				.getModelAndView()
				.getModelMap()
				);
	}
	

}

mockMVC는 가짜로 request를 날려서 controller를 실행하는 것입니다. 실행하면 콘솔에는 list가 찍히지만 브라우저의 localhost:8080에선 404에러가 날거에요. view 화면을 만들어주지 않았기 때문입니다. 따라서 jsp파일을 생성하고 이엘태그로 list값을 담습니다. 출력하면 다음과 같이 나옵니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>List page test</h1>

	${list}
</body>
</html>

조회를 마쳤으니 다음은 등록을 하겠습니다.

 

	@PostMapping("/register")
	public void register(BoardVO board) {
		
		log.info("board:" +board);
		
		Long bno = boardservice.register(board);
		
		log.info("BNO :"+ bno);
	}

 

 

@Test
	public void testRegister() throws Exception {
		log.info(
				mockMvc.perform(
						MockMvcRequestBuilders.post("/board/register")
						.param("title","title 테스트")
						.param("content", "Content")
						.param("writer", "user0101")
						)
				
				.andReturn()
				);
	}

잘 등록되었습니다.

 

 

반응형