SlideShare uma empresa Scribd logo
1 de 38
스프링 군살 없이 세팅하기
실전 스프링 프레임워크 웹 프로젝트 세팅
0_(1/2) 강사소개
강 사 : 신은철
경 력 : 개발경력 10년
2013.7 ~ KT 뮤직, 음원 메타 및 라이선스 관리 시스템 개발 및 유지보수
2007.8 ~ 2013.7 하늘연 소프트, 한국고용 정보원 워크넷 차세대 시스템 구축 외 13개 프로젝트
- 하늘연 재직 당시 다수의 공공 SI 프로젝트에 PL 로 참여하여 다양한 프레임워크를 경험함
(jsp, javaBeans, Spring, Struts, Spring + Struts, 전자정부프레임워크, Jgarnet, Spring 3.x)
- KT 뮤직에서 담당하고 있는 시스템에 Spring 3.2, Spring 4.2등을 도입함.
0_(2/2) 오늘 할 이야기들..
1. 군살없이 스프링을 세팅한다는 것은?
2. STS(Spring Tool Suite)로 스프링 프로젝트 생성하기
3. STS가 생성한 스프링 설정 살펴보기
4. DI를 이해하기 위한 Sample Code 작성하기
군살없이 스프링을 세팅한다는 것은?
1_(1/3) 군살 없이 스프링을 세팅한다는 것은?
필요한 것만 세팅
세팅된 모든 것을 알고 인지함
1_(2/3) 스프링 프레임워크를 세팅하는 방법들..
1. Dynamic Web Project 생성 후 직접 스프링 세팅
2. STS (Spring Tool Suite) 이용하여 스프링 프로젝트 생성
3. 이전 프로그램에서 스프링 설정만 복붙
4. 이전 프로그램에서 비지니스 로직 삭제 (재활용성을 극대
화 하기 위해 공통소스는 남겨둠)
1_(3/3) 왜 정확히 알고 필요한 것만 세팅해야 할까?
속도 향상
예상 외의 오류 방지
기술의 대체가 가능
STS(Spring Tool Suite) 로
스프링 프로젝트 생성하기
2_(1/3) 준비물..
● Eclipse Java EE IDE for Web Developers
(MARS.2 release 4.5.2)
● JDK 1.8.0_91
● Tomcat 8.0.36 (※ 8.0.35 버그 있음)
● Spring Tool Suite For Eclipse 3.8.0 RELEASE
2_(2/3) 프로젝트 생성하기
프로젝트 생성
: New → Other.. → Spring Legacy Project
→ Spring MVC Project
프로젝트 확인
: Tomcat add→ Tomcat port&context 확인
→ Tomcat start → 확인
2_(3/3) STS(Spring Tool Suite)로 스프링 프로젝트를 만들면?
엄청 간단한
생성방법
설정할 줄 몰라도
사용할 줄만 알면
개발이 가능
스프링 유저 코더?
STS 가 사라
진다면?
아니 스프링
프레임워크가
사라진다면?
STS가 생성한 스프링 설정 살펴보기
3_(1/10) web.xml 배포서술자(DD : Deployment Descriptor)
Web Application의 시작
웹 애플리케이션의 기본적인 설정을 위해 작성하는 파일
3_(2/10) ContextLoaderListener 설정 코드
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3_(3/10) ContextLoaderListener 는?
프로젝트 전체에서 사용되는
WebApplicationContext 를 생성
3_(4/10) root-context.xml
STS 에서는 아무것도 입력하지 않음.
일반적으로..
1. DB 관련(Datasource, Mybatis 등..)
2. PropertyService
3. MessageSource(다국어 관련)
4. Spring Security
3_(5/10) DispatcherServlet 설정 코드
<!-- Processes application requests -->
<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>
3_(6/10) DispatcherServlet 은?
• Dispatcher Servlet 내에서 사용 가능한
WebApplicationContext를 생성
• 여러 개의 DispatherServlet 설정 가능
• Front Controller의 역할
3_(7/10) DispatcherServlet 흐름
출처 : http://blog.naver.com/kim3zz/220275732627
3_(8/10) DispatcherServlet 이 없다면?
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.softcamp.spring.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
init()
destroy()
doGet()
doPost()
parameter
urlMapping
bizMapping
viewMapping
3_(9/10) servlet-context.xml
<annotation-driven /> <!-- mvc 관련 annotation 처리 -->
<!-- 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.softcamp.sample1" />
Dispatcher 에서 처리할
필요없는
Resource(img,css,js…)
영역을 설정함..
@Component 또는 @Component를
메타 어노테이션으로 갖고 있는 어
노테이션(@Controller, @Repository,
@Service를 말함)이 붙은 클래스를
빈으로 등록
MVC annotation(RequestMapping,
RequestBody, RequestParam.. 등)을
처리하는 Bean 들을 설정함..
3.0이하에서는 예외 처리가 불가
3.1부터 예외 처리가 가능
3_(10/10) ContextLoaderListener 과의 DispatcherServlet 관계
ContextLoaderListener => Root WAC(WebApplicationContext)
DispatcherServlet => Child WAC(WebApplicationContext)
Child WAC => Root WAC 참조 (O)
Root WAC => Child WAC 참조 (X)
Root WAC : 웹에 종속적이지 않은 빈 ex) 서비스, DAO
Child WAC : 웹에 종속적인 빈 ex) 컨트롤러, 스프링 MVC관련 빈
DI를 이해하기 위한
Sample Code 작성하기
with Mybatis 3.2.0
4_(1/12) Maven Library Dependency 추가 (in pom.xml)
DATA SOURCE 관련...
spring-jdbc
spring-tx
commons-dbcp 1.4
Mybatis 관련...
cglib 2.2.2
mybatis 3.2.0
mybatis-spring 1.2.0
MySql 관련...
mysql-connector-java 5.1.6
dependency 추가 후..
Project Name 우클릭 →
Maven → Update Project..
버전까지 명시한 건..
라이브러리 간(JDK 또한)에 호환성이 존재함.
본인이 쓰고자 하는 라이브러리의 호환성 확
인이 필요
4_(2/12) jdbc.properties load (in root-context.xml)
<context:property-placeholder
location="classpath:properties/jdbc.propertie
s" />
context 추가해야함
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
4_(3/12) Datasource 설정 코드 (in root-context.xml)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.dbDriverName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
4_(4/12) Mybatis - sqlSessionFactory 설정 (in root-context.xml)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations"
value="classpath:com/softcamp/sample/**/*_def_SQL.xml" />
<property name="configLocation"
value="classpath:mybatis/mybatis-config.xml" />
<!-- <property name="transactionFactory">
<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property> -->
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
4_(5/12) mybatis-config.xml
<configuration>
<settings>
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 세팅은 http://www.mybatis.org/mybatis-3/ko/configuration.html 참조
-->
</settings>
<typeAliases>
<typeAlias alias="integer" type="java.lang.Integer" />
<typeAlias alias="string" type="java.lang.String" />
<typeAlias alias="date" type="java.util.Date" />
<typeAlias alias="hashMap" type="java.util.HashMap" />
<package name="com.softcamp" />
</typeAliases>
</configuration>
4_(6/12) 출력할 데이터 조회 쿼리 작성
Hello_def_SQL.xml >>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
mapper.dtd">
<mapper namespace="hello">
<resultMap id="GreetingMessagesMap" type="helloVO">
<result column="LANGUAGE_NM" property="languageNm" javaType="string"></result>
<result column="GREETING" property="greeting" javaType="string"></result>
</resultMap>
<select id="getGreetingMessages" resultMap="GreetingMessagesMap">
SELECT LANGUAGE_NM, GREETING FROM TB_GREETINGS_BY_COUNTRY
</select>
</mapper>
4_(7/12) Spring IoC 와 DI
스프링 IoC 란?
→ 스프링 프레임워크(컨테이너)가 Bean(객체)의 제어권을 갖
는 것
DI 란?
→ Bean(객체) 간의 의존성을 주입하는 것. 이를 통하여 IoC가
이루어짐.
4_(8/12) HelloDao 생성
@Repository("helloDao")
public class HelloDao{
@Resource(name = "sqlSessionTemplate")
private SqlSession sqlSessionTemplate;
public List<HelloVO> getGreetingMessages() throws Exception{
return sqlSessionTemplate.selectList("hello.getGreetingMessages");
}
}
root-context에서 설정한
sqlSessionTemplate bean을
resource로 의존성 설정
4_(9/12) HelloService 생성
@Service("helloService")
public class HelloService{
@Resource(name = "helloDao")
private HelloDao helloDao;
public List<HelloVO> getGreetingMessages() throws Exception{
return helloDao.getGreetingMessages();
}
}
compornent-scan에 의한 WAC에 등
록된 Bean도 의존성 설정
4_(10/12) setter를 이용한 의존성 주입 방법
in HelloService
private HelloDao helloDao;
public void setHelloDao(HelloDao helloDao){
this.helloDao = helloDao;
}
in servletContext.xml
<beans:bean id="helloDao" class="com.softcamp.sample.dao.HelloDao"/>
<beans:bean id="helloService"
class="com.softcamp.sample.service.HelloService">
<beans:property name="helloDao" ref="helloDao"></beans:property>
</beans:bean>
4_(11/12) 스프링으로 객체를 제어하지 않는다면?
helloService = new HelloService();
HelloDao helloDao = new HelloDao();
helloDao.setConnectionPool(connetionPool);
helloService.setHelloDao(helloDao);
List helloMessages = helloService.getHelloMessages();
helloDao = null;
helloService = null;
생성 및 의존성 주입
소멸
4_(12/12) view 에 출력하기
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<c:forEach items="${greetingMessages}" var="itm">
<P><c:out value='${itm.languageNm }'/> : <c:out value='${itm.greeting }'/></P>
</c:forEach>
</body>
</html>
결론은?
표준 설정은 없다.
한번에 설정하지 말고
필요한 것들을
그 때 그 때 설정하자!!
Q & A

Mais conteúdo relacionado

Mais procurados

스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cliChoonghyun Yang
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC Ji-Woong Choi
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK Lee
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Woonduk-Kang
 
Spring MVC
Spring MVCSpring MVC
Spring MVCymtech
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재Hankyo
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기Ji Heon Kim
 
Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용지원 이
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재Hankyo
 

Mais procurados (20)

Spring Boot 1
Spring Boot 1Spring Boot 1
Spring Boot 1
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cli
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 
Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
 

Destaque

[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!Arawn Park
 
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 Jae-il Lee
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기Sungchul Park
 
코드품질 개선을 위한 GS SHOP 고군분투기
코드품질 개선을 위한 GS SHOP 고군분투기코드품질 개선을 위한 GS SHOP 고군분투기
코드품질 개선을 위한 GS SHOP 고군분투기Darion Kim
 
Android binding framework
Android binding frameworkAndroid binding framework
Android binding framework동우 김
 
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경mosaicnet
 
마크다운 소개
마크다운 소개마크다운 소개
마크다운 소개Sejong Park
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview민태 김
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"Ji Heon Kim
 
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?GDG Korea
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3uEngine Solutions
 
8년동안 테라에서 배운 8가지 교훈
8년동안 테라에서 배운 8가지 교훈8년동안 테라에서 배운 8가지 교훈
8년동안 테라에서 배운 8가지 교훈Harns (Nak-Hyoung) Kim
 
[2016-11-21] 고급 객체지향 프로그래밍
[2016-11-21] 고급 객체지향 프로그래밍[2016-11-21] 고급 객체지향 프로그래밍
[2016-11-21] 고급 객체지향 프로그래밍Ashal aka JOKER
 
Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shootingAnna Choi
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
Softskills
SoftskillsSoftskills
Softskills혁 권
 
SVN에서 GIT으로 전환하기
SVN에서 GIT으로 전환하기SVN에서 GIT으로 전환하기
SVN에서 GIT으로 전환하기재윤 정
 
상지근육해부학_(1)
상지근육해부학_(1)상지근육해부학_(1)
상지근육해부학_(1)Seok-Jae Hong
 
funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing FrameworkYoungSu Son
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 

Destaque (20)

[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!
 
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 
코드품질 개선을 위한 GS SHOP 고군분투기
코드품질 개선을 위한 GS SHOP 고군분투기코드품질 개선을 위한 GS SHOP 고군분투기
코드품질 개선을 위한 GS SHOP 고군분투기
 
Android binding framework
Android binding frameworkAndroid binding framework
Android binding framework
 
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
 
마크다운 소개
마크다운 소개마크다운 소개
마크다운 소개
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"
 
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?
GKAC 2014 Nov. - Android Wear 개발, 할까요 말까요?
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
8년동안 테라에서 배운 8가지 교훈
8년동안 테라에서 배운 8가지 교훈8년동안 테라에서 배운 8가지 교훈
8년동안 테라에서 배운 8가지 교훈
 
[2016-11-21] 고급 객체지향 프로그래밍
[2016-11-21] 고급 객체지향 프로그래밍[2016-11-21] 고급 객체지향 프로그래밍
[2016-11-21] 고급 객체지향 프로그래밍
 
Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shooting
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
Softskills
SoftskillsSoftskills
Softskills
 
SVN에서 GIT으로 전환하기
SVN에서 GIT으로 전환하기SVN에서 GIT으로 전환하기
SVN에서 GIT으로 전환하기
 
상지근육해부학_(1)
상지근육해부학_(1)상지근육해부학_(1)
상지근육해부학_(1)
 
funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing Framework
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 

Semelhante a 스프링군살없이세팅하기(The way to setting the Spring framework for web.)

#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJung Han
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴Sanghyuk Jung
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축JoongSeob Kim
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Gruter
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5Hyeonseok Yang
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 

Semelhante a 스프링군살없이세팅하기(The way to setting the Spring framework for web.) (20)

#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
테스트
테스트테스트
테스트
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Scala for play
Scala for playScala for play
Scala for play
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Spring portfolio2
Spring portfolio2Spring portfolio2
Spring portfolio2
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Internship backend
Internship backendInternship backend
Internship backend
 

스프링군살없이세팅하기(The way to setting the Spring framework for web.)

  • 1. 스프링 군살 없이 세팅하기 실전 스프링 프레임워크 웹 프로젝트 세팅
  • 2. 0_(1/2) 강사소개 강 사 : 신은철 경 력 : 개발경력 10년 2013.7 ~ KT 뮤직, 음원 메타 및 라이선스 관리 시스템 개발 및 유지보수 2007.8 ~ 2013.7 하늘연 소프트, 한국고용 정보원 워크넷 차세대 시스템 구축 외 13개 프로젝트 - 하늘연 재직 당시 다수의 공공 SI 프로젝트에 PL 로 참여하여 다양한 프레임워크를 경험함 (jsp, javaBeans, Spring, Struts, Spring + Struts, 전자정부프레임워크, Jgarnet, Spring 3.x) - KT 뮤직에서 담당하고 있는 시스템에 Spring 3.2, Spring 4.2등을 도입함.
  • 3. 0_(2/2) 오늘 할 이야기들.. 1. 군살없이 스프링을 세팅한다는 것은? 2. STS(Spring Tool Suite)로 스프링 프로젝트 생성하기 3. STS가 생성한 스프링 설정 살펴보기 4. DI를 이해하기 위한 Sample Code 작성하기
  • 5. 1_(1/3) 군살 없이 스프링을 세팅한다는 것은? 필요한 것만 세팅 세팅된 모든 것을 알고 인지함
  • 6. 1_(2/3) 스프링 프레임워크를 세팅하는 방법들.. 1. Dynamic Web Project 생성 후 직접 스프링 세팅 2. STS (Spring Tool Suite) 이용하여 스프링 프로젝트 생성 3. 이전 프로그램에서 스프링 설정만 복붙 4. 이전 프로그램에서 비지니스 로직 삭제 (재활용성을 극대 화 하기 위해 공통소스는 남겨둠)
  • 7. 1_(3/3) 왜 정확히 알고 필요한 것만 세팅해야 할까? 속도 향상 예상 외의 오류 방지 기술의 대체가 가능
  • 8. STS(Spring Tool Suite) 로 스프링 프로젝트 생성하기
  • 9. 2_(1/3) 준비물.. ● Eclipse Java EE IDE for Web Developers (MARS.2 release 4.5.2) ● JDK 1.8.0_91 ● Tomcat 8.0.36 (※ 8.0.35 버그 있음) ● Spring Tool Suite For Eclipse 3.8.0 RELEASE
  • 10. 2_(2/3) 프로젝트 생성하기 프로젝트 생성 : New → Other.. → Spring Legacy Project → Spring MVC Project 프로젝트 확인 : Tomcat add→ Tomcat port&context 확인 → Tomcat start → 확인
  • 11. 2_(3/3) STS(Spring Tool Suite)로 스프링 프로젝트를 만들면? 엄청 간단한 생성방법 설정할 줄 몰라도 사용할 줄만 알면 개발이 가능 스프링 유저 코더? STS 가 사라 진다면? 아니 스프링 프레임워크가 사라진다면?
  • 12. STS가 생성한 스프링 설정 살펴보기
  • 13. 3_(1/10) web.xml 배포서술자(DD : Deployment Descriptor) Web Application의 시작 웹 애플리케이션의 기본적인 설정을 위해 작성하는 파일
  • 14. 3_(2/10) ContextLoaderListener 설정 코드 <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
  • 15. 3_(3/10) ContextLoaderListener 는? 프로젝트 전체에서 사용되는 WebApplicationContext 를 생성
  • 16. 3_(4/10) root-context.xml STS 에서는 아무것도 입력하지 않음. 일반적으로.. 1. DB 관련(Datasource, Mybatis 등..) 2. PropertyService 3. MessageSource(다국어 관련) 4. Spring Security
  • 17. 3_(5/10) DispatcherServlet 설정 코드 <!-- Processes application requests --> <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>
  • 18. 3_(6/10) DispatcherServlet 은? • Dispatcher Servlet 내에서 사용 가능한 WebApplicationContext를 생성 • 여러 개의 DispatherServlet 설정 가능 • Front Controller의 역할
  • 19. 3_(7/10) DispatcherServlet 흐름 출처 : http://blog.naver.com/kim3zz/220275732627
  • 20. 3_(8/10) DispatcherServlet 이 없다면? <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.softcamp.spring.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> init() destroy() doGet() doPost() parameter urlMapping bizMapping viewMapping
  • 21. 3_(9/10) servlet-context.xml <annotation-driven /> <!-- mvc 관련 annotation 처리 --> <!-- 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.softcamp.sample1" /> Dispatcher 에서 처리할 필요없는 Resource(img,css,js…) 영역을 설정함.. @Component 또는 @Component를 메타 어노테이션으로 갖고 있는 어 노테이션(@Controller, @Repository, @Service를 말함)이 붙은 클래스를 빈으로 등록 MVC annotation(RequestMapping, RequestBody, RequestParam.. 등)을 처리하는 Bean 들을 설정함.. 3.0이하에서는 예외 처리가 불가 3.1부터 예외 처리가 가능
  • 22. 3_(10/10) ContextLoaderListener 과의 DispatcherServlet 관계 ContextLoaderListener => Root WAC(WebApplicationContext) DispatcherServlet => Child WAC(WebApplicationContext) Child WAC => Root WAC 참조 (O) Root WAC => Child WAC 참조 (X) Root WAC : 웹에 종속적이지 않은 빈 ex) 서비스, DAO Child WAC : 웹에 종속적인 빈 ex) 컨트롤러, 스프링 MVC관련 빈
  • 23. DI를 이해하기 위한 Sample Code 작성하기 with Mybatis 3.2.0
  • 24. 4_(1/12) Maven Library Dependency 추가 (in pom.xml) DATA SOURCE 관련... spring-jdbc spring-tx commons-dbcp 1.4 Mybatis 관련... cglib 2.2.2 mybatis 3.2.0 mybatis-spring 1.2.0 MySql 관련... mysql-connector-java 5.1.6 dependency 추가 후.. Project Name 우클릭 → Maven → Update Project.. 버전까지 명시한 건.. 라이브러리 간(JDK 또한)에 호환성이 존재함. 본인이 쓰고자 하는 라이브러리의 호환성 확 인이 필요
  • 25. 4_(2/12) jdbc.properties load (in root-context.xml) <context:property-placeholder location="classpath:properties/jdbc.propertie s" /> context 추가해야함 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  • 26. 4_(3/12) Datasource 설정 코드 (in root-context.xml) <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.dbDriverName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
  • 27. 4_(4/12) Mybatis - sqlSessionFactory 설정 (in root-context.xml) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/softcamp/sample/**/*_def_SQL.xml" /> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" /> <!-- <property name="transactionFactory"> <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" /> </property> --> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
  • 28. 4_(5/12) mybatis-config.xml <configuration> <settings> <setting name="defaultExecutorType" value="SIMPLE" /> <!-- 세팅은 http://www.mybatis.org/mybatis-3/ko/configuration.html 참조 --> </settings> <typeAliases> <typeAlias alias="integer" type="java.lang.Integer" /> <typeAlias alias="string" type="java.lang.String" /> <typeAlias alias="date" type="java.util.Date" /> <typeAlias alias="hashMap" type="java.util.HashMap" /> <package name="com.softcamp" /> </typeAliases> </configuration>
  • 29. 4_(6/12) 출력할 데이터 조회 쿼리 작성 Hello_def_SQL.xml >> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3- mapper.dtd"> <mapper namespace="hello"> <resultMap id="GreetingMessagesMap" type="helloVO"> <result column="LANGUAGE_NM" property="languageNm" javaType="string"></result> <result column="GREETING" property="greeting" javaType="string"></result> </resultMap> <select id="getGreetingMessages" resultMap="GreetingMessagesMap"> SELECT LANGUAGE_NM, GREETING FROM TB_GREETINGS_BY_COUNTRY </select> </mapper>
  • 30. 4_(7/12) Spring IoC 와 DI 스프링 IoC 란? → 스프링 프레임워크(컨테이너)가 Bean(객체)의 제어권을 갖 는 것 DI 란? → Bean(객체) 간의 의존성을 주입하는 것. 이를 통하여 IoC가 이루어짐.
  • 31. 4_(8/12) HelloDao 생성 @Repository("helloDao") public class HelloDao{ @Resource(name = "sqlSessionTemplate") private SqlSession sqlSessionTemplate; public List<HelloVO> getGreetingMessages() throws Exception{ return sqlSessionTemplate.selectList("hello.getGreetingMessages"); } } root-context에서 설정한 sqlSessionTemplate bean을 resource로 의존성 설정
  • 32. 4_(9/12) HelloService 생성 @Service("helloService") public class HelloService{ @Resource(name = "helloDao") private HelloDao helloDao; public List<HelloVO> getGreetingMessages() throws Exception{ return helloDao.getGreetingMessages(); } } compornent-scan에 의한 WAC에 등 록된 Bean도 의존성 설정
  • 33. 4_(10/12) setter를 이용한 의존성 주입 방법 in HelloService private HelloDao helloDao; public void setHelloDao(HelloDao helloDao){ this.helloDao = helloDao; } in servletContext.xml <beans:bean id="helloDao" class="com.softcamp.sample.dao.HelloDao"/> <beans:bean id="helloService" class="com.softcamp.sample.service.HelloService"> <beans:property name="helloDao" ref="helloDao"></beans:property> </beans:bean>
  • 34. 4_(11/12) 스프링으로 객체를 제어하지 않는다면? helloService = new HelloService(); HelloDao helloDao = new HelloDao(); helloDao.setConnectionPool(connetionPool); helloService.setHelloDao(helloDao); List helloMessages = helloService.getHelloMessages(); helloDao = null; helloService = null; 생성 및 의존성 주입 소멸
  • 35. 4_(12/12) view 에 출력하기 <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html> <head> <title>Home</title> </head> <body> <c:forEach items="${greetingMessages}" var="itm"> <P><c:out value='${itm.languageNm }'/> : <c:out value='${itm.greeting }'/></P> </c:forEach> </body> </html>
  • 37. 표준 설정은 없다. 한번에 설정하지 말고 필요한 것들을 그 때 그 때 설정하자!!
  • 38. Q & A