스프링 프레임워크 기본 세팅 하는 법 + MVC 패턴 설명

728x90

 

스프링을 배우기 전에 쓰던 JSP와 각종 서블렛, 그리고 DAO VO 클래스를 졸업하고 스프링으로 넘어갔다.

 

머리가 나빠서 그런건지 급격하게 변한 양식때문에 혼란을 많이 겪었는데, 그 중에 최고는 Spring Framework 개발환경 구축이 제일 힘들었다.

 

그대로 따라했는데 @Controller 에노테이션을 넣어봐도 VIEW로 이동이 안되는거 ㅠㅜ

 

다행히 학원 동기님 중 한분의 파일로 구제 받을 수 있었다.

 

잡담은 이만하고 세팅하는법과 기본 MVC 패턴의 구조를 보도록 하자.

 

 

1. 세팅하는법:

 

일단 Eclipse를 사용하다가 넘어왔기 때문에 Eclipse를 통해서 Spring 프레임워크 개발환경을 구축한다.

이클립스 마켓플레이스에서 아래 스프링을 다운 받고 이클립스를 재실행한다.

 

그 다음에 새로운 프로젝트를 Spring Starter Project로 실행하고 안의 pom.xml, application.property, dependencies를 설정해야 하지만 이 개발환경 구축에서 너무 기가 빨려버렸다.

 

아래 파일을 다운받고 프로젝트 import를 하면 웹브라우저를 실행할 수 있는 기본적인 세팅이 전부 완료된 스프링 프로젝트를 실행할 수 있다.

 

개발환경에서 그만 고통받고 싶다. 너무 지쳤다...

SpringMain.zip
0.08MB

 

 

스프링의 기본은 전에 쓰던 MVC와 동일하지만 조금 다른 방법에 어색할 수 있다.

 

 

1. Controller

일단 controller = servlet을 보자

 

차례대로 controller의 의미는 아래 마지막으로 return되는 값을 .jsp의 파일로 보내준다는 의미이다.

service클래스에서 하던 return test.jsp로 생각하면 쉽다.

 

만약 @애노테이션을 @RestController로 하면 jsp파일로 가는 것이 아닌 화면에 그 값이 그대로 출력되어 버린다.

 

@autowired의 의미는 서비스의 객체를 생성자 없이 자동으로 만들어주기 때문에 인스턴스 선언을 생략할 수 있게 만들어주는 것. 프로그램이 자동으로 만들어준다. 따라서 실제 service의 생성자를 안써도 동작된다. = 코드의 간결성

 

@getMapping은 URL의 /경로를 지정해주는것. 아래에는 "" 공백으로 되어있기 때문에 localhost/만 해도 guguTest.jsp로 넘어간다. 만약 @getMapping("/test")로 하였다면 localhost/guguTest/test 까지 붙여줘야 아래의 메서드가 실행되서 guguTest.jsp 파일로 넘어간다.

 

ModelandView의 설명은 주석을 참조하고 @PathVariable의 의미는 ()안의 파라미터 값을 다음 값 dan에 넣는다는 의미.

따라서 getMapping에 ("{dan}")이 되어있으므로 /guguTest/5만 써도 구구단 5단이 출력된다.

 

ModelandView에서 일단 addObject를 선언하여 데이터값의 이름과 그 데이터 자체를 지정한 후, setViewName을 지정해서 해당 값을 어디 jsp 파일로 보낼건지 선언한다. 그 후에 modelandview값을 return 하면 지정한 값과 jsp파일이 연동되서 출력된다.

@Controller
@RequestMapping("/guguTest")
//페이지 경로라고 보면 됨
// Controller란 사용자의 요청을 받은 후에 데이터를 가공하고 출력하는 통로 = servlet임

public class guguTestController {
	
	@Autowired
	guguTestService gs;
	
	@GetMapping("")
	public String getgu(Model m) {
//		model 즉 서비스로 넘겨서 계산을 받아오고
//		받은 계산값을 gugu로 저장해서
		m.addAttribute("guguTest", gs.calgugu());
		
//		출력
		return "guguTest";
	}
	
//	위의 model을 사용한거는 model.addAttribute로 데이터만 저장하고
//	model and view는 데이터와(addObject) setViewName으로 페이지까지 동시 지정
	
	
//	jsp에 값을 줬으면 이제 modelview로 실질적 값을 넣을 차례
	@GetMapping("/{d}") //이런 식 guguTest/5
	public ModelAndView getgu2(@PathVariable("d") int dan) {
//		PathVariable을 통해서 parameter가 d이고 그 값이 dan이면
//		위의 getMapping에 {}를 넣어서 값만 추출
//		다만 이때 jsp 출력이 아니기 때문에 $는 생략함
		
		ModelAndView mv = new ModelAndView();
		mv.addObject("guguTest", gs.calgugu(dan));
//		위의 guguTest라는 이름으로 gs.getd의 데이터 값을 받아옴
		
		mv.setViewName("guguTest");
//		setViewName으로 그 값을 활용할 페이지 지정
		return mv;
	}
	
}

 

2. Service

 

너무 어렵게 생각하지말자. 전에 쓰던 service와 동일하게 parameter값을 받아오고 그 값이 null이거나 특정 값이라면 아래 메서드로 데이터를 가공해서 추출한다.

 

그리고 그 값을 return해주면 위의 controller클래스에서 메서드를 선언하여 값만 받아온 후 jsp(VIEW) 파일로 출력한다.

package com.tjoeun.svc;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;

@Service
public class guguTestService {

	private HttpServletRequest request;

	public guguTestService(HttpServletRequest request) {
		this.request = request;
	}
	
	public String calgugu() {
		String d = request.getParameter("d");
		
		if(d==null) {
			d = "2";
			return calgugu( Integer.valueOf(d));
		}
		else {
			return calgugu( Integer.valueOf(d));
		}
	}
	
	public String calgugu(int dan) {
		String str = "";
		for(int i = 1; i<10; i++) {
			str += String.format("%d * %d = %d<br>", dan, i, (dan*i));
		}
		return str;
	}
	
	
}

 

3. 마지막으로 VIEW인 jsp

 

정말 간단한데 controller에서 지정한 값의 이름을 ${ valuename } 의 형식으로 넣어서 JSP VIEW로 출력한다

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>구구단</title>
</head>
<body>
<h3>구구단</h3>
${guguTest}  <!-- el문자 -->
</body>
</html>
728x90