[First Shop] Spring framework (+boot)

Jason·2023년 10월 18일
0

FirstShop

목록 보기
4/5

Spring framework

이전 포스팅에서 framework 와 Spring 에 대해 정리 했지만, 간단히 다시 정리하고 넘어가야 겠다.

Spring 은 Java EE(Web) 기반 개발의 비즈니스 로직을 제외한 서비스의 공통적인 부분을 API 로 제공하여 생산성과 유지보수성을 높이도록 도와준다.

Struts framework 기반에서 Spring framework 로 리팩터링 진행하면서 개발 속도에 가장 큰 변화가 있었다.

.do 에서 @ 로

propertie 파일에서 .do 를 각 클래스 경로로 매핑하는 것은 이제 없어졌다.
대신 spring framework 도 xml 에 meta-data 를 저장해 두어야 한다.

다음은 xml 설정 내용의 일부 예시이다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:util="http://www.springframework.org/schema/util"

		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation=
				"http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans.xsd
				 http://www.springframework.org/schema/context 
				 http://www.springframework.org/schema/context/spring-context.xsd
				http://www.springframework.org/schema/util 
				http://www.springframework.org/schema/util/spring-util.xsd">
		
	<!-- 어노테이션 기반 :: Spring Framework 사용. :: filter -->				
	<context:component-scan base-package="com.model2.mvc.service">
		<context:include-filter type="annotation"	expression="org.springframework.stereotype.Service" />
		<context:include-filter type="annotation"	expression="org.springframework.stereotype.Repository" />
		<context:exclude-filter type="annotation" 	expression="org.springframework.stereotype.Controller" />
	</context:component-scan>	
  
  <!-- ■ Annotation 기반 모든 기능을 사용 할 수 있는 아래로 설정 -->
	<mvc:annotation-driven />
	...
</beans>

annotation 기반 코딩(Spring boot) 으로 넘어가는 과도기에 있는 상황
Spring framework 사용에도 편리함은 있지만, xml 기반 meta-data 가 많다.


아래는 회원관리 관련 Controller 예시이다.

//==> 회원관리 Controller
// Controller 임을 명시하면 해당 클래스의 역할을 Spring 이 인지한다.
@Controller
// "/user/*" 아래로 들어오는 모든 요청을 매핑한다.
@RequestMapping("/user/*") 
public class UserController {
	
	///Field
    // UserService 를 상시 사용 가능하도록(has a 관계) wiring 해주었다.
	@Autowired
	@Qualifier("userServiceImpl") // DI 할 Bean 이름을 지정해 주었다.
	private UserService userService;
	//setter Method 구현 않음
		
	public UserController(){
		System.out.println(this.getClass());
	} 
    
    // Spring boot 이용 시 보통 하기 방식으로 Wiring 한다.
    //@Qualifier("userServiceImpl") // DI 할 Bean 이름을 지정해 주었다.
	//private final UserService userService;
    
    //@Autowired
    //public UserController(UserService userService){
    //	this.userService = userService;
	//	System.out.println(this.getClass());
	//}
	
	
	// "/user/getUser" 로 들어온 요청 중 GET 방식 요청을 처리해주는 method
	@RequestMapping( value="getUser", method=RequestMethod.GET )
	public String getUser( @RequestParam("userId") String userId , Model model ) throws Exception {
		
		System.out.println("/user/getUser : GET");
		//Business Logic
		User user = userService.getUser(userId);
		// Model 과 View 연결
		model.addAttribute("user", user);
		// 하단 페이지로 포워드 시키도록 한다.
		return "forward:/user/getUser.jsp";
	}

기존에 C,R,U,D 등 기능 각 1개 추가되면 Action 파일(ex. GetUserAction.java) 이 늘어났었으나, 이제는 기능 하나 당 method 1개로 해결 가능해졌다.

하지만, 아직도 meta-data (xml 파일) 가 많다.
그래서 no meta-data 를 위해 Spring 에서 더욱 발전되어 나온 것이 Spring boot 이다.

Spring boot 의 장단점

- 장점 : meta-data 가 없다.
- 단점 : meta-data 가 없다.

meta-data 가 없다는게 장점이자 단점이다.

no meta-data 를 모토로 하는 Spring boot 는 annotation 하나 만으로 수 많은 설정이 필요 없이 구현에만 집중할 수 있게 해준다. 메타데이터 설정 하는데 드는 시간을 굉장히 많이 아낄 수 있다는 것은 굉장히 큰 장점이다.

하지만 단점으로도 꼽은 이유는, 해당 annotation 기반 개발 이전의 히스토리를 모르는 채로 바로 Spring boot 를 사용하다가 문제가 발생 했을 때, 문제 해결 능력이 현저히 떨어지게 되는 단점이 있다.

나도 다른 프레임워크 등을 사용하면서 분명 정보, 절차은닉 된(캡슐화 된) 기술들이 있을테니, 가급적 동작 원리를 알면서 개발할 수 있도록 주의해야겠다.


profile
어제보다 매일 1% 성장하고 있습니다.

0개의 댓글