깃허브에 정리해둔것들을 벨로그에 옮겼다 오타가 있을수도 있다! 유의 바란다!
사용자 인터페이스이며, 데이터 및 논리제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴
디자인 패턴은 SW개발 할때마다 모양이 비슷하게 나와서 이를 설계하는 방식으로 통일 시킴
-JSP로 구현한 기존 웹 어플리케이션은 MVC1구조로 웹 브라우저의 요청을 JSP페이지가 받아서 처리하는 구조
JSP(JavaServer Pages를 뜻하며 HTML코드에 JAVA코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구이다)
-JSP 페이지에 비즈니스 로직을 처리 하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관리 코드가 뒤섞여있는 구조
비지니스 로직:업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부,데이터 입력, 수정, 조회 및 보고서 처리 등을 수행하는 루틴
-Jsp페이지 안에서 모든 정보를 표현하고 저장하고 처리되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어짐
=>모든 클라이언트 요청과 응답을 JSP가 담당함-> 단순한 페이지 작성으로 쉽게 구현이 가능(중소형 프로젝트에 적합)
-MVC1구조와 달리 웹 브라우저의 요청을 하나의 서블릿(servlet)이 받게됨
servlet:클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 JSP페이지로 전송
=>Spring MVC가 대표적
->장점)처리작업의 분리로 인해 유지보수와 확장이 용이 (코드 재활용성 증가)
단점)구조 설계를 위한 시간이 많이 소요됨=>개발 기간이 증가
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크, 동적인 웹사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
추가) 동적 웹사이트(Dynamic Web Page):서버(Web Server)에 있는 데이터들을 스크립트에 의해 가공처리한 후 생성되어 전달되는 웹페이지
정적 웹사이트(Static Web Page):서버(Web Server)에 미리 저장된 파일(HTML파일,이미지,Java Script 파일등)이 그대로 전달되는 웹페이지
J2EE(Java 2 Enterprise Edition): 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합.
컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자 코드를 호출함
트랜잭션이나 로깅 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 성질(ACID(Atomicity,Consistency,Isolation,Durability))
로깅(Logging): 시스템 동작시 시스템 상태/작동 정보를 시간경과에 따라 기록하는것, 결과물 로그
iBATIS나 하이버네트 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할수 있는 인터페이스를 제공
영속성(Persistence):데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성
Spring은 웹 프로그래밍 개발시 거의 표준적인 방식인 Spring MVC 패턴을 사용한다.
DispatcherServlet이 Controller역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.
+스프링이 제공하는 트랜잭션 처리,DI(의존성주입),AOP(관점 지행 프로그래밍)을 손쉽게 사용할수 있다
구성요소
Dispatcher Servlet일종의 front controller(모든 리소스(Resource) 요청을 처리해주는 하나의 컨트롤러(Controller)를 두는 패턴). 클라이언트의 요청을 받아 컨트롤러에게 전달하고, 컨트롤러가 리턴한 결과값을 뷰에게 전달하여 알맞은 응답을 생성.
Handler Mapping – URL과 요청 정보를 기준으로 어떤 컨트롤러를 사용할지 결정하는 객체, DispacherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다.
HandlerAdapter - controller의 메소드들 중 요청에 맞는 적합한 메소드를 매칭한 후 처리 결과를 ModelAndView(컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음) 객체로 변환시켜줌.
ViewResolver-컨트롤러가 리턴한 뷰 이름을 기반으로 컨트롤러 처리 결과를 생성할 뷰를 결정
Spring MVC 흐름
1. DispatcherServlet이 모든 연결을 담당, 웹 브라우저로 부터 요청을 받는다
2. 요청이 들어오면 DispatcherServlet이 HandlerMapping에게 컨트롤러 검색을 요청
3. DispatcherServlert은 전달받은 컨트롤러 Bean 객체를 처리할 수 있는 HandlerAdapter에게 요청 처리를 위임
4. HandlerAdapter는 컨트롤러의 알맞은 매서드를 호출해 요청을 처리
1. Controller는 Service를 호출
2. 비지니스 로직을 수행하기 위해 DAO(Data Access Object)를 호출
3. DB에 접속하여 비지니스 로직 실행에 필요한 쿼리를 호출
4. 알맞은 쿼리를 실행하고 결과값을 반환
5. Controller는 요청 처리 결과를 HandlerAdapter에게 반환
1. Controller로 부터 받은 처리 결과를 ModelAndView로 변환시켜 DispatcherServlet에게 반환
2. DispatcherServlet은 전달받은 결과의 뷰를 ViewResolver 객체를 이용하여 검색
3. ViewResolver는 ModelAndView의 뷰 이름에 해당하는 View 객체를 찾고 생성하여 리턴
4. DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청
5. JSP를 사용하는 경우, View 객체는 JSP를 실행함으로서 브라우저에게 전송할 응답 결과를 생성함
##추가적인 내용
1. DAO(Data Access Object): Database의 data에 access하는 트랜잭션 "객체",DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트
2. DTO(Data Transfer Object)=VO(Value Object): 계층간 데이터 교환을 위한 java beans
3. Java bean(자바빈): 반적인 웹사이트는 디자이너와 개발자가 협력하여 개발, 개발자가 JSP페이지에 자바코드를 입력했을 때 디자이너 입장에는 해석하기 어렵고 효율이 떨어짐->이를 해결하기위해서 제공되는 기능이 Javabean +JSP페이지의 디자인부분과 로직부분을 나눔으로 써 복잡한 자바코드를 줄이고 프로그램의 재사용성을 증가시킴
<다른 디자인패턴과 다르게 MVC패턴을 사용하는이유>
1. 애플리케이션을 세 부분으로 분리함으로써 더 이해하기 쉬워지고 부속간의 의존성이 낮아짐
2. 개발자들이 각각 특정 로직코드에만 집중할수있도록 업무를 분할할수있음
3. 로직에 영향을 주지않고 화면 표시를 수정할 수 있다.
4. 화면 표시에 영향을 주지 않고 로직을 수정할 수 있다.
5. 뷰를 수정하지않고 사용자 동작에 반응하는 코드를 수정할 수 있다.
=>다른 디자인 패턴보다 개발자의 업무를 효율적으로 분담할수있고 유지보수가 용이하기 때문에 사용함
다른 많은 Framwork가 많은데 많은 기업들이 Spring MVC를 사용하는 이유
1. 자바 및 JVM환경의 대체언어들의 효율적이고 쉬운 엔터프라이즈 애플리케이션 개발환경을 제공
2. 애플리케이션의 요구사항과 목적에 따라 유연하게 적용가능
3. 패키지들간의 순환 의존성이 없는 깨끗한 프로젝트구성을 만들 수 있다.
4. 직관적인 API를 제공
5. 오픈소스로서 지속적인 업데이트,이전 버전에 대한 강력한 호환성을 지원 하고있음
아직 모르는것도 많고 용어 정리 및 기본 개념에 대한 지식이 부족하다고 느끼고 더욱더 자세히 꼼꼼하게 준비해야겠다고 느꼈다.