Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-05-04(수) 068일차 [Oracle, Spring Framework] 스프링 설치 및 환경설정, 서버 구동 시 읽는 파일 설명, Hello Spring

옌炎 2022. 6. 17. 11:05
728x90

수업내용


1교시 (09:30-10:20)

  • ERwin
    • 식별/비식별 관계
    • 카디널리티
  • Join
--####################################################
-- 조인 : 테이블을 합치는 것 : 여러개의 테이블을 관계 키를 가지고 합치는 것 
--      꼭 관계키가 없어도 합칠 수 있다. 
-- PK, FK 
-- EQUI JOIN 이퀴조인, EQUAL JOIN 이퀄조인 : INNSER JOIN 이너조인
-- NOT-EQUI JOIN 낫 이키조인
-- SELF JOIN 셀프 조인
-- OUTER JOIN 아우터 조인 


-- EQUI JOIN : 이키 조인, EQUAL JOIN : 이퀄조인 
-- 한 개의 테이블을 두 개의 별도의 테이블 처럼 사용, 
-- 한 개의 테이블의 행들을 같은 테이블의 행들과 조인한다, 
-- 동일 컬럼 기준으로 조인

--###############################################
-- INNSER JOIN : 이너조인 
-- 연산자 = 사용해서 각 테이블에서 동일한 컬럼을 매칭해서 조회하는 것  

-- 이너 조인은 테이블에 있는 모든 데이터를 조회 할 수가 없다.
-- 컬럼에 데이터가 매칭이되지 않으면 데이터를 조회할 수가 없다. <-- 이 조건을 충족하는 조인이 OUTER JOIN 아우터 조인 이다. 
--###############################################
-- 테이블을 조인할 때는 꼭 테이블 앨리어스 사용하기 
SELECT * FROM EMP A;
SELECT * FROM DEPT B;

SELECT * FROM EMP A, DEPT B WHERE A.DEPTNO = B.DEPTNO;
SELECT * FROM DEPT B, EMP A WHERE B.DEPTNO = A.DEPTNO;

SELECT A.*, B.*
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO;

SELECT * FROM EMP WHERE EMPNO = '7369';
SELECT DNAME FROM DEPT WHERE DEPTNO = '20';

SELECT DNAME FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE EMPNO = '7369');

-- INNER JOIN
SELECT B.DNAME
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO
AND    A.EMPNO = '7369';

SELECT A.DEPTNO EMP_T, B.DEPTNO DEPT_T
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO
ORDER BY 1;

SELECT DEPTNO FROM DEPT;

-- OUTER JOIN
-- (+) 아우터 조인의 연산자 : 데이터 부족한 쪽(없는) 테이블에 연산자를 붙인다.
-- 아우터 조인 순서
-- 1. 먼저 이퀄조인을 먼저 한다. : 연산자 =
-- 2. 데이터가 없는 테이블에 아우터조인 연산자 (+)를 붙인다. 
SELECT A.DEPTNO EMP_T, B.DEPTNO DEPT_T
FROM   EMP A, DEPT B
WHERE  A.DEPTNO(+) = B.DEPTNO
ORDER BY 1;

2교시 (10:30-11:20)

  • Join
-- 스미스의 부서명, 입사일, 급여를 조회 하시오
SELECT A.ENAME, A.HIREDATE, A.SAL , B.DNAME
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO
AND    A.ENAME = 'SMITH';

SELECT B.DEPTNO
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO
AND    A.DEPTNO = '10';

SELECT DNAME FROM DEPT;

-- 리서치 부서에 근무하는 사원의 이름을 조회 하시오 
SELECT A.ENAME
FROM   EMP A, DEPT B
WHERE  A.DEPTNO = B.DEPTNO
AND    B.DNAME = 'RESEARCH';

-- 어카운드 부서에 근무하는 사원의 수 ?? 
-- COUNT() 함수 : 
SELECT   COUNT(A.EMPNO)
FROM     EMP A, DEPT B
WHERE    A.DEPTNO = B.DEPTNO
AND      B.DNAME = 'ACCOUNTING';

-- SALES 부서에 근무하는 사원들의 입사일을 조회 하시오 

SELECT *
FROM (
        SELECT 
                A.HIREDATE
        FROM    EMP A, DEPT B
        WHERE   A.DEPTNO = B.DEPTNO
        AND     B.DNAME = 'SALES'
        ORDER BY A.HIREDATE ASC
      )
WHERE ROWNUM <= 1;

SELECT 
        MIN(A.HIREDATE), MAX(A.HIREDATE)
FROM    EMP A, DEPT B
WHERE   A.DEPTNO = B.DEPTNO
AND     B.DNAME = 'SALES';

3교시 (11:30-12:20)

  • Spring
    자바

    SE : coreJava
    EE : jsp, Servlet, EJB (이제비, 엔터프라이즈 자바빈즈)
    ME : 핸드폰, 칩...

    EJB <-- 겨울
    Spring <-- 봄

    21개의 포조(POJO, Plain Old Java Object) 라이브러리 사용법을 배우는 것이다.

    8. POJO 라이브러리 사용
    Spring API 3.2.9 포보 라이브러리 21개

    beans.jar : spring-beans-3.2.9.RELEASE.jar
    클래스 인스턴스 하는 기능
    스프링 프레임워크에서는
    클래스를 컴포넌트, 빈즈(콩, 자바에서는 컴포넌트 개념으로 사용)라고 부른다.

    context.jar : spring-context-3.2.9.RELEASE.jar
    클래스 위치를 찾아가는 기능

    core.jar : spring-core.3.2.9.RELEASE.jar
    스프링 프레임워크 기본 엔진(컨테이너)
    IoC, DI를 한다.

    webmvc.jar : spring-webmvc-3.2.9.RELEASE.jar
    스프링 웹 MVC


    이클립스에서 tomcat 서버를 실행하는 순서
    -----------------------------

    이클립스
    ----------

    Servers : 이클립스에 선언된 모든 Context에 적용이 되는 파일들
    context.xml
    <Resource name="jdbc/jndi_orclKSY00"
    server.xml
    <Connector URIEncoding="UTF-8" port="8088"
    <Context docBase="KosMember" path="/KosMember"
    web.xml
    <session-timeout>30</session-timeout>
    MIME Type Mappings

    Context : 독립적인 도메인
    WebContent
    jsp
    test.jsp
    META-INF
    WEB-INF
    web.xml : 이 컨텍스트에만 적용되는 내용들이다.
    <welcome-file>index.html</welcome-file>

    <param-value>/WEB-INF/classes/log4j.xml</param-value>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <session-timeout>30</session-timeout>

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

4교시 (12:30-13:20)

  • 스프링 관련 도구 ← 버전 맞추기
    전자정부 프레임워크  
    -------------------------
    전자정부 표준프레임워크 4.0
    jdk11 이상, Eclipse 4.19
    SpringBoot 2.4.5 지원
    스프링 프레임워크 5.3.6

    전자정부 표준프레임워크 3.10
    jdk1.7 이상, Eclipse 4.16
    스프링 프레임워크 : 4.3.25

    전자정부 표준프레임워크 3.9
    jdk1.7 ~ 1.8 이상, Eclipse 4.8(Photon)
    스프링 프레임워크 : 4.3.22

    전자정부 표준프레임워크 3.8
    jdk1.7 ~ 1.8 이상, Eclipse 4.7(Oxygen)
    스프링 프레임워크 : 4.3.16

    전자정부 표준프레임워크 3.7
    jdk1.7 ~ 1.8 이상, Eclipse 4.6(Neon)
    스프링 프레임워크 : 4.2.4

    전자정부 표준프레임워크 3.6
    jdk1.7 이상, Eclipse 4.3(Kepler), Eclipse 4.5(Luna) Eclipse 4.6(Mars)
    스프링 프레임워크 : 4.1.8


    이클립스 
    -------------------------
    2001년 IBM VisualAge용 소프트웨어 개발 툴로 만들어졌으나 
    개발 도중 관련 소스 등을 모조리 공개하는 자유 소프트웨어가 되었고 
    이것이 '이클립스' 란 이름으로 세상에 선보임

    초창기(Hellos 까지)
    Helios(2005년)
    2006년 부터 목성의 위성 또는 관련된 인물의 이름을 임의로 채용 
    Callisto(2006년)
    Europa(2007년)
    Ganymade(2008년)
    Galileo(2009년)
    알파벳 네이밍 1기(천문학 네이밍, Mars 까지)
    Helios(2010년)
    Indigo(2011년)
    Juno(2012년)
    Kepler(2013년)
    Luna(2014년)
    Mars(2015년)
    알파벳 네이밍 2기(원자론 네이밍, Neon 부터 Photon 까지)
    Neon(2016년)
    Oxygen(2017년)
    Photon(2018년)
    연도-월 버저닝
    Eclipse 2018-09(4.9) ~ Eclipse 2019-12(4.14)
    Eclipse 2020-03(4.15)
    Eclipse 2020-06(4.16) **
    ------------------------------------
    Eclipse 2020-09(4.17)
    Eclipse 2020-12(4.18)
    Eclipse 2021-03(4.19)
    Eclipse 2021-06(4.20)
    Eclipse 2021-09(4.21)
    Eclipse 2021-12(4.22)
    Eclipse 2022-03(4.23)



    Spring 
    =======================================
    Spring 3.0

    Spring 4.0 **

    Spring 5.0
    Spring 5.1
    Spring 5.2
    Spring 5.3


    Spring Boot
    =======================================

    Spring Boot 1.1 (Release 2014.05)
    ---------------------------------------
    Java 1.6 이상
    Spring Framework 4.0.5
    Tomcat 7.0.54, Hibernate 4.3.1

    Spring Boot 1.5 (Release 2017.01)
    ---------------------------------------
    Java 8 이상
    Spring Framework 4.3
    Tomcat 8.5, Hibernate 5.0

    Spring Boot 2.0.0 (Release 2018.03)
    ---------------------------------------
    Java 8, Java 9 tested
    Spring Framework 5.0
    Tomcat 8.5, Hibernate 5.2

    Spring Boot 2.1.0(Release 2018.10)
    ---------------------------------------
    Java 11 Support (Java 8 ~ 11)
    Spring Framework 5.1
    Tomcat 9, Hibernate 5.3

    Spring Boot 2.2.0(Release 2018.10)
    ---------------------------------------
    Java 13 support(Java 8 ~ 13)
    Spring Framework 5.2
    Tomcat 9, Hibernate 5.4

    Spring Boot 2.3.0(Release 2018.10)
    ---------------------------------------
    Java 15 support(Java 8 ~ 15)
    Spring Framework 5.2
    Tomcat 9, Hibernate 5.4

    Spring Boot 2.5.0(Release 2018.10)
    ---------------------------------------
    Java 16 support(Java 8 ~ 16)
    Spring Framework 5.2
    Tomcat 9, Hibernate 5.4
    Gradle 7.0

5교시 (14:30-15:20)

  • tomcat start
    탐캣을 스타트 하면 
    ===================================================
    1. server.xml 
    2. web.xml 
    3. context.xml 

    4. Context/WEB-INF/web.xml 

    5. org.springframework.web.servlet.DispatcherServlet 실행 되고 

    6. Context/WEB-INF/web.xml/spring-servlet.xml
    1) WEB MVC 를 사용하시오 : 사용자 정의 콘트롤러를 찾고, 데이터(클라이언트에서 가져온)를 넘겨 주세요 
    <mvc:annotation-driven />

    2) 컴포넌트가 있는, 빈즈가 있는, 클래스가 있는 패키지를 찾아서 
    해당하는 컴포넌트, 빈즈, 클래스를 메모리에 올리세요 
    @Controller : 사용자 정의 콘트롤러 
    @Service : 서비스 인터페이스, 서비스 구현체 클래스 
    @Transactional : 서비스에서 트랜잭션을 처리하시오 (서비스와 같이 구동됨)
    @Repository : 다오 인터페이스, 다오 구현체 클래스 

    <context:component-scan base-package="a.b.c.com.**" />
    a.c.c.com 패키지 하위에 있는 패키지의 클래스 들 

    @Controller
    사용자정의 콘트롤러 클래스 

    @Service
    @Transactional 
    서비스 인터페이스, 서비스 구현체 클래스 
    @Repository
    다오 인터페이스, 다오 구현체 클래스를 

    메모리에 올리시오 

    3) view 의 위치를 지정한다. 
    Context/WEB-INF/view 파일을 저장할 폴더이름(*.jsp)

    <property name="prefix" value="/WEB-INF/views/"/> 
    <property name="suffix" value=".jsp"/>

6교시 (15:30-16:20)

  • 스프링 환경 설정

    1. testString/WebContent/WEB-INF/lib/

    스프링 3.2.9 포조 라이브러리 21개 포팅 
    같이 사용할 라이브러리 를 포팅 
    commons-logging-1.1.2.jar <-- 스프링 로그 찍기 
    jstl.jar <-- jstl 라이브러
    standard.jar <-- jstl 라이브러
    log4j-1.2.17.jar <-- 로그포제이 라이브러리 

    2.testSpring/Java Resource/src/
    testSpring/Java Resource/src/log4j.xml <-- 로그포제이 환경설정파일 포팅하기 
    <logger name="a.b.c"> : logger 태그에 있는 패키지 명 꼭 확인하기
  • 1. web.xml 
    testString/WebContent/WEB-INF/web.xml 

    1.1 welcome file 세팅
    index.jsp 

    1.2 디스패처 서블릿 세팅
    front Controller 디스패처서블릿 클래스 포팅
    org.springframework.web.servlet.DispatcherServlet

    1.3 스프링 환경설정파일 연결하기 
    /WEB-INF/spring-servlet.xml

    1.4 url 패턴 정의하기 
    *.hbe
    모델2 WEB MVC 에서 콘트롤러 찾아갈 때는 플래그로 찾아갔다. 
    플래그 : 임의로 변수를 만들어서 변수 값으로 분기하는 것
    스프링에서는 
    다행이도 함수를 사용할 수 있다.
    url 패턴 이름으로 함수를 찾아간다. 

    2. index.jsp
    WebContent/index.jsp

    3. spring-servlet.xml 
    스프링 라이브러리 포팅 한 후 라이브러리 플러그인이 안되서 헤멤 ...
    Build Path 로 해결

    <mvc:annotation-driven />
    <context:component-scan base-package="a.b.c.com.**" />
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> 
    <property name="prefix" value="/WEB-INF/views/"/> 
    <property name="suffix" value=".jsp"/> 
    </bean>

    4. Controller 만들기 
    a.b.c.com.controller.HelloWorldController

    5. view 만들기

7교시 (16:30-17:20)

스프링 환경 설정

  • WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
	     					 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  		 id="WebApp_ID" version="3.1">
  		 
  <display-name>testSpring</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>spring</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/spring-servlet.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>spring</servlet-name>
  	<url-pattern>*.ksy</url-pattern>
  </servlet-mapping>
  
  <!-- POST 방식 인코딩 -->
	<filter>
		<filter-name>encodingFilter</filter-name> 
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
		<init-param> 
			<param-name>encoding</param-name> 
			<param-value>UTF-8</param-value> 
		</init-param> 
		<init-param> 
			<param-name>forceEncoding</param-name> 
			<param-value>true</param-value> 
		</init-param> 
	</filter> 
	<filter-mapping> 
		<filter-name>encodingFilter</filter-name> 
		<url-pattern>/*</url-pattern> 
	</filter-mapping> 
	
	<!-- log4j setting -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/classes/log4j.xml</param-value>
	</context-param>
</web-app>
  • spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans 	xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:c="http://www.springframework.org/schema/c"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:lang="http://www.springframework.org/schema/lang"
		xmlns:mvc="http://www.springframework.org/schema/mvc"
		xmlns:p="http://www.springframework.org/schema/p"
		xsi:schemaLocation="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
							http://www.springframework.org/schema/lang 
							http://www.springframework.org/schema/lang/spring-lang.xsd
							http://www.springframework.org/schema/mvc 
							http://www.springframework.org/schema/mvc/spring-mvc.xsd">


	<mvc:annotation-driven />
	
	<context:component-scan base-package="a.b.c.com.**" />
	
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/WEB-INF/view/"/>
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

  • 기타
    • WebContent/WEB-INF/view 경로 만들기

8교시 (17:30-18:30)

Hello Spring

  • HelloController.java
package a.b.c.com.controller;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {
	Logger logger = LogManager.getLogger(HelloController.class);
	
	@RequestMapping(value="spring_hello")
	public String hello_spring(Model model) {
		logger.info("HelloController.hello_spring() 함수 진입 >>> : ");
		
		model.addAttribute("msg", "Hello Spring !!!");
		logger.info("model >>> : " + model);
		
		return "spring_hello_return";
	}
}
  • spring_hello_return.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="org.apache.log4j.LogManager" %>
<%@ page import="org.apache.log4j.Logger" %>   

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>spring_hello_return.jsp</h3>
	<hr>
	<%
		Logger logger = LogManager.getLogger(this.getClass());
		logger.info("spring_hello_return.jsp >>> : ");
		
		String msgV = (String)request.getAttribute("msg");
		logger.info("msgV >>> : " + msgV);
		out.println("msgV >>> : " + msgV);
	%>
</body>
</html>
  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>Spring Test</h3>
<hr>
<a href="spring_hello.ksy">Hello 보기 </a>
</body>
</html>


Notes


728x90