Spring Framework과정 - HiroSung/Study GitHub Wiki
한국소프트웨어산업협회. 8/6 ~ 8/10 09~18시. 신용권 강사.
- SpringProgramming.zip 파일을 c:\SpringProgramming 폴더를 만들어 압축을 풀어준다.
- apache,tomcat, eclipse, jdk1.8, sqldeveloper 프로그램이 존재함.
- 복사하여 소스를 작성하지 말고 직접 코딩하여 실습 참여 요청.
-
Window > Show View > Problems 선택하여 오류사항 확인
-
Maven이 설정되어 있으면 PJT 선택 후, 마우스 오른쪽 > Maven > Update Project 선택하여 다시 update 하면 됨
-
그래도 안되면, C:\SpringProgramming\add_repo_lib\add.bat 파일을 수행함. JDK의 bin 이 PATH에 설정되어 있어야 함.
# Maven 관련 jar 파일을 설치함 ../apache-maven-3.5/bin/mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar - mvn에 ojdbc6.jar 파일을 groupid, artifactid, version, 확인 - oracle 버젼은 오라클 설치 폴더 C:\Oracle\product\11.2.0\dbhome_1\jdbc\readmme.txt 파일 상단에 명시됨 Oracle JDBC Drivers release 11.2.0.1.0 production Readme.txt ==========================================================
-
Oracle 관련 warning은 추후 해결 예정.
-
기본브라우저는 chrome 으로 함.
-
Server가 있으면 삭제하고 다시 생성함. (Project Explorer과 Server View에서 확인)
-
이클립스 'SpringMVCProject' 선택하고 상단에 'Run'를 수행함. 그러면 서버가 수행되며서 크롬브라우져가 수행됨.
http://loalhost:8080/myapp/ context는 myapp 이다. E > Properties > WebServer Setting > context > Spring PJT명과 동일하게 변경 => 'SpringMVCProject'
-
S > Tomcat 선택 > 마우스 오른쪽 > Add & Remove 선택하여 기존 것 remove 하고 새로 PJT 선택하여 추가하고 완료함
-
서버 run > 크롬이 수행되고 Context가 변경된것을 확인함.
-
Eclipse Marketplace에서 STS, Properties Editor 설치
-
Properties Editor : *.properties 파일은 ascii 파일임. UTF-8로 해야 한글이 깨지지 않고 관리하게 됨.
-
File > New > Projects > Spring - Spring Legacy Project > SpringMVC Project (template 선택) > 'Next' > WebApplication Package 이름 : 사용할 도메인 이름 입력. com.mycompany.myapp
-
결정된 JDK, WAS, Servlet Verion 설정해야 함.
-
프로젝트 설명
SpringMVCProject01 -- Deployment Descriptor : /SpringMVCProject01/src/main/webapp/WEB-INF/web.xml 내용. Servlet 2.5 버젼을 사용함. -- Spring Elements : /SpringMVCProject01/src/main/webapp/WEB-INF/spring/root-context.xml, /SpringMVCProject01/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에 대한 내용 -- Java Resources : /SpringMVCProject01/src 밑에 있는 java(*.java) 파일과 resource(*.properties, *.xml)파일 내용. 하나의 war로 생성시 WEB-INF/classes 폴더에 통합됨 > A -- JavaScript Resources -- Deployed Resources : /SpringMVCProject01/src/main/webapp 폴더 내용
-
PJT선택 후 > 마우스 오른쪽 Export - WAR File 선택하여 파일을 생성하면 아래와 같은 구조로 되어 있음.
WebApplication (WAR~.war) - [common] ┐ URL로 접근 가능 - [resources] : css, javascript, img 등 저장 ┘ - [WEB-INF] ─ URL로 접근 불가 - [classes] < A - [lib] - web.xml : DD
-
Servlet 버젼 설정
- 어떤 버젼의 Servlet를 사용할지는 Tomcat에서 확인
- web.xml 페이지의 상단에서 확인함.
- 최신 것으로 변경하고자 하면 설치한 Tomcat 폴더에서 C:\SpringProgramming\apache-tomcat-9.0\webapps\ROOT\WEB-INF\web.xml 파일의 상단정보를 복사하여 변경하면 됨.
- PJT선택 > properties > Java compler - 1.8로 변경, PJT선택 > properties > Project Facets : servlet v4.0, JDK 1.8로 변경
-
빌드 툴 + 의존적인 LIB 관리
-
C:\Users\Administrator.m2 폴더에 maven job 파일이 저장됨. C:\Users\Administrator.m2\repository MAVEN 중앙저장소에 다운로드 받은 파일들이 저장됨.
-
http://search.maven.org/ 에서 설치된 Lib 파일을 검색할 수 있음.
- spring-core 로 검색해 보면 Latest 버젼확인할 수 있음.
-
MAVEN 설정파일 pom.xml
- 프로젝트 기본설정, 빌드설정, PJT관계설정, 빌드환경
- Effective POM의 내용은 수정이 불가하나, 프로젝트별 파일에 복사하여 설정하면 가능함. (재정의)
- [Dependencies] pom.xml 파일의 dependices 파일에 정의된 내용 확인 가능함.
pom.xml 내용 com.mycompany myapp : context SpringMVCProject01 war : 최종적인 산출물 파일 1.0.0-BUILD-SNAPSHOT : lib로 만들기 전 다른 PJT에 참조하고자 할때, Version 별로 참조한 PJT에서 다운받을 수 있음. : 변수 태그 정의 <변수명>변수값변수명> 1.6 3.1.1.RELEASE : spring f/w 버젼 확인 1.6.10 : 1.6.6 : log4j ==> 버전의 내용을 확인해서 아래와 같이 변경함 1.8 5.0.8.RELEASE 1.9.1 1.7.25 : 의존성 lib 정의. [Dependencies], [Dependency Hierarchy] 에서 확인 가능함. org.springframework spring-context ${org.springframework-version} : 제외해라. commons-logging 을 사용하지 않고 log4j를 사용하겠다는 것임. commons-logging commons-logging runtime : 해당 파일을 언제까지 사용할것인가 정의. runtime이면 최종 산출물까지 적용함. : Servlet 버젼. artifactId가 변경됨. javax.servlet javax.servlet-api : http://search.maven.org에서 'javax.servlet-api'로 검색 (이름이 변경됨) 4.0.1 provided : 개발하는 동안만 추가 : JSP 버젼. artifactId가 변경됨. javax.servlet.jsp javax.servlet.jsp-api 2.1 provided : JSTL 버젼 javax.servlet jstl 1.2 : 단위테스트 junit junit 4.7 test : 테스트 까지는 추가.사용되고, 최종산출물에서는 제외됨. : Effective POM은 수정이 안되니 중앙저장소가 아닌 다른 저장소 저장하려면, Repository 를 추가함 URL을 넣어주면 됨.중앙+개별 false central Central Repository https://repo.maven.apache.org/maven2 maven-eclipse-plugin 2.9 org.springframework.ide.eclipse.core.springnature org.springframework.ide.eclipse.core.springbuilder true true org.apache.maven.plugins maven-compiler-plugin 2.5.1
-
Spring F/W : https://spring.io/projects/spring-framework#learn
- 최근 버젼 및 doc 확인
-
JUnit 테스트는 위해서 Spring 5.0은 JUnit 4.1 이상 사용해야 함.
-
javax.servlet, javax.servlet.jsp 버전 및 scope 값 확인
-
build > plugin > maven-compiler-plugin version의 java 버젼 확인
-
FAQ
- .m2 파일 다시 설치. 업데이트 후, 다시 안되면 Delete하고 다시 해보자
- 톰캣이 수행이 안되는 경우. 45초 이내로 수행되어야 하는데 timeout이 걸림. timeout 시간 변경
-
http://maven.apache.org 에서 다운로드 받음.
- DispacherServlet이 처음으로 요청을 받아들이므로 web.xml에서 해당 설정을 해주어야 함.
-
web.xml의 servlet과 servlet-mapping 설정 확인
appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml classpath:spring/appServlet/servlet-context.xml 1 : 수행되는 순서 appServlet /
- Handler mapping
- controller는 Annotation정의된 내용을 받음.
- controller가 받음.
- ModelandView 받아 전달
- ViewResolver 는 무엇인지 찾음.
- http://localhost:8080/SpringMVCProject/ 가 수행되면 콘솔에 'Welcom home!' 이 찍히고, 'home'을 리턴. /**
-
Handles requests for the application home page. */ @Controller public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/") public String home() { logger.info("Welcome home!"); return "home"; // View이름. spring 2.5 버젼에서는 ModelandView 형태로 전달함. 현재는 spring 형태로 전달. }
}
- /SpringMVCProject01/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에 view에 대한 정의가 있음. <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>
-
log4j.xml
: 5자리, %c-클래스, %M 메소드, %m 메시지, %n newline
-
spring F/W은 IoC 컨테이너임.
-
Dispatcher servlet 는 여러개 정의 가능함. 정의는 web.xml에 정의
-
IoC는 객체를 관리하는 객체풀이 있음. 그래서 객체풀 설정파일인 xml 파일을 요구함.
-
객체풀 xml 파일이 *-servlet.xml 파일임. 필요에 따라 여러개 객체가 정의 될 수 있음.
-
공통으로 사용하는 dispatcher가 있다면 따로 만들기 보다는 공유객체를 관리하는 풀이 필요함. (예: DAO, Connection Pool 같은 것들)
-
리스너가 공유객체 역할을 하게 됨. web.xml의 listener에 정의(필요없으면 설정에서 삭제). context-param에 설정파일 경로 정의
org.springframework.web.context.ContextLoaderListener : 처음 deploy될때 수행됨. 공유객체 만들때 사용함. -
Q : servlet이 먼저 수행될까요? filter가 먼서 수행될까요? Filter가 먼저 수행됨.
-
web.xml 에 servlet에 init-param - param0name을 'contextConfigLocation'을 꼭! 정의해야 함.
-
경로가 중요한데 , 별도의 디렉토리에 지정한다면 'classpath:spring/appServlet/servlet-context.xml' 형태로 정의함.
-
controller로 호출되지 않는 경우 등등 정의
-
XXX-context.xml 설정파일의 root 태그 이름은 beans. beans:beans : namespace prefix. 접두사가 없는것은 root 형태에 정의된것임.
-
이클립스가 xml 유효성 검사를 상단에 정의된 beans 내용으로 함. <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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">
// *.java 파일안에 @[controller name] 정의된것을 자동으로 인식하도록 정의. 처음 deploy 될때 수행됨. 어디서 부터 찾을까?
: Controller 처리가 필요없는 서비스 정의
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> // 객체풀에 객체를 생성할것인지 정의하는 것임. 아래 prefix, suffix 값으로 정의함. ViewResolve typed로 객체를 ㅏㅈ음. <beans:property name="prefix" value="/WEB-INF/views/" /> : 객체생성시 초기화 값 <beans:property name="suffix" value=".jsp" /> </beans:bean> <context:component-scan base-package="com.mycompany.myapp" /> : annotation-driven 정의와 관련되어 있음. </beans:beans>
-
객체는 2가 방식으로 찾음 : 1) type 2) id 로 찾음.