깔끔하게 스프링 프레임워크 세팅하는 것에 대한 이야기 입니다.
군살없이 프레임워크를 세팅한다는 의미와 이유, 그리고 스프링 기본 설정 및 설정들의 역할에 대해서 정리해 보았습니다.
This presentation is about Spring framework.
I want to talk about the way to setting the spring framework as tidy in this presentation.
spring.io를 통해 배우는 spring 개발사례Daehwan Leespring.io 레퍼런스(sagan project)를 통해서 배우는 spring 개발사례에 대해서 발표하고 정리한 프레젠테이션입니다. 작년에 SpringOne에서 발표된 inside spring.io 내용과 저의 개인적인 분석을 통해서 내용을 정리했습니다.
'입문자' 분들을 대상으로 정리했기 때문에 가능한한 간결하고 직관적으로 내용들을 표현했으며 깊게 들어가는 내용들은 거의 생략을 하였습니다.
자세한 내용들을 원하시면 프레젠테이션 중간중간에 관련 link를 첨부하였으니 같이 보시면은 도움이 되실것 같습니다.
overview of spring4Arawn Park제 14회 한국 자바 개발자 컨퍼런스의 커뮤니티 세션에서 공유한 `overview of spring4` 의 발표 자료
스프링 프레임워크는 2004년에 출시된 이후 지금까지 많은 변화를 겪어왔습니다. 기억에 남아 있는 굴직한 변화를 더듬어 보면 버전 2.0은 XML 네임스페이스와 AspectJ 지원, 버전 2.5부터 애노테이션을 활용한 프로그래밍 기능이 추가되었습니다. 그리고 버전 3.0으로 올라가며 Java 5+ 기반으로 코드 구조가 바뀌고 자바 코드 기반 설정 기능이 추가되었습니다. 2013년 12월 13일에 버전 4.0 발표이 발표되었습니다. 주목할 변화는 바로 Java 8 지원과 제거 대상(@Deprecated)으로 선언되었던 많은 클래스와 메소드들이 삭제되었다는 것입니다. 이 외에도 많은 변화가 있습니다. 이번 시간에는 조금 높은 곳에서 내려다보는 느낌으로 무엇이 추가되었고, 어떤게 바뀌었는지 살펴보려고 합니다.
예제코드 : https://github.com/arawn/overview-of-spring4
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이스프링부트의 핵심적인 기능인 자동화 설정의 원리를 파악해보자.
관련 소스 https://github.com/sbcoba/spring-camp-2016-spring-boot-autoconfiguration
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huhhttps://github.com/JM-Lab/jm-spring-boot-init
http://jmlab.tistory.com/42 - only in korean
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK LeeJava web development 03
자바 웹 개발 시작하기
(3주차 : 스프링 웹 개발)
2011. 11. 11
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
[오픈소스컨설팅]Spring MVC Ji-Woong ChoiThe Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files.
Resource Handling in Spring MVCArawn ParkAdied 2014, 봄싹 세미나에서 발표한 `Resource Handling in Spring MVC`의 발표자료입니다.
주요 내용으로 Spring MVC에서 정적 자원(css, js, etc)을 다루는 방법을 다루고 있습니다.
데모 코드 : https://github.com/arawn/resource-handling-in-springmvc
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK LeeJava web development 02
자바 웹 개발 시작하기
(2주차 : 인터넷과 웹 어플리케이션의 이해)
2011. 11. 02
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
[Spring Camp 2013] Java Configuration 없인 못살아!Arawn ParkSpring Camp 2013 / Track B Session 2
Java Configuration은 Spring 3.0과 함께 등장했습니다. 초기에는 '이게 뭐야?' 싶은 정도로 제대로된 모습을 갖춘 상태가 아니었습니다. 뒤돌아보면 스프링 1.0 시절의 XML을 보는것 같았지요. (웃음)
하지만 3.1이 발표되며 상황이 바뀌었습니다. XML 설정을 대체할 정도로 성장했을 뿐만 아니라 더 많은 것들을 할 수 있게 되었거든요.
이 시간에는 Spring을 사용하는 대표적인 예제 PetClinic(https://github.com/arawn/spring-petclinic)을 Java Configuration으로 재구성한 모습을 코드로 보여드립니다. 그리고 제가 보는 Java Configuration의 매력요소를 공유합니다.
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이스프링부트의 핵심적인 기능인 자동화 설정의 원리를 파악해보자.
관련 소스 https://github.com/sbcoba/spring-camp-2016-spring-boot-autoconfiguration
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huhhttps://github.com/JM-Lab/jm-spring-boot-init
http://jmlab.tistory.com/42 - only in korean
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK LeeJava web development 03
자바 웹 개발 시작하기
(3주차 : 스프링 웹 개발)
2011. 11. 11
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
[오픈소스컨설팅]Spring MVC Ji-Woong ChoiThe Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files.
Resource Handling in Spring MVCArawn ParkAdied 2014, 봄싹 세미나에서 발표한 `Resource Handling in Spring MVC`의 발표자료입니다.
주요 내용으로 Spring MVC에서 정적 자원(css, js, etc)을 다루는 방법을 다루고 있습니다.
데모 코드 : https://github.com/arawn/resource-handling-in-springmvc
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK LeeJava web development 02
자바 웹 개발 시작하기
(2주차 : 인터넷과 웹 어플리케이션의 이해)
2011. 11. 02
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
[Spring Camp 2013] Java Configuration 없인 못살아!Arawn ParkSpring Camp 2013 / Track B Session 2
Java Configuration은 Spring 3.0과 함께 등장했습니다. 초기에는 '이게 뭐야?' 싶은 정도로 제대로된 모습을 갖춘 상태가 아니었습니다. 뒤돌아보면 스프링 1.0 시절의 XML을 보는것 같았지요. (웃음)
하지만 3.1이 발표되며 상황이 바뀌었습니다. XML 설정을 대체할 정도로 성장했을 뿐만 아니라 더 많은 것들을 할 수 있게 되었거든요.
이 시간에는 Spring을 사용하는 대표적인 예제 PetClinic(https://github.com/arawn/spring-petclinic)을 Java Configuration으로 재구성한 모습을 코드로 보여드립니다. 그리고 제가 보는 Java Configuration의 매력요소를 공유합니다.
스프링보다 중요한 스프링 이야기Sungchul Park2015/4/23일 OKKY 정기 모임에서 발표한 자료입니다. 클린코드 11장과 12장의 내용을 기본 틀로 해서 내용을 구성해 봤습니다.
스프링을 이용해서 생성과 이용의 관심사 분리, 횡적 관심사 분리를 하게 되면 지속적으로 SW를 개선할 수 있다는 내용입니다.
스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경mosaicnet제2회 닷넷 개발자 컨퍼런스 http://www.devddc.net
IT 트렌드 Track
#2 - 스마트폰 전문 개발사가 바라보는 급변하는 모바일 환경
출처:훈스닷넷(http://www.hoons.kr)
Java performance and trouble shootingAnna Choiwe talk about some cases of trouble shooting and how it can impact to java performance. Also, we introduce some kind of tools for checking matters efficiently and approaching easy to user.
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스에 대한 자료이니 참고하시어 많은 도움되시길 바랍니다.
교육/수강문의는 탑크리에듀홈페이지(http://www.topcredu.co.kr)를 통하여 하실 수 있습니다.
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기탑크리에듀(구로디지털단지역3번출구 2분거리)기본적인 프로젝트 스캐폴딩 도구로 빠른개발을 위한 스프링 프레임워크 서브 프로젝트 중에 하나인 Spring Boot를 사용하겠습니다. 스프링 부트는 Convention over Configuration개념을 적용하여 개발자가 처리해야 하는 반복적인 성격의 설정작업을 대신 수행하여 개발자의 수고를 덜어주는 기술입니다.
최근 개발 초기단계에서부터 코드작성을 하지는 않습니다. 처음부터 코드를 작성하면 나중에 소스 코드 덩치가 커지거나 협업을 해야 하거나 배포를 해야 할 때 관리상의 문제가 많이 생긴다는 것을 개발자들은 이미 경험으로 알고 있기 때문입니다. 그러한 이유로 코드를 작성하기 전에 먼저 코드, 리소스, 디펜던시, 연동환경 및 테스트를 거친 후 배포작업을 미리 염두에 두고 구조적으로 프로젝트를 구분하는 스캐폴딩 작업을 선행합니다.
프로젝트 관점에서 살펴보면 실제 코드를 작성하기 전에 해야 할 여러 설정 작업들이 도출 됩니다. 스프링부트는 여러 설정작업들 중 개발자를 대신해 관습을 적용하여 자동화 할 수 있는 부분들을 제공하는 기술로써, 개발자의 수고를 덜어 보다 빠른 개발이 진행될 수 있도록 해줍니다.
Elastic Search Performance Optimization - Deview 2014GruterElastic Search Performance Optimization (in Korean)
Presented by Ho-wook Jeong, search specialist at Gruter, at DeView 2014, Sep. 30 in Seoul Korea
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) 왜 정확히 알고 필요한 것만 세팅해야 할까?
속도 향상
예상 외의 오류 방지
기술의 대체가 가능
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 가 사라
진다면?
아니 스프링
프레임워크가
사라진다면?
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>
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관련 빈
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;
생성 및 의존성 주입
소멸