본문 바로가기
개발일지

SpringLegacy(MVC)

by 태운콩즙 2024. 2. 2.
728x90
반응형

레거시 시스템은 과거에 개발된 시스템으로 새로운 기술과 개발 방법론을 도입하지 않고 오랜 기간 동안 운영되어 온 시스템을 의미합니다 스프링 프레임워크는 시스템의 개발과 유지보스를 지원하기 위한 기능을 제공하며 최근에는 스프링부트라는 도구가 등장하여 더욱 편리한 개발 환경을 제공한다

 

레거시 시스템은 오랜기간동안 운영되어 온 시스템으로 과거에 개발된 기술과 방법론을 사용하여 개발되었습니다 이러한 시스템은 주로 업무 로직이 복잡하고 유지보스가 어렵다는 특징을 가지고 있습니다 레거시 시스템은 새로운 요구사항에 대한 대응이 어렵고 확장성이 제한적 일수 있다

 

스프링 프레임워크는 레거시 시스템의 개발과 유지보스룰 지원하기 위한 다양한 기능을 제공한다 스프링은 DI와 AOP 등의 개념을 도입하여 레거시 코드를 분리하고 유연서ㅏㅇ을 높여준다 또한 스프링은 테스트 용이성을 높여 개발자가 안정적인 코드를 작성할 수 있도록 도와준다

 

스프링 부트와의 차이점은 스프링부트는 스프링 프레임워크를 기반으로 한 개발 환경 구축 도구입니다 스프링부트는 레거시 시스템의 설정과 배포를 간편하게 관리할 수 있도록 도와줍니다 스프링부트는 자동설정과 내장서버등의 기능을 제공하여 개발자가 별도의 설정 없이도 간단하게 애플리케이션을 실행하고 배포할 수 있습니다 이를 통해 생산성을 향상하고 개발시간을 단축할 수 있다

 

주요 차이점으로는

 

설정: 스프링은 XML 또는 Java Config를 사용하여 설정을 관리하고 스프링부트는 자동 설정을 제공하여 개발자가 별도의 설정 파일을 작성하지 않아도 된다

 

내장서버: 스프링부트는 내장서버(Tomcat Jetty)를 제공하여 애플리케이션을 실행할 수 있다 스프링에서는 외부서버에 애플리케이션을 배포해야 한다

 

의존성 관리: 스프링 부트는 의존성 관리를 자동으로 처리하여 개발자가 수동으로 의존성 관리할 필요가 없습니다 스프링에서는 Maven이나 Gradle과 같은 빌드 도구를 통해 의존성을 관리해야 한다

 

-MVC 패턴 -

 

1. controller (요청에 따른 기능의 분류)
2. service ( 요청에 해당하는 기능을 제공)
3. dao (Data Access Object, DB와 CRUD를 처리)
4. dto (Data Transfer Object, data를 담아서 옮기는 역할을 담당)
vo (Value Object)
entity(DB 테이블과 매핑하여 사용하는 객체)

 

JSP(Java Server Page)

JSP= HTML + Java
  페이지의 java 코드가 컴파일되어 하나의 클래스로 변환되어 실행
  이 클래스를 servlet 클래스라고 함.

 

*핵심요소*

 

1. Directive (지시자)
  JSP 페이지에 대한 설정 정보를 지정할 때 사용.
  1) page : 문서의 타입(인코딩방식), 에러페이지 지정 등 
  2) taglib - jstl과 같은 태가 라이브러리를 지정할 때 사용
  3) include : 여러 페이지를 묶어서 하나의 페이지로 작성할 때
  다른 페이지를 포함시키기 위한 지시자.
 
 EL (Expression Language)
  표현언어. 백엔드에서 보내는 데이터를 출력하기 위한 형식을 제공
 
  형식)
  ${표현식}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<p> Server to : ${data} </P>
<p> Server to : ${num}  </P>
<hr>

<p> 번호 : ${person1.code }</p>
<p> 이름 : ${person1.strData }</p>
<p> 나이 : ${person1.numData}</p>
<p> 생일 : ${person1.dateData }</p>

<a href="mavCase">[이동]</a>
</body>
</html>


 
  Model 객체
  Back-end -> Front-end로 데이터 전송에 사용하는 객체
  DTO와 Model의 관계
   DTO는 박스, Model 은 택배차
   데이터 저장 메서드: addAttrribute("key", value);

 

	@GetMapping("/")
	public String home(Model model) {
		log.info("home()");
		// front-end로 데이터를 보낼때 사용하는 객체 -Model
		// DispatcherServlet이 생성하여 보내는 객체
		model.addAttribute("data", "서버에 보내는 문자열");
		model.addAttribute("num", 100);

		DataDto dataDto = new DataDto();
		dataDto.setCode(1);
		dataDto.setStrData("홍길동");
		dataDto.setNumData(25);
		dataDto.setDateData("2000-01-05");
		model.addAttribute("person1", dataDto); // 객체(dto)
		return "home";
	}


   
   ModelAndView 객체
   데이터와 출력될 jsp 파일의 이름을 함께 지정하는 형태
   Model은 대중교통, ModelAndView는 자가용
   ModelAndView는 객체(인스턴스)를 생성하여 사용
   데이터 저장 메서드: addObject("key",value);
   view 지정 메소드: setViewName("jsp파일명");
 

@GetMapping("mavCase")
	public ModelAndView mavCase() {
		log.info("mavCase");
		
		ModelAndView mv = new ModelAndView();
		
		// 데이터를 담아준다.
		mv.addObject("sec_data", "두번째 페이지");
		
		DataDto dataDto = new DataDto();
		dataDto.setCode(2);
		dataDto.setStrData("아무개");
		dataDto.setNumData(30);
		dataDto.setDateData("95-05-02");
		
		mv.addObject("person2", dataDto); // 객체(dto)
		
		//뷰를 지정한다
		mv.setViewName("modelAndView");
		
		return mv;
	}


 
 
Front-end -> Back-end 데이터 전송.
  Parameter로 전송
  @RequestParam("식별자") type 변수명
  메서드에서 데이터를 받을 때 사용하는 어노테이션
  식별자와 변수명은 동일하지 않아도 된다.(가급적 같은 값을 사용할 것!)
  @RequestParam은 생략이 가능함
  -반드시 식별자와 변수명이 동일해야 함.(자동 형변환도 처리)
 

@GetMapping("send")
	public String sendDate(@RequestParam("id") String id,
						   @RequestParam("num1") int num1,
						   @RequestParam("num2") int num2) {
		
		log.info("sendData()");
		
		log.info("id :" +id);
		log.info("num1 :" + num1);
		log.info("num2 :" + num2);
		
		return "redirect:/";
	}


 
Post 방식으로 전송하는 경우
전송하는 데이터가 노출되지 않아야 할 경우.
많은 양의 데이터를 전송하는 경우

PathVariable 방식

uri에 데이터를 함께 보내는 방식.(parameter와는 다른 방식)

uri/{data}

 

@GetMapping("pathSend/{data1}/{data2}")
	public String pathSend(@PathVariable String data1,
						   @PathVariable String data2) {
		log.info("pathSend()");
		log.info("data1 :" + data1 );
		log.info("date2 :"+data2);
		
		return "redirect:/";
	}
}

 

728x90
반응형

'개발일지' 카테고리의 다른 글

SpringLegacy Project -1-  (0) 2024.02.06
SpringLegacy -2-  (1) 2024.02.05
frontend -3-  (1) 2024.01.11
frontend 2일차  (1) 2024.01.10
db 마무리 ,Frontend 시작  (1) 2024.01.09