플레이데이터 - 32일차 Spring Framework 학습(4)

Kim Hyen Su·2023년 8월 16일

🌟Spring Framework

스프링 제공 기능

  • 객체 관리(IOC)
  • 👉 MVC(DI) - 느슨한 결합력과 인터페이스
  • 트랜잭션 처리(AOP)
  • 인증과 권한(Servlet Filter)

JSP MVC

  • Controller(Java code) : 요청을 받은 뒤, 요청을 처리하는 객체.
  • View(HTML code) : 출력할 페이지를 생성.
  • Model : 데이터를 처리할 때 사용되는 객체.

model1

링크텍스트

  • 기존의 JSP로만 구현한 웹 애플리케이션.
  • JSP 페이지 상에 비지니스 로직을 처리하는 코드와 웹 브라우저에 결과를 출력하기 위한 코드가 섞이게 된다.
  • 웹브라우저에서 요청한 작업을 자바빈즈나 서비스 클래스를 사용하여 처리한다.
  • Controller와 View가 물리적으로 분리되어 있지 않다.
  • 구조가 단순하여 개발 속도가 빠르다.

model2

링크텍스트

  • 클라이언트 요청 처리와 응답 처리 및 비지니스 로직 처리 부분을 분리하여 모듈화한 구조.
  • model1과 달리 Model, View, Controller가 물리적으로 구분되어 코드가 작성되어 있다.
  • 웹 브라우저의 요청에 알맞게 서블릿에서 비지니스 로직을 처리한 뒤 그 결과가 보여줄 JSP 페이지로 포워딩하고 이를 통해서 요청 흐름을 받은 JSP 페이지는 결과 화면을 웹 브라우저로 전송함.
  • 위처럼 분리하여 코드하게 되면 코드를 체계적인 구조로 작성이 가능하고, 유지보수도 용이하다.

요청 처리 흐름

  1. 웹 브라우저가 웹 서버에 웹 애플리케이션 실행 요청 시, 웹 서버는 요청을 처리할 수 있는 controller를 찾아서 요청을 전달함.
  2. controller는 model 자바 객체(DAO)의 메서드를 호출함.
  3. 데이터를 가공하여 값 객체를 생성하거나 JDBC를 사용하여 데이터베이스와의 인터렉션을 통해 값 객체를 생성함.
  4. 작업 결과를 controller에 반환.
  5. controller는 model로부터 받은 결과 값을 view에 전달함.
    • 전달 시, Dispatcher를 이용하여 forwarding하여 결과를 전달함.
  6. JSP는 전달받은 값을 참조해서 출력할 결과를 만들어 웹 서버에 전달하고, 웹 브라우저는 웹서버로부터 결과 값을 받아 화면에 출력함.

Spring MVC

  • model2 방식의 MVC 패턴.

MVC model2 방식의 변화 : Dispatcher를 집중화 하기 전의 모델

  • 기본 model2의 모델.
  • controller와 view를 구분한 모델.
  • 이 때, Dispatcher를 이용하여 forwarding하였다.

MVC model2 방식의 변화 : Dispatcher를 집중화 한 후의 모델

  • controller의 순수한 기능(Plain Old Java Object,POJO)을 분리하여 구현.
  • 이는 Dispatcher 기능과 순수 controller의 기능을 분리함으로서 결합력을 낮춰준다.
  • Dispatcher 기능은 view로 forwarding 해주는 역할로 여러개 생성하지 않고 하나만 생성한다.
  • Dispatcher의 기능은 사용자 요청이 오면 url과 매핑되는 controller에게 요청을 전달한 다음, controller에서 반환한 값을 view로 전달하는 역할을 한다.
  • Spring에서 MVC를 지원하기 위해 DispatcherServlet을 사용한다.

실습환경 준비

  • spring project download
    Spring.ioprojectsspring tools 4Spring Tools 4 for Eclipse → 버전에 해당하는 project download

  • Java EE perspective 추가
    eclipse marketplaceseclipse enterprise java and web developer tools 3.30

  • Maven repository에서 lib 추가

    • tomcat api
      - spring-webmvc

Dispatcher-servlet

  • DispatcherServlet을 사용하기 위해서는 web.xml 파일 내에 서블릿으로 등록해줘야 한다.
<servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcher</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>
  • 요청된 모든 URL을 DispatcherServlet에서 URL에 맞는 Controller를 매핑해주기 위해서 *-servlet.xml 파일을 생성하여 mapping 정보를 입력해줘야 한다.
    - * 에는 서블릿 명을 넣어준다.
  • webapp/WEB-INF/*-servlet.xml 파일 생성하기.

  • xml 파일에 beans 관련 설정 코드 추가

  • spring.io/spring-framework/docs/spring-webmvc 라이브러리 와 동일한 버전의 문서에 들어가서 <beans ...> </beans> 설정을 복사 및 붙여넣기.

  • id 값으로 URL 값을 입력한 뒤 해당 URL 요청 시, class 값으로 지정된 Controller를 실행할 수 있도록 <bean>으로 등록해준다.

dispatcher servlet을 등록한 web.xml의 url mapping 지정

  • url-pattern이 /* 인 경우 : 요청 시 url은 매핑해주지만, 출력을 위한 포워딩 시 ModelAndView 객체에 view로 설정한 'index.jsp' 리소스는 찾을 수 없게 되어 404(NOT FOUND) 에러가 발생함.

  • url-pattern이 / 인 경우 : DispatcherServlet에서 찾지 못한 경우, 해당 리소스를 찾아서 포워딩할 수 있도록 해준다.

View 페이지를 위한 위치

  • view 페이지는 controller를 거쳐서 사용자에게 출력되도록 해야 한다.
  • 즉, 외부에서 view(jsp 파일)를 직접 접근하지 못할 위치에 숨겨야 한다.
  • WEB-INF에 views 라는 폴더를 생성하여 안에 view 파일들을 숨긴다.
  • WEB-INF 파일 내부에 숨긴 view 파일들은 외부에서 접근이 불가능하지만 내부 controller에서는 접근이 가능하다. 즉, 서버 내부에서만 접근이 가능하다.

URL 경로

  • /WEB-INF/views/ ... : 절대 경로를 의미.(root에서 WEB-INF를 찾는다.)

  • WEB-INF/views/... : 상대 경로를 의미.(url 기준 위치에서 WEB-INF를 찾는다.)

  • ※ 참고 : eclipse는 webapp 폴더 내 파일을 실행 시 해당 파일명을 브라우저 경로에 써주어 요청한다.
    - ex) webapp/index -> 실행 -> localhost:8080/index url로 요청 -> 서버측에서 해당 요청 url에 매핑되는 controller 실행.

profile
백엔드 서버 엔지니어

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

글 재미있게 봤습니다.

답글 달기