본문 바로가기
[ java ]

[Spring] spring MVC / Oracle 연동 / Maven / spring 복습(1)

by 히앤님 2020. 10. 26.
반응형
SMALL

오늘의 목표!

- spring MVC + Django => JSON P cross 데이터 시각화

- pandas 빅데이터 분석

- matplotlib 시각화

 

이번주는 데이터 수집 이후 분석에 관한 이야기를 할 것.

까먹었던 spring을 다시 복습할 기회!



[ 새로운 환경 설정 ]

빅데이터를 위한 새로운 workspace 설정하기


[1] 서버 연결

1. sts3 실행

Tomcat 9.0을 바이너리로 다운로드할 것이다.

리눅스가 아닌 윈도우 환경이니까 64 bit-window zip으로!

 

▼바이너리 파일이 뭐야?

더보기
더보기

바이너리 파일이란?

사용자 또는 프로그램이 사용하던 정보나 숫자 값을 특별한 가공 없이 그대로 파일에 저장한 파일.

우리가 많이 사용하는 .jpg, png 같은 그림파일이나 음악파일(.mp3), 실행파일(.exe) 등 다양한 실행가능 파일들이 바이너리 파일에 해당된다.

따로 우리가 읽을 수 있게 가공된 것이 아닌 그 파일 자체이므로, 우리가 읽을 수 있게 가공된, 예컨데 "우리가 쉽게 볼 수 있게끔 맨 첫번째 줄 데이터를 읽어라" 같은 명령어가 듣지 않는다. 바이너리 파일은 "10바이트를 읽어라 " 등 크기를 지정해서 읽을 수있다. 이러한 특징때문에 바이너리 파일은 따로 내용을 확인하려면 해당 파일을 볼 수 있는 프로그램이 별도로 필요하다.(윈도우에는 기본적으로 사진 읽는 프로그램, 문서 프로그램 등을 지원한다.)


톰캣 9.0 다운로드

 

2. D드라이브에 새로운 workspace 설정하기

D드라이브에 폴더 만들어서 거기로 하자.

1번에서 깔았던 톰캣도 bogdata 폴더에 넣어주었다.

 

 

3. 새로운 프로젝트 생성

File -new- dynamic web project - spring_django_1026(프로젝트 이름)

정리하기!!!

▼dynamic web project와 spring Legacy project

더보기
더보기

[요약]

Dynamic web Project => 일반 웹어플리케이션 구조
Spring legacy Project => 스프링프로젝트 구조(웹 + maven)

 

dynamic web project란?

서블릿/JSP 기반 동적 웹 어플리케이션 프로젝트.

spring Legacy project는 이제 거의 안씀, 사라질 예정.

우리가 지금 사용하는 버전 이하로 서비스되기 때문에 우리는 dynamic으로 사용할 예정.

 

spring Legacy project란?

스프링프로젝트 구조(MVC)로 웹에 maven을 합친 것. sts3에서만 지원한다.


 

▼sts 프로젝트 종류

더보기
더보기

web

  • Static Web Project : JSP와 같은 동적인 페이지가 없는 순수하게 웹 컨텐츠로만 구성되어 있는 웹 컨텐츠를 위한 프로젝트
  • Dynamic Web Project : JSP와 같이 동적인 웹페이지를 가지는 웹 애플리케이션 개발 시에 사용하는 프로젝트
  • Web fragment Project : 다른 웹 프로젝트에 하나의 라이브러리와 같은 형태로 재사용될 때 유용하다. 해당 프로젝트의 output은 jar파일로 생성되어 다르웹 프로젝트에 추가될 수 있다. web fragment는 하나의 논리적인 웹 애플리케이션의 파티션이라고 볼 수 있다.

Spring / STS(Spring Tool Suite) = Java Project + Dynamic Web Project

  • Spring Starter Project : Standalone / 웹 환경에 함께 사용하며 Spring Boot기반의 Application 
  • Spring Legacy Project : 일반적인 Spring Framework  프로젝트, 필요에 따라 Spring Framework의 라이브러리를 내장하여 이용

<Template 종류 -구조 차이>

  • Simple Java : 최상위 패키지없이 기본 Spring 구성 및 Java빌드를 사용하여 간단한 Spring 프로젝트를 작성
  • Simple Spring Maven : Spring 라이브러리의 기본 세트를 포함하는 Maven을 사용하여 간단한 Spring 프로젝트를 생성
  • Simple Spring Web Maven : MVC 구조 + Maven
  • Simple Spring Utility Project : Maven Dependencies에 Spring 관련 jar 설정, 약간의 샘플 포함 
  • Spring MVC Project : 기본적으로 MVC형태로 Maven, 여러가지 라이브러리들이 셋팅되어 생성 , 가장 많이 사용

#Spring MVC Project(약 47바이트)가 Simple Spring Web Maven(약 15바이트)에 비해 용량이 2.5배 이상 더 나감


 

 

원래 서버는 자동으로 생긴다. VM ware가 생기지만 우리는 tomcat을 사용하겠다. (1번에서 설치한 것)

정리하기!!!

▼dynamic web project 구조 

더보기
더보기

  • Project name : 프로젝트 이름
  • Target runtime : 웹 어플리케이션을 실행할 서버
  • Dynamic web module version : 서블릿 버전. 이클립스는 여기에 지정된 버전으로 소스 코드의 문법을 검사한다.
  • Source folders on build path : Java 소스 폴더
  • Default output folder : 컴파일 결과 출력 폴더
  • Context root : 웹 어플리케이션 이름. 기본값은 프로젝트 이름이다. 서버에 자동 배치할 때 이 이름으로 폴더를 만들어 배치한다. 웹 브라우저에서 실행을 요청할 때 여기에 지정된 이름을 URL에서 사용한다.
  • Content directory : 웹 콘텐츠 파일을 저장할 작업 폴더의 이름을 지정한다. 서버에 자동 배치할 때 이 폴더의 내용물을 서버의 배치 폴더로 복사한다. 폴더의 이름은 어떤 것이든 상관 없으나 협업 시 다른 개발자가 알아보기 쉽도록 가능한 기본 이름을 사용한다.
  • Generate web.xml deployment descriptor : 웹 어플리케이션 배치 설명서 파일을 자동으로 생성하는 옵션이다. 프로젝트의 WEB-INF 폴더에 web.xml 파일이 자동으로 생성된다.
디렉토리 및 파일 설명
src Java 소스 파일, 프로퍼티(.properties) 파일이 위치하는 디렉토리
build 자바 클래스 파일(.class)이 위치하는 디렉토리
Project Explorer에서는 기본적으로 class 파일은 보이지 않게 숨기므로 안의 내용은 보이지 않는다.
WebContent HTML(.html), CSS(.css), JavaScript(.js), JSP, 이미지 파일 등의 웹 콘텐츠가 위치하는 디렉토리
웹 어플리케이션을 서버에 배치할 때 이 폴더의 내용물이 그대로 복사된다.
WebContent/WEB-INF 웹 어플리케이션 설정 관련 파일들이 위치하는 디렉토리
이 폴더에 있는 파일은 클라이언트에서 요청할 수 없다.
WebContent/WEB-INF/web.xml 웹 어플리케이션 Deployment Descriptor(배치 설명서, DD파일이라고도 함)
서블릿, 필터, 리스너, 매개변수, Welcome Pages 등의 웹 어플리케이션 컴포넌트 배치 정보를 작성한다.
서블릿 컨테이너는 클라이언트의 요청을 처리할 때 이 파일의 정보를 참고하여 서블릿 클래스를 찾거나 필터를 실행하는 등의 작업을 수행한다.
WebContent/WEB-INF/lib 자바 아카이브 파일(.jar)이 위치하는 디렉토리

출처 : knowledge Repository


 

원래 서버는 자동으로 생긴다. VM ware가 생기지만 우리는 tomcat을 사용하겠다. (1번에서 설치한 것)

톰캣 9.0
톰캣 불러오기

 

우리는 web.xml 필요하다.

▼web.xml

더보기
더보기

왜 필요할까?

서블릿 3.0 구간부터 annotation (@키워드 형식으로 딱지 붙이는 것.)대체 가능하기 때문에.

 

web.xml란?

Web Application의 Deployment Descriptor(환경 파일)로서 XML 형식의 파일

web.xml에 작성되는 내용은 다음과 같다.

 

- ServletContext의 초기 파라미터

- Session의 유효시간 설정

- Servlet/JSP에 대한 정의

- Servlet/JSP 매핑

- Mime Type 매핑

- Welcome File list

- Error Pages 처리

- 리스너/필터 설정

- 보안

 

이 프로젝트에서 설정한 web.xml을 뜯어보자.

 

1. 서블릿

servlet-name : 아래 servlet-mapping에 기술주기 위한 식별자

servlet-class : 실제 서블릿 클래스, 패키지까지 정확하게 기술

init-param : 서블릿 초기화 작업에 필요한 데이터.

-> 두개 이상의 초기화 파라미터를 넘겨줄수도 있다. 그렇게 하려면 <servlet>엘리먼트 안에 위와 같은 형태의 <init-param>엘리먼트를 여러개 쓰면 된다.

이거 받으려면  getInitParameter() 를 사용해야 한다.

 <servlet>  : 서블릿 객체 설정
    <servlet-name>kosmo</servlet-name> : 객체의 이름
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> : 객체를 생성할 클래스
   
   <init-param> : 서블릿 초기화 파라미터
      <param-name>contextConfigLocation</param-name> : 파라미터 이름
      <param-value>/WEB-INF/kosmo-*.xml</param-value> : 파라미터 값
    </init-param>
 
 </servlet>

 -> 그래서 우리가 파라미터 값을 받아올 kosmo-1.xml 파일을 만든 것.

 

2. 서블릿매핑

servlet-name : 위에 servlet에 명시한 이름

urlpattern : 어떠한 URL경로로 접근할 수 있는지를 명시

  <servlet-mapping> 
    <servlet-name>kosmo</servlet-name> :일할 서블릿 객체의 이름
    <url-pattern>/</url-pattern> :클라이언트가 요청할 url 패턴
  </servlet-mapping>

 

3. context-parameter(컨텍스트 매개변수)

Context parameter는 같은 웹 어플리케이션의 서블릿들이 같이 공유할 수 있는 매개변수이다.

위의 1번의 사이에 있던 Servlet init parameter는 그 매개변수가 선언된 서블릿에서만 사용할 수 있고(1번 안에서만) 다른 서블릿은 참조할 수 없다. 여러 서블릿이 공통의 환경 정보를 사용한다면 context parameter를 사용하는게 좋다.

 

  <context-param> :DB 연결정보 관리(여기서는 config 위치 지정)
    <param-name>contextConfigLocation</param-name> : 매개변수 이름
    <param-value>/WEB-INF/spring/root-context.xml</param-value> : 매개변수 값
  </context-param>

 이것들 받으려면  getServletContext()로 해당 인스턴스를 반환받는다.

 

4. 리스너

특정 이벤트(특정한 사건)가 발생하기를 '귀 기울여' 기다리다가 실행되는 컴포넌트(메서드나 함수).
리스너는 이벤트가 발생함과 동시에 특정 행동을(메서드나 함수를 실행)하는데, 이것을 이벤트 핸들링이라고 한다.

  <listener>
    <listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
  </listener>

 

5. 필터

요청과 응답을 거른뒤 정제하는 역할.

서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다.

또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수가 있다.

보통 web.xml에 등록하고, 일반적으로 인코딩 변환 처리, XSS방어 등의 요청에 대한 처리로 사용된다.

  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>EUC-KR</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 

여기서 사용한 것은

CharacterEncodingFilter : 문자 인코딩 설정(스프링 프레임워크에서 제공하는 인자값만 잘 정의해서 쓰면 됨.)

encoding : 한글처리를 위한 인코딩 필터

forceEncording : 위의 encoding 이후 여기에서 true 하면 설정된 값으로 인코딩, false하면  HttpServletRequest 객체에 특정 인코딩 값이 들어있는 경우 그 값에 맞춰 인코딩한다.

 

filter-mapping : 위에서 설정한 모든 filter가 특정 자원에 대해 어떤 필터를 사용할지를 설정한다. 여기서는 전부 한다는 것. 만약 txt만 한다면  <url-pattern>*.txt</url-pattern> 이렇게 쓴다.

 

 

6. 기타(본문에 없는 것들)

<!-- 세션 기간 설정 -->
    <session-config>
      <session-timeout>
        30
      </session-timeout>
    </session-config>

    <!-- mime 매핑 -->
    <mime-mapping>
      <extension>txt</extension>
      <mime-type>text/plain</mime-type>
    </mime-mapping>

    <!-- 시작페이지 설정 -->
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <!-- 존재하지 않는 페이지, 404에러시 처리 페이지 설정 -->
    <error-page>
      <error-code>404</error-code>
      <location>/error.jsp</location>
    </error-page>

    <!-- 태그 라이브러리 설정 -->
    <taglib>
      <taglib-uri>taglibs</taglib-uri>
      <taglib-location>/WEB-INF/taglibs-cache.tld</taglib-location>
    </taglib>

    <!-- resource 설정 -->
    <resource-ref>
      <res-ref-name>jdbc/jack1972</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>

 

 

web.xml 생성

 

open ee 해야 java ee가 생긴다.

 

 

4. 서버 점검을 위한 기본 jsp 파일 만들기

webContent 우클릭 - new- jsp - index 파일 만들기

실행은 index.jsp 우클릭 - run as -  run on server

아직 vm ware니까 Tomcat v9.0 으로 설정해주자.

처음 설정이니까 서버 항상 톰캣 9.0이게 체크해주자.

 

크롬을 쓰기 때문에 실행 웹브라우저는 크롬으로 바꾼다.

window - web Browser - 3 Chrome

 

jsp 파일 body에 간단하게 쓴 후 run 해본다.

 

잘 켜진다.

 

 

5. Maven 설정

프로젝트 우클릭 - configure - convert to Maven Project

 

▼Build와 Maven

더보기
더보기

Build란?

소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물.

우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.

이러한 빌드를 위해 빌드 도구가 생겼는데, 프로젝트의 생성, 테스트빌드, 배포 등을 위한 프로그램이다. 코드가 복잡해지면서 라이브러리가 계속해서 늘어나고 버전 동기화가 어려워 지는 것을 해결하고자 만들어졌다. 초기 자바의 빌드도구로 Ant를 많이 사용했지만 요즘은 Maven을 사용한다.(또는 Grandle이 많이 쓰임.)

 

Maven 이란?

메이븐 ( Maven ) war 또는 jar 파일을 빌드( build ), 라이브러리 의존성( dependency ) 해결, 컴파일( compile ) , 배포 ( deploy ) 등 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이다.

Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다. Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다. 따라서 전반적인 프로젝트 관리 기능을 포함한다.

최종 빌드 순서는 compile => test => package(jar,war) 이다.


 

▼Grandle

더보기
더보기

면접에 나올 수 있으니 따로 정리할 것!!!!!

 

Gradle

Gradle이란 기본적으로 빌드 배포 도구(Build Tool)이다. 안드로이드 앱을 만들때 필요한 공식 빌드시스템이기도 하며 JAVA, C/C++, Python 등을 지원한다. 빌드툴인 Ant Builder와 같이 그루비 스크립트를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용가능하다.

기본 Maven의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle의 경우 별도의 빌드스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리등의 항목을 설정 할 수 있다.

장점으로는 스크립트 언어로 구성되어 있기때문에, XML과 달리 변수선언, if, else, for등의 로직이 구현가능하여 간결하게 구성 가능하다.

 

 

Maven vs Grandle

 

Maven은 xml 기반을 사용하고 있지만 Gradle은 자바스크립트 기반.

Maven에는 Gadle과 비교문서가 없지만, Gradle에는 비교문서가 있다.

 

Gradle이 시기적으로 늦게 나온만큼 사용성, 성능 등 비교적 뛰어난 스펙을 가지고 있다. Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다. Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다. Gradle은 메이븐보다 최대 100배 빠르다.

 

Maven의 익숙함이 아니라면 효율은 진작에 Gradle이 이기고 있다. 

(안드로이드는 Gradle로 이미 바뀌었다.)

 

협업과 러닝커브를 고려하여 여전히 Maven을 사용하는 팀이 많고 부족함 없이 잘 사용하고 있지만, 빌드타임 비용문제로 이어질경우 Gradle을 사용해야 할 것 같다. 왜냐하면 Gradle이 Maven보다 최대 100 배 빠르기 때문이다.

 


 

▼jar과 war?(출처)

더보기
더보기

둘다 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일. 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들을 패키징해주는 역할을 한다.

 

JAR (Java Archive)

Class와 같은 Java 리소스와 속성 파일, 라이브러리 및 액세서리 파일이 포함되어 있다. 쉽게말해 JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일.

JAR 파일은 원하는 구조로 구성이 가능하며 JDK(Java Development Kit)에 포함하고 있는 JRE(Java Runtime Environment)만 가지고도 실행이 가능하다.

 

 

WAR (Web Application Archive)

 servlet / jsp 컨테이너에 배치 할 수 있는 웹 어플리케이션(Web Application) 압축 파일 포맷. JSP,  SERVLET, JAR, CLASS, XML, HTML, JAVASCRIPT 등  Servlet Context 관련 파일들로 패키징되어 있다.

WAR는 웹 응용 프로그램를 위한 포맷이기 때문에 웹 관련 자원만 포함하고 있으며 이를 사용하면 웹 어플리케이션을 쉽게 배포하고 테스트 할 수 있다.

원하는 구성을 할 수 있는 JAR 포맷과 달리 WAR은 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용하며 WAR파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버 (WEB)또는 웹 컨테이너(WAS)가 필요하다.

결론) WAR 파일 = JAVA의 JAR 옵션( java - jar)을 이용해 생성하는 JAR파일의 일종으로 웹어플리케이션 전체를 패키징하기 위한 JAR파일

 

 

EAR (Enterprise Archive)

JAVA EE(Enterprise Edition)쓰이는 파일 형식으로 한 개 이상의 모듈을 단일 아카이브로 패키징 하여 어플리케이션 서버에  동시에 일관적으로 올리기 위하여 사용되는 포맷


 

메이븐 프로젝트가 생기면 pom.xml이 만들어진다.

 

▼pom.xml

더보기
더보기

POM(프로젝트 객체 모델(Project Object Model))

메이븐을 이용하는 프로젝트의 root에 존재하는 xml 파일.

하나의 자바 프로젝트에 빌드 툴을 maven으로 설정하면, 프로젝트 최상위 디렉토리에 "pom.xml"이라는 파일이 생성된다. 파일은 프로젝트마다 1개이며, pom.xml만 보면 프로젝트의 모든 설정, 의존성 등을 알 수 있다. 

 

[ 주요 기능 ]

- 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등

- 빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인(goal)등 빌드와 관련된 설정

- 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보

- POM연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

 

 

[ 프로젝트 분석 ]

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion> 
  <groupId>spring_django_1026</groupId>
  <artifactId>spring_django_1026</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

modelVersion : POM model의 버전

groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.

artifactId : 프로젝트 빌드시 파일 대표이름 이다. groupId 내에서 유일해야 한다. Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성 된다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 bospring_django_1026-0.0.1-SNAPSHOT.war 파일이 생성된다.

version  :  프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용
packaging  : 패키징 유형(jar, war, ear 등)

 

  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>

build  : 빌드에 사용할 플러그인 목록

 

<dependencies>

<dependency>
~~~~~~~~~~~~~~~~~~~~
내용
~~~~~~~~~~~~~~~~~~~~
</dependency>

</dependencies>  

dependencies : dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.


 

6. pom.xml 설정

spring 쇼핑하러 가자. (mvnrepository.com/)

 

총 9개.

1. spring context(4.3.26)

2. spring web mvc(4.3.26)

3. spring web(4.3.26)

4. spring jdbc(4.3.26)

5. jstl(1.2) - 검색 시 2.jstl의  1.2로 다운로드

6. commons fileupload(1.4)

7. jackson databind(2.10.4) -> 필수 설치

8. mybatis(3.5.4)

9. mybatis spring(2.0.4)

 

 

▼왜 3버전이 아닌 4버전인가?(출처)

 

더보기
더보기

표준 프레임워크 포털에 들어가보면, 현재 3.9까지 릴리즈 되었다. 곧 4.0 시대가 오기 때문에 내년이면 4.0의 버전을 표준으로 지정할 것이다. 정부사업 등등에서 많이 이용하겠지.(5는 jpa 베이스. 아직 현업에서 쓰지는 않음.)

 

3.0(Java5지원)

 

      • 전체 프레임워크를 하나의 spring.jar 파일로 제공하던 부분을 여러개의 jar 파일로 나누어 제공
      • SPEL(Spring Expression Language)가 도입되었다.
      • Rest API에 대한 지원이 추가되었다.
      • OXM(Object Xml Mapping)기능이 추가되어 설정을 Xml 형태로 할 수 있게 지원
      • Java annotation을 이용해서 DI의 지원이 가능하다.

4.0(Java8지원)

  • Starter Pack이 생겨서 초보 개발자들에게 큰 진입장벽인 POM 설정을 도와준다.
  • 기존에 사용하지 않지만 호환성을 위해 남겨져있던 Deprecated Package 들이 제거되었으며 Hibenate 3.6 이상, Ehchache 2.1 이상, Groovy 1.8이상, Joda-Time 2.0 이상 등 새로운 Dependency 들에 대해 지원한다.
  • Java6, Java7, Java8의 고유 기능들에 대해 지원한다. 람다식, Optional, Callback Interface 등의 기능을 Spring Framework 레벨에서 사용할 수 있다.
  • Java EE 6, 7에 대해 고려되어 있다. JPA 2.0과 Servlet 3.0에 대한 지원이 포함되어 있다는 뜻이다.
  • Groovy를 이용한 Bean 설정이 가능하다. 자세한 사용법은 GroovyBeanDefinitionReader 문서를 참조하다.
  • Core 컨테이너들의 기능 지원이 확대되어있다. 먼저 Repository 들이 좀 더 쉽게 Inject될 수 있으며, 각종 Metadata Annotation들을 이용한 Custom Annotation 작성이 가능하다. @Lazy를 이용한 Lazy Injection이나 @Order을 통한 Ordered Interface, @Profile을 통한 프로필 버전 관리가 쉬워졌다.
  • Web을 개발하기 위한 도구들이 생겼다. @RestController 같은 것들이 그것이다.
  • Web Socket이나 STOMP 등의 프로토콜을 같이 지원한다.
  • 테스트 환경이 개선되었다. Framework 레벨에서 Mock을 위한 ServletContext를 별도로 지원한다.

5.0(JDK 8+, 9 지원, Java8을 표준으로 사용)

  • 코어로직에 있어서 JDK8의 특징들이 강화되었다.
  • HTTP 메시지 코덱의 XML과 JSON 지원에 대한 구현이 Encoder와 Decoder의 사용을 통해 추상화되었다.
  • 웹에 대한 지원이 향상되었다. 특히 Protobuf 3.0 지원이 적용되었다.

 

3.0베이스면 lagercy를 쓸 수 있다. 단, 그러면 xml같은 것을 다 수동으로 수정해줘야 한다.

레거시는 4.0 버전 이상을 대응하지 않기 때문이다(멈춤)

 

빅데이터에서는 4.0을 사용해서 메이븐 기반으로 할 예정.

현업에서는 5버전 이하로 요구하는 경우가 많다.

4.0을 알아서 구글링 후 써볼 수 있도록 해보는 것.

3.0 이면 lagercy쓰면 되지만 버전업 해야 될 경우 일이 많아진다.

4.0으로 스텐다드하게 만들고 나중에 버전업할때 편할 수 있게 설정해보자. 


 

 

들어가서
메이븐 링크 복사(4.3.26버전)
복사해서 pom.xml 파일 들어가서 붙여넣기

 

다른 링크도 위처럼 검색해서 버전별로 붙여넣기

 

버전별로 붙여넣기

<dependencies>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.26.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.26.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.26.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.26.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.4</version>
</dependency>


</dependencies>  

 

저장하고 maven Dependencies에 라이브러리 들어왔는지 확인하기

라이브러리 들어갔는지 확인

 

 

7. ojdbc6 가져오기

ojdbc6.jar 가져와서 아파치의 lib에 붙여넣기

저번에 오라클 11.2.0버전 깔 때 app이 깔렸다.

D:\app\Kosmo_02\product\11.2.0\dbhome_1\jdbc\lib 에 위치해있음.

그거 아파치 lib에다가 붙여넣기.

 

 

▼ojdbc란?(출처)

더보기
더보기

ojdbc란?

자바(JAVA)를 이용해 오라클에 생성해둔 테이블에 접근해 원하는 정보를 구할 수 있다. 오라클 사이트에서 자바와 오라클 데이버베이스의 연동을 위한 ojdbc 라이브러리를 제공하고 있고,  ojbc의 클래스와 메소드들을 이용해 데이터베이스에 접근해 데이터를 받아올 수 있다. 

 

ojdbc13 : jdk1.3

ojdbc14 : jdk1.4

ojdbc5 : jdk1.5

ojdbc6 : jdk1.6

 

jdbc Driver설정을 할때 현재 자신이 사용하는 jdk버전에 맞는 ojdbc.jar를 사용해야 한다.

보통 오라클 10은 ojdbc14.jar를 사용하고 11g는 ojdbc.jar로 사용한다고 한다.

만약 jdk버전이 더 높다거나 할 경우에 가장 최신버전을 사용하면 된다.

즉, ojbdc의 숫자는 PC에 설치된 JDK버전과 관계가 있다.


 

잘 들어갔다.

이게 안들어가있으면 마이바티스 연동이 안됨.

 

 

 

8. 서버 확인하기

servers - Tomcat v9.0 - server.xml에서 포트번호 8080에서 80으로 바꿔주고 index.jsp 실행해서 서버 확인해주기

실행!
서버가 80으로 바뀌었다.

잘 실행된다.

 

 

여기까지 서버 설정 끝.

 


[2] xml과 mapping 설정

1. web.xml 수정

WEB-INF > web.xml 수정.

하단 코드 붙여넣기.

여기에 붙여넣자.

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring/root-context.xml</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>EUC-KR</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet>

<servlet-name>kosmo</servlet-name>

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

<!-- servletname-servlet.xml로 기본 빈파일로 설정이 예약되어 있다. -->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/kosmo-*.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>kosmo</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

 

Legercy는 이걸 자동으로 붙여넣어 주는 것.

 

1-1. init-param의 xml 파일 생성

<init-param>안을 보면

<param-value>/WEB-INF/kosmo-*.xml</param-value>

이 있는데 이 xml 파일을 만들어줘야한다.

WEB-INF 우클릭 - new - other - spirng bean configuration 파일 만들고 위에 이름kosmo-*.xml 과 같게 만들어줌

 

kosmo-1.xml로 이름을 설정해주었다.

 

default는 beans, context, mvc, context의 첫번째 xsd 체크!

체크 후 finish
파일 생성 완료

 

1-2. context-param의 root-context.xml 만들어주기

위와 똑같이 공통 bean을 만들어주자.

사진에서는 다른데 spring 폴더 안에 root-context.xml을 만들어주어야한다.

여기에는 DB와 view가 들어온다.

이건 공통bean이라 두개만 하면 됨.

여기서는 공용이기 때문에 mvc는 안해도 된다.

 

1-3. xml 내용 수정하기

1) root-context.xml 부터 수정하자!

viewsolver를 할껀데, class의 경우 Internalr 까지 치고 ctrl + space 하면 나온다.

 

resolver를 클릭한다.
우리는 views로 했기 때문에 property는 views에 연결하자.

추가한 코드. /beans 위에 넣어주자.

<context:annotation-config/>
<bean id='viewResolver' 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"/>
	<property name="suffix" value=".jsp"/>
	
</bean>

 

▼viewResolver란?(출처)

더보기
더보기

viewResolver란?

클라이언트로부터의 요청을 받으면 DispatcherServlet에서 HandlerMapping을 통해 Controller로 위임 처리하게 된다. 위임 처리 받은 Controller는 비즈니스 로직을 처리 후 ViewResolver를 통해 View로 데이터를 전달하게 해준다. 

 

원래 Controller에서 view에 있는 jsp 파일을 연결해주려면, "/WEB_INF/hello.jsp" 와 같이 view의 전체 경로를 적어주었다. ViewResolver를 사용하게 되면 간단하게 view 이름만 반환해서 원하는 view 페이지를 보여줄 수 있다.

ViewResolver는 사용자가 요청한 것에 대한 응답 view를 렌더링 하는 역할인데, view 이름에 해당하는 객체를 맵핑한다. 원래 DispatcherServlet가 가지고 있는 것들은 따로 등록하지 않아도 사용자 요청이 처리가 되는데, ViewResolver도 동일하다. DispatcherServlet가 가지고 있는 InternalResourceViewResolver를 사용할 수 있다.

 

이름만 어렵지, 그냥 정리하자면 view로 연결할 때 해당 객체 이름만 써서 연결하기 위해 하는 설정이다.

prefix와 suffix에 저장된 값이 앞뒤로 붙는 것.


 

2) kosmo-1.xml 수정하자!

kosmo-1.xml로 가서 컨트롤러와 연결해주자.

 

컨트롤러 패키지 경로와 같다. 이게 베이스 패키지라는 것.

 

여기도 Jasonview를 할껀데, class에서 mapping 까지 치고 ctrl + space 하면 나온다.

 

jsonview 클릭
매핑은 resources로 하자.

 

 

3) views 안에 연결할 파일 만들기

views 연결하자.

views 안에 hello.jsp 만들기.

views 안에 있는 것이 실질적으로 웹상에 띄워지는 것으로, 아까 처음에 만든 index.jsp와 연결할 것이다.

 

 

 

2. 컨트롤러 생성

src에 클래스를 만들자.

패키지 : kr.co.ikosmo.mvc.controller

이름 : HelloController

kosmo라고 했어야했어서 이름 수정해주었다.

 

3. Controller에서 실행할 index와 views를 연결하자.

1) HelloController.java  가서 views와 연결

 

requestmapping하고 링크 연결하기

 

 

컨트롤러에서 우리는 처음 만들었던 hello 모델을 views의 hello와 연결해주었다.

 

2) index.jsp 가서 링크 만들기

첫 페이지에서 Hello 라는 글자를 누르면 views의 hello로 가게 하자.

링크 연결

 

3) hello.jsp 가서 링크 만들기

첫 페이지에서 Hello.jsp 에 표시하기.

 

 

 

index.jsp를 실행하면?

실행 안됨ㅠㅠㅠ

이유 ) WEB-INF 폴더 안에 sping 폴더 생성 후 거기에 root-context.xml 만들었어야함.

2. return에 Hello!라고 해놨음....

클릭하면
잘 나온다

 


[3] Oracle 11g와 연결

 

1. META-INF에 context.xml 파일 만들기

만들고 내용 입력

<Context>
<Resource
	name ="jdbc/myora"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="oracle.jdbc.driver.OracleDriver"
	url="jdbc:oracle:thin:@localhost:1522:orcl"
	username="kosmorpa"
	password="test00"
	maxActive="20"
	maxIdle="10"
	maxWait="-1"
/>
</Context>

localhost 잘못써서 에러 겁나남....;;;

 

 

오라클을 연결할 것이다.

CRUD 중 가장 중요한 selecter만 해보자.

 

2. root-context.xml에 jndi 오라클 연결

뭔 역할?

 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myora"/>
</bean>

bean 추가

 

 

 

3. Mybatis 홈페이지에 가서 xml 코드 추가

mybatis.org/mybatis-3/ko/getting-started.html 접속.

화면속 파란부분만 복사해와서

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

src에 src/kr/co/ikosmo/mvc/config 아래 config.xml 파일 만들기

 

거기에 붙여넣기

 

 

오라클 들어가보자.

 

어떤 테이블이던 상관 없으나 board로 해보자.

 

4. VO 만들기

클래스 또 만들기. BoardVO를 만들자.

오라클에서 저번에 만든 board를 가져와서 vo에 붙여넣기

변수 이름 동일하게 해서 오라클 연결해보자.

 

 

getter/setter까지 완료.

 

 

5. config.xml에서 BoardVO 연결

type링크가 방금 만든 boardVO 패키지일 수 있게 하자.

 

 

 

6. Mapper 만들기

동일한 경로로 해서 만들고

 

아까 mybatis 홈페이지 조금 내려가면  있다. mapping 복붙.

 

하단에 써주기


mapper에 오라클 select문을 가져오자.

 

mapper와 select문까지 쓴 결과물

 

이걸 정의한 곳은 바로 root-context.xml이다.

이동해보자.

 

7. root-context.xml에서 Mybatis 설정하기

JndiObjectFactoryBean는 Datasource 객체를 사용해서 WAS의 Connection Pool에 접근해서 Connection 반환한다.

jndi라는 기법을 사용해서 value의 저 이름으로 찾아가는데 주체 객체는 아까 context에서 설정한 type이다.

 

 

이제 Mybatis를 설정하면

 

classpath*: 별 의미는 매퍼에 여러파일

ss는 @Autowired (자동으로 bean 묶어내는 것.)을 의미

 

Factory?? object factory 패턴이란????

 

<!-- MyBatis 설정 -->
<bean id="factoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:kr/co/iKosmo/mvc/config/config.xml"/>
<property name="mapperLocations" value="classpath*:kr/co/iKosmo/mvc/mapper/*.xml"/>
</bean>
<bean id="ss" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="factoryBean"/>
</bean>

 

 

 

index.jsp 파일을 실행하면 view의 hello.jsp 연결이 되었었다.

우리는 오라클을 연결해야하므로, 이제 DAO까지 돌아야 한다.

 

META_INF에서 만든 context.xml에서 name="jdbc/myora"는

현재 설정중인 root-context.xml의 이름과 같아야 한다.

 

 

8. Mybatis 연결

controller에서 Dao class 만들기

 

boardDao에 아래 내용을 추가한다.

package kr.co.iKosmo.mvc.dao;

import java.util.Collection;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import kr.co.iKosmo.mvc.vo.BoardVO;

@Repository
public class boardDao {

	@Autowired
	private SqlSessionTemplate ss;
	
	public List<BoardVO> getBoardList(){
		return ss.selectList("board.list");
	}
	
}

 

▼마이바티스?(sping 포스팅 참조)

 

9. 오라클을 연동할 컨트롤러를 만들자.

컨트롤러에 BoardController 만들기

 

이 보드 리스트를 listv라는 이름의 딕셔너리로 설정해서 불러올 것이다.

package kr.co.iKosmo.mvc.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import kr.co.iKosmo.mvc.dao.boardDao;
import kr.co.iKosmo.mvc.vo.BoardVO;

@Controller
public class BoardController {
	
	@Autowired
	private boardDao dao;
	
	@GetMapping(value="/boardlist")
	public String boardList(Model m) {
		List<BoardVO> listv = dao.getBoardList();
		m.addAttribute("listv",listv);
		return "boardList";
	
	}
	
}

 

10. boardList.jsp와 index.jsp 연결

마지막으로 views 파일에 boardList.jsp 파일 만들어주고 연결해주기.

 

index.jsp에 연결

 

실행하면

클릭하면 링크로 넘어감

 

잘나온다.

 

반응형
LIST

댓글