Legacy vs Boot

  1. 개요
    1) 둘 모두 같은 Spring이다.
    Legacy = Spring
    Boot = Spring Boot
    2) Legacy의 경우 초기 설정이 매우 복잡하다.
    3) Legacy와 가장 큰 차이는 Pre-set과 내장 서버
    ✔️Pre-set : 개발환경을 프로젝트 생성과 동시에 자동으로 설정
  2. 내장 WAS
    1) Boot는 자체적으로 WAS를 가지고 있음(톰캣 같은 서버 불필요)
    2) 별도의 서버 설정 불필요, 서버 구동과 프로젝트 배포가 쉬워짐

마이그레이션

  1. 의미 : 기존 시스템, 데이터, 소프트웨어 등을 새로운 환경으로 이전하는 과정을 의미합니다.
  2. 이유
    1) 성능 향상
    2) 유지 보수
    3) 기술 발전
  3. 변화
    1) 빌드 도구 : Maven -> Gradle
    2) 데이터베이스 접근 방식 : MyBatis -> JPA
    3) 화면 템플릿 엔진 : JSP -> Thymeleaf
    ✔️Legacy=Maven,MyBatis,JSP // Boot=Gradle,JPA,Thymeleaf
    이렇게 두가지로 꼭 사용하는 것이 아니다. 일반적으로 많은 개발자들이 택하는 기술일 뿐이다.

빌드 도구. Maven vs Gradle

1. 공통점
- 의존성 관리
- 빌드 자동화

2. 차이점
1) Maven
- Spring Legacy 또는 JSP/Servlet에서 주로 사용되는 빌드 도구
- pom.xml 기반
- 설정 파일(라이브러리)이 길어서 복잡함.
- 정형화된 프로젝트에 적용하기 좋음.
- 설정 파일을 직접 버전 선택해서 추가해야함.
2) Gradle
- Spring Boot에서 주로 사용되는 빌드 도구
- 스크립팅 언어 Groovy 또는 Kotlin DSL을 사용하여 설정
- 간결한 문법과 빠른 빌드 속도로 대규모 프로젝트에 적합
- 빌드 속도 최적화가 필요한 경우
- 커스터마이징 및 복잡한 로직이 필요한 프로젝트
- Spring, Java 버전에 맞춰서 알맞은 버전의 라이브러리를 가져옴.

DB 접근 방식. MyBatis vs JPA

1. 공통점
- Java 기반의 데이터베이스 연동 라이브러리
- 페이징 처리, 트랜잭션 처리, 커넥션 관리 등 기본 기능 제공
2. 차이점
1) MyBatis
- 복잡한 SQL로직 및 쿼리 최적화가 중요한 경우
2) JPA
- 단순한 SQL로직이 대부분인 경우
- 데이터베이스 독립성이 중요한 경우(DB 변경 시 JPA가 유리 / 객체 중심의 설계)
- 유지보수 및 코드 관리 효율성을 높이고 싶은 경우

뷰 템플릿. JSP vs Thymeleaf

1. 공통점
- MVC 패턴에서 View 역할 수행
- 동적 웹 페이지 생성에 적합
2. 차이점
1) JSP
- 이미 개발중인 프로젝트의 HTML과 Java 로직이 강하게 결합되어 있을 경우
- 비표준 문법으로 HTML과 Java 코드 혼합으로 유지보수 어려움
- XSS 공격에 취약함
2) Thymeleaf
- (되도록이면)순수 HTML 파일로 작성되어있음
- Spring Boot 기반의 프로젝트 개발시에 유리
- HTML 기반 문법으로 가독성과 유지보수성을 높임
- 보안, 성능, 확장성 높음


Thymeleaf 문법

예제 코드

주의사항

  • 반드시 html 파일은 templates 아래에 있어야한다.
  • controller 클래스는 루트 패키지 아래여야한다.
    - prefix : src/main/resources/templates
    - suffix : .html
  • src.main.java : 자바 코드
  • src.main.resources : 자바 외 파일
    • src.main.resources.template : 뷰 탬플릿
    • src.main.resources.static : css, js, img와 같은 콘텐츠
  • src.main.java.com.gn.demo : 프로젝트 생성시 설정한 기본 패키지

controller

기본적인 형태
단순히 루트 패키지 아래의 home.html을 보여준다.
@GetMapping(A) A는 url 주소를 의미한다. ex)http://localhost:8080/
return의 문자열은 src/main/resources/templates/ 위치의 html 이름을 말한다.

	@GetMapping({"/",""})
	public String home() {
//		실질적으로 읽는 위치는 아래와 같다. 환경 설정이 알아서 되어 있어서 되는 거다.
//		src/main/resources/templates/home.html
		return "home";
	}

ModelAndView를 사용한 형태
import org.springframework.web.servlet.ModelAndView;
ModelAndVie의 setViewName을 사용하여 html 정보를 기입한다.
addObject로 key:value 데이터를 html로 보내준다.

//	ModelAndView를 통해서 데이터와 함께 어디로 갈지 정해준다.
	@GetMapping({"/",""})
	public ModelAndView home() {
		ModelAndView mav = new ModelAndView();
		mav.setViewName("home");
		mav.addObject("age", 1);
		return mav;
	}

매개변수 Model를 사용한 형태
매개변수 Model의 addAttribute를 사용하여 key:value 데이터를 설정한다.
Model 데이터를 return html로 보내준다.

	@GetMapping({"/test1"}) // a태그의 href와 일치시키기, 인터넷 주소창에 나오는 주소가 된다.
	public String testMethod01(Model model01) {
		model01.addAttribute("name", "김철수");
		return "test"; // templates 아래에서 해당문자열"test"와 일치하는 html을 조회한다. 
	}
	@GetMapping("/bye")
	public String selsectMemberList(Model model) {
		Member member = new Member("홍길동", 111);
		model.addAttribute("member", member);
		return "bye";
	}
profile
함께 공부해요!

0개의 댓글