Spring Framework과정 - HiroSung/Study GitHub Wiki

한국소프트웨어산업협회. 8/6 ~ 8/10 09~18시. 신용권 강사.

Day1

준비

파일

  • 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로 해야 한글이 깨지지 않고 관리하게 됨.


Ch01. 개발 환경 구축

PJT 생성

  • 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로 변경

Maven

  • 빌드 툴 + 의존적인 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
                  
                      1.6
                      1.6
                      -Xlint:all
                      true
                      true
                  
              
              
                  org.codehaus.mojo
                  exec-maven-plugin
                  1.2.1
                  
                      org.test.int1.Main
                  
              
          
      
    
  • 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 에서 다운로드 받음.

MVC

  1. 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 /
  1. Handler mapping
  • controller는 Annotation정의된 내용을 받음.
  1. controller가 받음.
  2. ModelandView 받아 전달
  3. ViewResolver 는 무엇인지 찾음.
  • 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 설정

  • log4j.xml

    : 5자리, %c-클래스, %M 메소드, %m 메시지, %n newline

WebApplicationContext 설정 (P.7)

  • 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가 먼저 수행됨.

DispacherServlet 설정

Day2

Day3

Day4

Day5

⚠️ **GitHub.com Fallback** ⚠️