'뼈대나 근간'을 이루는 코드들의 묶음
프로그램의 기본 흐름이나 구조를 정하고, 이 구조에 자신의 코드를 추가하는 방식으로 개발할 수 있도록 하는 프로그래밍의 기본 틀을 의미
개발에 필요한 구조가 제공되고, 여기에 필요한 부분을 조립하는 형태로 개발이 진행된다.
프레임워크의 구조
비유로 표현하자면 프레임워크
는 자동차의 프레임, 즉 기본적으로 구성하고 있는 뼈대를 말하고 라이브러리
는 자동차의 기능을 하는 부품을 의미할 수 있다.
소형차를 SUV로 만들 수 없는 것 처럼 한 번 정해진 프레임을 바꿀 수 없다(Framework)
그러나 바퀴나 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바뀔 수 있다(라이브러리)
그래서 프레임워크를 바꾸겠다는 소리는 프로젝트를 처음부터 다시 하겠다는 의미가 될 수 있다.
스프링 프레임워크는 자바 플랫폼을 위한 오픈소스로 애플리케이션 프레임워크로서 간단히 스프링이라고도 불린다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
한마디로 프레임워크의 한 종류이다.
똑같이 프레임워크로 스프링은 초기 설정이 매우 힘들지만 부트는 이런 설정들이 굉장히 쉽다.
쉬운 만큼 스프링에 있는 기능들이 부트에는 없을 수 있다.
프로젝트에 필요한 의존성을 관리하고 빌드의 라이프사이클을 관리해주는 툴이다.
과거에는 Maven을, 최근에는 Gradle을 사용하는 추세이다.
스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다.
스프링 MVC의 프론트 컨트롤러가 바로 DispatcherServlet이다.
그리고 이 DispatcherServlet이 바로 스프링 MVC의 핵심이다.
DispatcherServlet도 부모 클래스에서 HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다.
DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
viewResolver 호출 : 뷰리졸버를 찾고 실행한다
view 반환 : 뷰 리졸버는 뷰의 논리이름을 물리이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
forward, redirect
기본방식 : forward방식이다.
Controlerr에서 데이터를 Model에 담는다. view는 Model에 담겨있는 데이터만 쏙쏙 골라서 화면에 바인딩 해준다.
Model객체는 컨트롤러에서 데이터를 생성해 이를 JSP, HTML 즉, view단에 전달하는 역할을 한다.
HashMap형태를 갖고 있고, 키(key)와, 밸류(value) 값을 저장한다. request.setAttribute(...)과 비슷한 역할을 한다.
model에서 view영역이 좀 더 확장
Model과 view를 동시에 설정이 가능한 컨트롤러는 Model과 view가 모두 리턴 가능
컨트롤러 : 웹 MVC의 컨트롤러 역할
서비스 : 핵심 비지니스 로직 구현
레파지토리 : 데이터베이스에 접근
도메인 : 비지니스 도메인 객체 예)회원,주문,쿠폰 등등
일반적인 계층 구조