[Spring] 1.설치 및 개념

백준호·2022년 10월 22일
0

스프링스터디

목록 보기
1/5
post-thumbnail
  • 스프링이란?

Spring이란 Java기반의 웹 프레임워크로 다양한 어플리케이션을 만들기 위한 틀을 말한다. 기존 방식보다 중복코드의 사용률을 줄여주고, 비즈니스 로직을 단순화 할 수 있는 장점이 있다. 또 다른 사람의 코드를 참조하기 쉬워 java의 활용을 좀 더 쉽게 할 수 있도록 도와준다.

사전에 준비해야 할 목록

  • jdk11
  • eclipse 설치
  • 환경설정
  • mysql8 버전
  • 퀀텀DB


## 설치방법 스프링을 설치하는 방법은 간단하다. 먼저 사전에 설치해야 할 프로그램들을 모두 설치한 후, HELP > Marketplace > sts3 를 검색해 인스톨 해주면된다. 컴퓨터에 따라 20~30분까지도 걸리며, 설치 후 이클립스를 껐다켜야한다.


spring project 생성

이클립스 상단 메뉴바에서 NEW > OTHER > SPRING > Spring Legacy project를 클릭


프로젝트네임을 입력 > Spring MVC Project 클릭 > Next > 패키지 이름 입력(@.@.@ 형식으로 자율)
project 생성완료

스프링 구성요소(1)

  • JAVA 파일 : 자바 파일들이 위치해 있는 디렉터리. 자바로 작성된 Controller, Service, DAO 파일들이 위치

  • webapp : 웹과 관련된 파일들이 위치해있는 디렉터리. html, css, js, jsp 파일이 위치. 또한 웹 어플리케이션 구동에 필요한 XML 설정파일들이 위치

  • webapp의 resources : JSP파일을 제외한 html, css, js 파일이 위치

  • spring 폴더 : 스프링 컨테이너를 생성하기 위한 스프링 설정파일이 위치

  • views 폴더 : View로 사용될 JSP파일이 위치

  • pom.xml : Maven 설정파일. Maven은 프로젝트 빌드 도구 및 관리 도구로서 pom.xml을 통해 설정


스프링 프로젝트의 구성요소(2)

스프링 프로젝트는 다음 그림과 같은 프로세스를 거쳐서 클라이언트의 요청을 처리한다.위 구성요소들은 스프링 프로젝트의 파일들에 의해서 구현된다. 각 구성요소들은 XML 설정파일이나 Java 코드를 통해서 구현할 수 있다.


위 컴포넌트 요소들에 추가로 Service, DAO를 추가하게 되면 컨트롤러에서 DB까지 데이터들을 처리하게 되는 로직들이 추가된다. 서비스(Service)는 컨트롤러에 매핑된 매서드에서 추가적인 비즈니스 로직을 객체지향적인 해결책으로 처리하는 것에 그 목적이 있다. DAO(Data Access Object)는 데이터베이스의 데이터에 접근하기 위한 인터페이스를 제공하는 객체다.

DispatcherServlet

설정DispatcherServlet은 web.xml 설정 파일에서 관련 정보를 명시한 후 스프링이 구동될 때 구현화 된다. 프로젝트를 처음 생성할 때 web.xml에 명시된 DispatcherServlet 설정 부분은 다음과 같다.

web.xml

<servlet>
	<servlet-name>appServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
	
<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet> 

태그는 DispatcherServlet을 구현하기 위해 어떤 클래스를 이용해야할 지와 초기 파라미터 정보를 포함하고 있다.

  • servlet-name : 해당 서블렛의 이름을 지정하면 이 지정된 이름을 가지고 다른 설정파일에서 해당 서블릿 정보를 참조한다. 

  • servlet-class : 어떤 클래스를 가지고 DispatcherServlet을 구현할 것인지를 명시하고 있다.

  • init-param : 초기화 파라미터에 대한 정보. servlet에 대한 설정 정보가 여기에 들어간다. 만약 초기화 파라미터에 대한 정보를 기술하지 않을 경우 스프링이 자동적으로 appServlet-context.xml 을 이용하여 스프링 컨테이너를 생성한다.

  • load-on-startup :  서블릿이 로딩될 때 로딩 순서를 결정하는 값. 톰캣이 구동되고 서블릿이 로딩되기 전 해당 서블릿에 요청이 들어오면 서블릿이 구동되기 전까지 기다려야한다. 이 중 우선순위가 높은 서블릿부터 구동할 때 쓰이는 값이다.

  • servlet-mapping에서는 서블렛이 에서 지정한 패턴으로 클라이언트 요청이 들어오면 해당 을 가진 servlet에게 이 요청을 토스하는 정보를 기술한다.

스프링 서블렛 설정파일 ( Spring Servlet Configuration File)

스프링의 IoC 컨테이너를 스프링 MVC에서는 servlet-context.xml 파일에서 설정한다고 보면 된다.

servlet-context.xml

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
	<beans:property name="suffix" value=".jsp" />
</beans:bean>

<context:component-scan base-package="com.tutorial.mvc" />
  • annotation-driven : @Controller 어노테이션을 감지하여 해당 클래스를 Controller로 등록할 수 있도록 해주는 태그

  • resources : 정적인 html문서 같은 웹 리소스들의정보를 기술하는 태그

  • <beans:bean class="org.springframework.web.servlet.view.InternalResourceBiewResolver"> : Controller가 Model를 리턴하고 DispatcherServlet이 jsp 파일을 찾을 때 쓰이는 정보를 기술하는 태그. "home"이라는 문자열을 반환하면 /WEB-INF/views/ 경로에서 접미사가 .jsp인 해당 파일을 찾는다.

  • /WEB-INF/views/home.jsp<context:component-scan> : Java 파일의 @Component로 등록된 Bean 객체를 찾도록 해주는 태그

자바 컨트롤러 파일(Java Controller File)

HomeController.java@Controller

public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}
  • @Controller : 이 어노테이션을 붙이면 servlet-context.xml에서 이것을 인식하여 컨트롤러로 등록함.

  • @RequestMapping : 스프링은 HandlerMppaing에 의해 컨트롤러가 결정된다. 이 컨트롤러에서 HandlerAdapter에 의해 실행 메서드가 결정되는 데 @RequestMapping 어노테이션이 그 정보를 제공해 준다. value에 해당하는 url이 GET 방식으로 요청이 들어올 때 해당 메서드를 실행한다.

home 메서드는 serverTime이라는 속성을 Model에 추가하고 이 값은 formattedDate 변수 안에 담긴 현재 날짜 정보를 담고있다. 이 정보는 JSP에서 클라이언트에게 전달할 HTML문서를 만들 때 쓰인다. 여기서 모델은 어떤 구조화된 데이터를 담는 객체라고 보면 된다.

마지막으로 "home" 문자열을 반환하는 데 이 문자열은 나중에 servlet-context.xml에 설정된 prefix와 suffix 정보를 참조하여 /WEB-INF/views/home.jsp 파일을 찾는 정보를 제공한다.


JSP 파일(JSP - Java Server Page File)

home.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

JSP 파일은 Model 객체를 남겨받고 그 Model 객체 안의 속성값들의 정보를 ${} 기호에 표현된 부분에 치환한다. 예로들어 ${serverTime}은 Model에서 addAttribute 메서드를 통해 추가했던 serverTime 정보인 현재 날짜를 담고 있다.


전체적인 스프링 MVC 프로젝트 로직 흐름(Spring Web application Logic Flow)

참조: https://engkimbs.tistory.com/688 [새로비:티스토리]

profile
남들이 다 아는 걸 모를 수는 없지!

0개의 댓글