9.Spring이란? helloSpring실습

스프링이란?

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

프레임워크?

소프트웨어를 만드는 데 기본이 되는 골격 코드
반제품
완전한 애플리케이션 소프트웨어가 아니다.
문제 영역(도메인)을 해결하기 위한 잘 설계된 재사용 가능한 모듈
확장하여 비즈니스 요구사항에 맞는 완전한 애플리케이션으로 완성이 요구된다.

스프링을 이용하여 웹을 만들면 Spring MVC를 사용
DB어플리케이션 프레임 워크는 MyBatis,Spring DAO가 존재
기타(지원) 프레임워크로는 로깅(Log4J), 빌드/배포(Ant), 단위테스트(JUnit)가 존재

객체에 대한 의존성,생성,소멸 등에 대한 것을 스프링 컨테이너에게 넘긴다. 이로 인해 개발자는 비즈니스만 잘 만들면 된다. 이로인해 생산성이 향상된다.

EJB

Enterprise Java Bean의 약자.
자바 빈즈 스펙에 맞게 구현된 자바코드를 웹에서 쉽게 이용하기 위해 JSP 표준액션 태그 지원
인터페이스 구현 등 불편한 점이 많았다.

POJO(Plain Old Java Object)

EJB를 대체하여 특정클래스를 상속하거나 인터페이스를 구현하지 않는 평범한 자바 클래스(느슨한 Java Bean, Spring Bean)를 이용하며 단순하지만 EJB에서 제공하는 고급 기술을 제공한다.
-자바 언어와 꼭 필요한 API외에는 특정 규약에 종속되지 않는다.
-특정 환경에 종속되지 않는다. (기술과 비즈니스 분리)(서블릿은 서블릿 컨테이너에 종속적이였음)
-스프링에서는 스프링에 특화된 인터페이스 구현을 요구하지 않음
-스프링 자체에 의존성이 높은 클래스 확장을 거의 요구 하지 않음

Spring

1.POJO를 이용한 가볍고(lightweight) 비침투적(non-invasive) 개발
2.DI와 인터페이스 지향을 통한 느슨한 결합도(loose coupling)
3.Aspect와 공통 규약을 통한 선언적(declarative) 프로그래밍
4.Aspect와 템플릿(template)을 통한 반복적이고 상투적인(boilerplate) 코드 제거

AOP는 OOP를 더 OOP답게 쓰는것

3.1 IoC( 제어역전 ,Inverse of Control (Object) ) 과 DI( 의존관계 주입)

Spring Container = IoC(DI) Container = Bean Container = Application Context
new를 하지 않아도 컨테이너가 알아서 만들고 소멸해주고 다한다!!

AOP (Aspect Oriented Programming)

클래스의 관심에 따라 클래스를 구성하게되는데(ex:DAO는 DB접근에 관심)

횡단관심: 여러곳에서 공통으로 필요한 모듈
횡단관심은 클래스로 빼내서 모듈로 만든다.
관심의 분리 ( Separation of Concern )
횡단 관심( Crosscutting Concern )과 핵심관심( Core Concern )
핵심관심 모듈과 횡단 관심 모듈이 긴밀하게 결합 ( 핵심 모듈이 필요한 시점에..)
OOP 문제점 : 중복코드, 지저분한 코드, 생산성 저하, 재활용성의 문제점
필요한 시점에 횡단 관심 모듈을 삽입하여 동작하게 하는 기술.

EJB AOP, JDK Dynamic Proxy, AspectJ, Spring AOP

실습

다이나믹 웹 프로젝트를 생성해서 메이븐으로 바꿔줄것이다.

1.dynamic web project - next - src를 remove 하고 src/main/java 추가 -next - directory를 webapp로 변경하고 체크하고 finish
2.프로젝트 우클릭 configure- convert to maven project -그룹 id에 com.bigdata2017입력
작업이 끝나고 나면 프로젝트 옆 이미지에 m이 생긴다.

라이브러리 의존성을 추가하자

1.pom.xml을 열자. 다음과 같이 수정하자

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bigdata.2017</groupId>
<artifactId>springex</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<properties>
<org.springframework-version>4.1.1.RELEASE</org.springframework-version>
</properties>


<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Spring Web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
web.xml을 수정하자

webapp/WEB-INF/web.xml

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>springex</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>
spring-servlet.xml 생성

WEB-INF 폴더내에 생성하자

spring-servlet.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:annotation-config />
<context:component-scan base-package="com.bigdata2017.springex.controller" />

</beans>
javaResource에 com.bigdata2017.springex.controller 패키지 추가

패키지에 다음 파일 추가

HelloController.java
1
2
3
4
5
6
7
8
9
10
11
12
package com.bigdata2017.springex.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "/WEB-INF/views/hello.jsp";
}
}
WEB-INF에 views폴더 추가 후 hello.jsp 추가
hello.jsp
1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello Spring</h1>
</body>
</html>

추가적으로 해준 것들

  1. pom.xml 구성

  2. DispatcherServlet 등록( web.xml )

  3. 서블릿 애플리케이션 컨텍스트 설정 (spring-servlet.xml)

  4. Controller 작성

생략된 것들

  1. 서블릿 작성

  2. 파라미터 처리 request.getParameter()

  3. forwarding

Share