<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jjoung-2j.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 12 Aug 2024 12:30:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. jjoung-2j.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jjoung-2j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[AWS 서버 열고닫기]]></title>
            <link>https://velog.io/@jjoung-2j/AWS-%EC%84%9C%EB%B2%84-%EC%97%B4%EA%B3%A0%EB%8B%AB%EA%B8%B0</link>
            <guid>https://velog.io/@jjoung-2j/AWS-%EC%84%9C%EB%B2%84-%EC%97%B4%EA%B3%A0%EB%8B%AB%EA%B8%B0</guid>
            <pubDate>Mon, 12 Aug 2024 12:30:22 GMT</pubDate>
            <description><![CDATA[<h3 id="putty-접속">PUTTY 접속</h3>
<p>ubuntu@ip-172-31-0-12 =&gt; 현 개인 IP</p>
<ul>
<li>사람마다 다름</li>
</ul>
<hr>
<h3 id="서버-열고-닫기">서버 열고 닫기</h3>
<p>ubuntu@ip-172-31-0-120:<del>$ su -
Password: (개인설정한 비밀번호)
root@ip-172-31-0-120:</del># cd /home/ubuntu/tomcat/apache-tomcat-9.0.91/conf/
root@ip-172-31-0-120:/home/ubuntu/tomcat/apache-tomcat-9.0.91/conf# nano server.xml
=&gt; 설정 변경</p>
<p>root@ip-172-31-0-120:/home/ubuntu/tomcat/apache-tomcat-9.0.91/conf# cd ..
root@ip-172-31-0-120:/home/ubuntu/tomcat/apache-tomcat-9.0.91# cd bin</p>
<p>==&gt; 
root@ip-172-31-0-120:~# cd /home/ubuntu/tomcat/apache-tomcat-9.0.91/bin
root@ip-172-31-0-120:/home/ubuntu/tomcat/apache-tomcat-9.0.91/bin# ./shutdown.sh
root@ip-172-31-0-120:/home/ubuntu/tomcat/apache-tomcat-9.0.91/bin# ./startup.sh</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[IGLOO - Semi project]]></title>
            <link>https://velog.io/@jjoung-2j/IGLOO-Semi-project</link>
            <guid>https://velog.io/@jjoung-2j/IGLOO-Semi-project</guid>
            <pubDate>Sat, 29 Jun 2024 09:24:58 GMT</pubDate>
            <description><![CDATA[<h3 id="쌍용강북교육센터에서-진행한-semi-project">쌍용강북교육센터에서 진행한 Semi project</h3>
<ul>
<li>4주 동안 진행</li>
<li>이나래, 양혜정, 박예진, 손영관, 이지윤</li>
</ul>
<hr>
<h3 id="당시-발표-ppt--igloo-ppt">당시 발표 PPT =&gt; <a href="https://drive.google.com/file/d/1XSH0llZNfW4205Ws6O4RJkxF4ikEh3Op/view?usp=drive_link">IGLOO PPT</a></h3>
<h3 id="github-link"><a href="https://github.com/jjoung-2j/IGLOO">Github link</a></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[JobMarket - Mini project]]></title>
            <link>https://velog.io/@jjoung-2j/JobMarket-Mini-project</link>
            <guid>https://velog.io/@jjoung-2j/JobMarket-Mini-project</guid>
            <pubDate>Sat, 29 Jun 2024 08:54:34 GMT</pubDate>
            <description><![CDATA[<h3 id="쌍용강북교육센터에서-진행한-mini-project">쌍용강북교육센터에서 진행한 Mini project</h3>
<ul>
<li>1주 동안 진행</li>
<li>양혜정, 이정수, 정예린, 손혜정, 김미란</li>
</ul>
<hr>
<h3 id="당시-발표-ppt--jobmarket-ppt">당시 발표 PPT =&gt; <a href="https://drive.google.com/file/d/17VTfiTbXAo_klmEG9SAdM9RaV0iag8fQ/view?usp=drive_link">Jobmarket PPT</a></h3>
<h3 id="github-link"><a href="https://github.com/jjoung-2j/JobMarket_TeamProject">Github link</a></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_7]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting7</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting7</guid>
            <pubDate>Sat, 22 Jun 2024 15:44:37 GMT</pubDate>
            <description><![CDATA[<h3 id="mapper-설정">mapper 설정</h3>
<p>-&gt; mapper이름.xml</p>
<h3 id="29-mapper-기본설정">29. mapper 기본설정</h3>
<pre><code class="language-xml">&lt;!-- ==== #29. mapper 기본설정 ==== --&gt;
&lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&gt;

&lt;mapper namespace=&quot;mediinfora&quot;&gt;
    &lt;!-- sql 작성  --&gt;
&lt;/mapper&gt;</code></pre>
<hr>
<p>-&gt; mybatis-config.xml</p>
<pre><code class="language-xml">&lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&gt;
&lt;configuration&gt;
&lt;/configuration&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_6]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting6</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting6</guid>
            <pubDate>Sat, 22 Jun 2024 15:43:44 GMT</pubDate>
            <description><![CDATA[<h3 id="tiles-layoutxml">tiles-layout.xml</h3>
<h3 id="23-tiles-레이아웃-설정하기">23. tiles 레이아웃 설정하기</h3>
<pre><code class="language-xml">&lt;!-- ======= #23. tiles 레이아웃 설정하기 ======= --&gt;
&lt;!DOCTYPE tiles-definitions PUBLIC
       &quot;-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN&quot;
       &quot;http://tiles.apache.org/dtds/tiles-config_2_1.dtd&quot;&gt;</code></pre>
<hr>
<h1 id="23--28-tiles-관련">23 ~ 28 tiles 관련</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_5]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting5</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting5</guid>
            <pubDate>Sat, 22 Jun 2024 15:43:18 GMT</pubDate>
            <description><![CDATA[<h3 id="servlet-contextxml">Servlet-context.xml</h3>
<h3 id="18-이미지-동영상-js-css-파일등이-위치하는-경로를-의미한다">18. 이미지, 동영상, js, css 파일등이 위치하는 경로를 의미한다.</h3>
<ul>
<li><code>&lt;mvc:annotation-driven /&gt;</code> 아래<pre><code class="language-xml">&lt;!-- ==== #18. 이미지, 동영상, js, css 파일등이 위치하는 경로를 의미한다. --&gt;
  &lt;!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --&gt;
  &lt;mvc:resources mapping=&quot;/resources/**&quot; location=&quot;/resources/&quot; /&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="19">19.</h3>
<hr>
<h3 id="20-실행시-모든-페이지에-기본틀이-되어지는-틀을-배치하기-위한-템플릿-프레임워크인-tilesviewresolver-를-사용하기-위해-빈으로-등록한다">20. 실행시 모든 페이지에 기본틀이 되어지는 틀을 배치하기 위한 템플릿 프레임워크인 TilesViewResolver 를 사용하기 위해 빈으로 등록한다.</h3>
<ul>
<li><p>이어서 붙여넣기</p>
<pre><code class="language-xml">&lt;!-- ======= #20. 실행시 모든 페이지에 기본틀이 되어지는 틀을 배치하기 위한 템플릿 프레임워크인 TilesViewResolver 를 사용하기 위해 빈으로 등록한다. ======= --&gt;
 &lt;beans:bean id=&quot;tilesConfigurer&quot; class=&quot;org.springframework.web.servlet.view.tiles3.TilesConfigurer&quot;&gt;
      &lt;beans:property name=&quot;definitions&quot;&gt;
          &lt;beans:list&gt;
               &lt;beans:value&gt;/WEB-INF/tiles/tiles-layout.xml&lt;/beans:value&gt;
          &lt;/beans:list&gt;
      &lt;/beans:property&gt;
  &lt;/beans:bean&gt;</code></pre>
</li>
<li><p>우선순위 설정</p>
<pre><code class="language-xml">&lt;beans:bean id=&quot;viewResolver&quot; class=&quot;org.springframework.web.servlet.view.UrlBasedViewResolver&quot;&gt;
      &lt;beans:property name=&quot;viewClass&quot; value=&quot;org.springframework.web.servlet.view.tiles3.TilesView&quot; /&gt;
      &lt;beans:property name=&quot;order&quot; value=&quot;1&quot;/&gt;
  &lt;/beans:bean&gt;

  &lt;!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --&gt;
  &lt;beans:bean class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;
      &lt;beans:property name=&quot;prefix&quot; value=&quot;/WEB-INF/views/&quot; /&gt;
      &lt;beans:property name=&quot;suffix&quot; value=&quot;.jsp&quot; /&gt;
      &lt;beans:property name=&quot;order&quot; value=&quot;2&quot;/&gt;
  &lt;/beans:bean&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="21">21.</h3>
<hr>
<h3 id="22-aop-관련-어노테이션-동작이-가능하게-설정">22. AOP 관련 어노테이션 동작이 가능하게 설정</h3>
<ul>
<li><code>&lt;/beans:beans&gt;</code> 위</li>
</ul>
<pre><code class="language-xml">&lt;!-- ===== #22. 일단 스프링에서 트랜잭션 처리를 하기 위해서는
          먼저 src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에
        Namespaces 에 aop를 체크를 하고, 아래와 같이 트랜잭션 처리를 위한 aop 포인트컷을 등록을 해야 한다.    
           - 아래의 &lt;aop:aspectj-autoproxy /&gt;가 AOP 관련 어노테이션 동작이 가능하게 설정해주는 것임.
    --&gt;   
   &lt;!--  AOP 관련 어노테이션 동작이 가능하게 설정 --&gt;   
       &lt;aop:aspectj-autoproxy /&gt; &lt;!-- 추가 --&gt;        

       &lt;aop:config proxy-target-class=&quot;true&quot;&gt;
           &lt;aop:pointcut id=&quot;controllerOperation&quot; expression=&quot;execution(public * com.spring.app..*Controller.*(..))&quot; /&gt;
       &lt;/aop:config&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_4]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting4</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting4</guid>
            <pubDate>Sat, 22 Jun 2024 15:42:51 GMT</pubDate>
            <description><![CDATA[<h3 id="root-contextxml">root-context.xml</h3>
<ul>
<li><p><code>&lt;/beans&gt;</code> 위</p>
</li>
<li><p><code>&lt;property name=&quot;mapperLocations&quot; value=&quot;classpath*:com/spring/app/mapper/*.xml&quot; /&gt;</code> 위치 mapper 설정</p>
</li>
<li><p><code>&lt;property name=&quot;configLocation&quot; value=&quot;classpath:mybatis/mybatis-config.xml&quot; /&gt;</code> 위치 정보 기술 설정</p>
<pre><code class="language-xml">&lt;!-- ==== #15. myBatis(JDBC)설정 연결문자열 설정하기  ==== --&gt;
     &lt;!-- DBCP 2.x를 위한 DataSource 객체 --&gt;
     &lt;bean id=&quot;dataSource&quot; class=&quot;org.apache.commons.dbcp2.BasicDataSource&quot; destroy-method=&quot;close&quot;&gt;
        &lt;property name=&quot;driverClassName&quot; value=&quot;net.sf.log4jdbc.DriverSpy&quot; /&gt;
        &lt;property name=&quot;url&quot; value=&quot;jdbc:log4jdbc:oracle:thin:@//127.0.0.1:1521/xe&quot; /&gt;
        &lt;property name=&quot;username&quot; value=&quot;db 연결이름&quot; /&gt;
        &lt;property name=&quot;password&quot; value=&quot;비밀번호&quot; /&gt;

        &lt;property name=&quot;initialSize&quot; value=&quot;20&quot;/&gt;   &lt;!-- BasicDataSource 클래스 생성 후 최초로 getConnection() 메소드를 호출할 때 커넥션 풀에 채워 넣을 커넥션 개수(default=0). initialSize 값이 maxTotal 값보다 커버리면 논리적으로 오류가 있는 설정이다. --&gt;   
        &lt;property name=&quot;maxTotal&quot; value=&quot;20&quot;/&gt;      &lt;!-- 동시에 사용할 수 있는 최대 커넥션 개수(default=8). initialSize 값과 maxTotal 값과 maxIdle 값과 minIdle 값 4개 모두 동일한 값으로 통일해도 무방하다. 커넥션 개수와 관련된 가장 중요한 성능 요소는 일반적으로 커넥션의 최대 개수이다 --&gt;  
        &lt;property name=&quot;maxIdle&quot; value=&quot;20&quot;/&gt;      &lt;!-- Connection Pool에 반납할 때, 최대로 유지될 수 있는 커넥션 개수(default=8). maxTotal 값 과 maxIdle 값이 같은 것이 바람직하다. 왜냐하면, 만약에 maxTotal 값이 20 이고 maxIdle 값이 15 일때, 15개의 커넥션이 모두 사용중일 때 커넥션이 한개 더 생긴다면, maxTotal 은 아직 여유가 있으므로 프로세스는 계속 진행되고, 그러면 새로 연결을 하고, 반환하려고 하는데 15개의 커넥션이 모두 사용중 이라서 반납할 수 있는 여유공간이 없이 이미 꽉차 있으므로 그 커넥션은 반납하지 못하고 그냥 닫히게 된다. 15개의 커넥션이 계속해서 사용중이라면, 계속해서 새로 연결, 다시 닫기가 반복되므로 DBCP 를 사용하는 의미가 아예 없어진다. 그러므로  maxIdle 값과  maxTotal 값은 같은 값이거나 큰 차이가 없어야 바람직하다. --&gt;     
        &lt;property name=&quot;minIdle&quot; value=&quot;20&quot;/&gt;      &lt;!-- Connection Pool에 반납할 때, 최소한으로 유지할 커넥션 개수(default=0). minIdle 값이 maxIdle 값  보다 커버리면 논리적으로 오류가 있는 설정이다. --&gt; 

        &lt;property name=&quot;maxWaitMillis&quot; value=&quot;10000&quot; /&gt;      &lt;!-- pool이 고갈되었을 경우 최대 대기 시간(ms단위, default=-1 : 무한정) --&gt;
        &lt;property name=&quot;defaultAutoCommit&quot; value=&quot;true&quot; /&gt; &lt;!-- defaultAutoCommit 속성은 true가 기본값이다. --&gt; 
     &lt;/bean&gt;

     &lt;!-- ==== #15. myBatis(JDBC)설정 mapper 파일 위치 지정하기  ==== --&gt;
     &lt;!-- mapper 파일이란 sql 문을 가지고 있는 xml 파일을 말한다. --&gt;
     &lt;bean id=&quot;sqlSessionFactory&quot; class=&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&gt;
        &lt;property name=&quot;mapperLocations&quot; value=&quot;classpath*:com/spring/app/mapper/*.xml&quot; /&gt;
    &lt;!--   &lt;property name=&quot;configLocation&quot; value=&quot;classpath:com/spring/app/mybatisconfig/mybatis-config.xml&quot; /&gt; --&gt; &lt;!-- mybatis-config.xml에 대한 정보를 기술함 --&gt; 
    &lt;!--  또는 --&gt;
      &lt;property name=&quot;configLocation&quot; value=&quot;classpath:mybatis/mybatis-config.xml&quot; /&gt;   &lt;!-- mybatis-config.xml에 대한 정보를 기술함 --&gt; 
        &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot; /&gt;
     &lt;/bean&gt;

 &lt;!-- ==== #15. myBatis(JDBC)설정 sqlSessionTemplate 의존 객체 설정 ==== --&gt;
 &lt;bean id=&quot;sqlsession&quot; class=&quot;org.mybatis.spring.SqlSessionTemplate&quot;&gt; 
        &lt;constructor-arg index=&quot;0&quot; ref=&quot;sqlSessionFactory&quot; /&gt;
 &lt;/bean&gt;

 &lt;!-- ==== 로컬 오라클서버의 HR 연결 시작 ==== --&gt;

 &lt;bean id=&quot;dataSource_2&quot; class=&quot;org.apache.commons.dbcp2.BasicDataSource&quot; destroy-method=&quot;close&quot;&gt;
        &lt;property name=&quot;driverClassName&quot; value=&quot;net.sf.log4jdbc.DriverSpy&quot; /&gt;
        &lt;property name=&quot;url&quot; value=&quot;jdbc:log4jdbc:oracle:thin:@//127.0.0.1:1521/xe&quot; /&gt;
        &lt;property name=&quot;username&quot; value=&quot;hr&quot; /&gt;
        &lt;property name=&quot;password&quot; value=&quot;gclass&quot; /&gt;

        &lt;property name=&quot;initialSize&quot; value=&quot;20&quot;/&gt;   &lt;!-- BasicDataSource 클래스 생성 후 최초로 getConnection() 메소드를 호출할 때 커넥션 풀에 채워 넣을 커넥션 개수(default=0). initialSize 값이 maxTotal 값보다 커버리면 논리적으로 오류가 있는 설정이다. --&gt;   
        &lt;property name=&quot;maxTotal&quot; value=&quot;20&quot;/&gt;      &lt;!-- 동시에 사용할 수 있는 최대 커넥션 개수(default=8). initialSize 값과 maxTotal 값과 maxIdle 값과 minIdle 값 4개 모두 동일한 값으로 통일해도 무방하다. 커넥션 개수와 관련된 가장 중요한 성능 요소는 일반적으로 커넥션의 최대 개수이다 --&gt;  
        &lt;property name=&quot;maxIdle&quot; value=&quot;20&quot;/&gt;      &lt;!-- Connection Pool에 반납할 때, 최대로 유지될 수 있는 커넥션 개수(default=8). maxTotal 값 과 maxIdle 값이 같은 것이 바람직하다. 왜냐하면, 만약에 maxTotal 값이 20 이고 maxIdle 값이 15 일때, 15개의 커넥션이 모두 사용중일 때 커넥션이 한개 더 생긴다면, maxTotal 은 아직 여유가 있으므로 프로세스는 계속 진행되고, 그러면 새로 연결을 하고, 반환하려고 하는데 15개의 커넥션이 모두 사용중 이라서 반납할 수 있는 여유공간이 없이 이미 꽉차 있으므로 그 커넥션은 반납하지 못하고 그냥 닫히게 된다. 15개의 커넥션이 계속해서 사용중이라면, 계속해서 새로 연결, 다시 닫기가 반복되므로 DBCP 를 사용하는 의미가 아예 없어진다. 그러므로  maxIdle 값과  maxTotal 값은 같은 값이거나 큰 차이가 없어야 바람직하다. --&gt;     
        &lt;property name=&quot;minIdle&quot; value=&quot;20&quot;/&gt;      &lt;!-- Connection Pool에 반납할 때, 최소한으로 유지할 커넥션 개수(default=0). minIdle 값이 maxIdle 값  보다 커버리면 논리적으로 오류가 있는 설정이다. --&gt; 

        &lt;property name=&quot;maxWaitMillis&quot; value=&quot;10000&quot; /&gt;      &lt;!-- pool이 고갈되었을 경우 최대 대기 시간(ms단위, default=-1 : 무한정) --&gt;
        &lt;property name=&quot;defaultAutoCommit&quot; value=&quot;true&quot; /&gt; &lt;!-- defaultAutoCommit 속성은 true가 기본값이다. --&gt; 
     &lt;/bean&gt;

     &lt;!-- ==== #15. myBatis(JDBC)설정 mapper 파일 위치 지정하기  ==== --&gt;
     &lt;!-- mapper 파일이란 sql 문을 가지고 있는 xml 파일을 말한다. --&gt;
     &lt;bean id=&quot;sqlSessionFactory_2&quot; class=&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&gt;
        &lt;property name=&quot;mapperLocations&quot; value=&quot;classpath*:com/spring/app/mapper/*.xml&quot; /&gt;
    &lt;!--   &lt;property name=&quot;configLocation&quot; value=&quot;classpath:com/spring/app/mybatisconfig/mybatis-config.xml&quot; /&gt; --&gt; &lt;!-- mybatis-config.xml에 대한 정보를 기술함 --&gt; 
    &lt;!--  또는 --&gt;
      &lt;property name=&quot;configLocation&quot; value=&quot;classpath:mybatis/mybatis-config.xml&quot; /&gt;   &lt;!-- mybatis-config.xml에 대한 정보를 기술함 --&gt; 
        &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource_2&quot; /&gt;
     &lt;/bean&gt;

 &lt;!-- ==== #15. myBatis(JDBC)설정 sqlSessionTemplate 의존 객체 설정 ==== --&gt;
 &lt;bean id=&quot;sqlsession_2&quot; class=&quot;org.mybatis.spring.SqlSessionTemplate&quot;&gt; 
        &lt;constructor-arg index=&quot;0&quot; ref=&quot;sqlSessionFactory_2&quot; /&gt;
 &lt;/bean&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="16-트랜잭션-처리를-위해서-아래와-같이-트랜잭션매니저-객체를-bean-으로-등록해야-한다">16. 트랜잭션 처리를 위해서 아래와 같이 트랜잭션매니저 객체를 bean 으로 등록해야 한다.</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;!-- ==== #16. 트랜잭션 처리를 위해서 아래와 같이 트랜잭션매니저 객체를 bean 으로 등록해야 한다. ==== --&gt;
 &lt;bean id=&quot;transactionManager&quot; class=&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;&gt;
    &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot; /&gt;
 &lt;/bean&gt;
 &lt;tx:annotation-driven transaction-manager=&quot;transactionManager&quot; /&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="17-jackson-과-관련된-기능을-사용하기-위해-빈을-등록한다">17. jackson 과 관련된 기능을 사용하기 위해 빈을 등록한다.</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml"> &lt;!-- ==== #17. jackson 과 관련된 기능을 사용하기 위해 빈을 등록한다. ==== --&gt;
 &lt;bean id=&quot;jacksonMessageConverter&quot; class=&quot;org.springframework.http.converter.json.MappingJackson2HttpMessageConverter&quot;/&gt;</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_3]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting3</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting3</guid>
            <pubDate>Sat, 22 Jun 2024 15:42:22 GMT</pubDate>
            <description><![CDATA[<h3 id="webxml">web.xml</h3>
<h3 id="13-url-패턴이-끝나는-글자가-action-인-것으로-요청을-했을때-appservlet-서블릿이-받아서-처리를-해준다">13. URL 패턴이 끝나는 글자가 .action 인 것으로 요청을 했을때 appServlet 서블릿이 받아서 처리를 해준다.</h3>
<pre><code class="language-xml">&lt;!-- === #13. URL 패턴이 끝나는 글자가 .action 인 것으로 요청을 했을때 appServlet 서블릿이 받아서 처리를 해준다. === --&gt; 
        &lt;url-pattern&gt;*.bibo&lt;/url-pattern&gt;</code></pre>
<hr>
<h3 id="14-post-방식으로-요청시-데이터-인코딩처리utf-8를-위한-필터추가">14. POST 방식으로 요청시 데이터 인코딩처리(UTF-8)를 위한 필터추가</h3>
<pre><code class="language-xml">    &lt;!-- === #14. POST 방식으로 요청시 데이터 인코딩처리(UTF-8)를 위한 필터추가 --&gt;
   &lt;filter&gt;
      &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;
      &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;
      &lt;init-param&gt;
         &lt;param-name&gt;encoding&lt;/param-name&gt;
         &lt;param-value&gt;UTF-8&lt;/param-value&gt;      
      &lt;/init-param&gt;
   &lt;/filter&gt; 

   &lt;filter-mapping&gt;
      &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;
      &lt;url-pattern&gt;*&lt;/url-pattern&gt;
   &lt;/filter-mapping&gt;

   &lt;!--  ===== #14. 시작 웹페이지 등록하기 ===== --&gt;
   &lt;welcome-file-list&gt;
       &lt;welcome-file&gt;index.bibo&lt;/welcome-file&gt;
     &lt;/welcome-file-list&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_2]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting2</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting2</guid>
            <pubDate>Sat, 22 Jun 2024 15:41:52 GMT</pubDate>
            <description><![CDATA[<h3 id="1-네이버-스마트-에디터에서-사진첨부-관련하여-이미지의-크기를-구하기위한-라이브러리-다운받는곳">1. 네이버 스마트 에디터에서 사진첨부 관련하여 이미지의 크기를 구하기위한 라이브러리 다운받는곳</h3>
<p>-&gt; pom.xml 에 <code>&lt;/properties&gt;</code> 아래 <code>&lt;dependencies&gt;</code> 위</p>
<pre><code class="language-xml">&lt;repositories&gt; 
       &lt;repository&gt;
          &lt;id&gt;osgeo&lt;/id&gt;
          &lt;name&gt;OSGeo Release Repository&lt;/name&gt;
          &lt;url&gt;https://repo.osgeo.org/repository/release/&lt;/url&gt;
          &lt;snapshots&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/snapshots&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
        &lt;/repository&gt;
   &lt;/repositories&gt;</code></pre>
<hr>
<h3 id="2-mybatis-관련-jar-추가하기">2. myBatis 관련 jar 추가하기</h3>
<p>-&gt; pom.xml 에 <code>&lt;/dependencies&gt;</code> 위</p>
<pre><code class="language-xml">&lt;!-- ===== #2. myBatis 관련 jar 추가하기 ===== --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.springframework&lt;/groupId&gt;
          &lt;artifactId&gt;spring-orm&lt;/artifactId&gt;
          &lt;version&gt;${org.springframework-version}&lt;/version&gt;
      &lt;/dependency&gt;

      &lt;dependency&gt;
          &lt;groupId&gt;org.mybatis&lt;/groupId&gt;
          &lt;artifactId&gt;mybatis&lt;/artifactId&gt;
          &lt;version&gt;3.5.11&lt;/version&gt;
      &lt;/dependency&gt;

      &lt;dependency&gt;
          &lt;groupId&gt;org.mybatis&lt;/groupId&gt;
          &lt;artifactId&gt;mybatis-spring&lt;/artifactId&gt;
          &lt;version&gt;2.0.7&lt;/version&gt;
      &lt;/dependency&gt;
    &lt;!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;com.oracle.database.jdbc&lt;/groupId&gt;
          &lt;artifactId&gt;ojdbc8&lt;/artifactId&gt;
          &lt;version&gt;18.3.0.0&lt;/version&gt;
      &lt;/dependency&gt;

      &lt;!-- DBCP2(Data Base Connection Pool)  --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.apache.commons&lt;/groupId&gt;
          &lt;artifactId&gt;commons-dbcp2&lt;/artifactId&gt;
          &lt;version&gt;2.11.0&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.apache.commons&lt;/groupId&gt;
          &lt;artifactId&gt;commons-pool2&lt;/artifactId&gt;
          &lt;version&gt;2.12.0&lt;/version&gt;
      &lt;/dependency&gt;</code></pre>
<hr>
<h3 id="3-dependency-aspectjweaver-추가하기">3. dependency aspectjweaver 추가하기</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;dependency&gt;
           &lt;groupId&gt;org.aspectj&lt;/groupId&gt;
           &lt;artifactId&gt;aspectjweaver&lt;/artifactId&gt;
           &lt;version&gt;${org.aspectj-version}&lt;/version&gt;
        &lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="4aop-구현시-필요한-프록시객체-생성관련-jar-추가하기">4.AOP 구현시 필요한 프록시객체 생성관련 jar 추가하기</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;!-- ===== #4. AOP 구현시 필요한 프록시객체 생성관련 jar 추가하기 ===== --&gt;
      &lt;!-- (#스프링보안02) Spring Security 어노테이션을 사용하기 위해서는 cglib 가 필요하다. --&gt;
    &lt;dependency&gt;
       &lt;groupId&gt;cglib&lt;/groupId&gt;
       &lt;artifactId&gt;cglib&lt;/artifactId&gt;
       &lt;version&gt;3.3.0&lt;/version&gt;
    &lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="5-spring-jdbc-추가">5. Spring jdbc 추가</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;!-- ===== #5. Spring jdbc 추가 ===== --&gt;
    &lt;dependency&gt;
       &lt;groupId&gt;org.springframework&lt;/groupId&gt;
       &lt;artifactId&gt;spring-jdbc&lt;/artifactId&gt;
       &lt;version&gt;${org.springframework-version}&lt;/version&gt;
    &lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="6-spring-tx-추가">6. Spring TX 추가</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;!-- ===== #6. Spring TX 추가  ===== --&gt;
    &lt;dependency&gt;
       &lt;groupId&gt;org.springframework&lt;/groupId&gt;
       &lt;artifactId&gt;spring-tx&lt;/artifactId&gt;
       &lt;version&gt;${org.springframework-version}&lt;/version&gt;
    &lt;/dependency&gt; </code></pre>
</li>
</ul>
<hr>
<h3 id="7-json-관련-jar-추가하기">7. JSON 관련 jar 추가하기</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">    &lt;!-- ===== #7. JSON 관련 jar 추가하기 =====  --&gt; 
    &lt;dependency&gt;
       &lt;groupId&gt;org.json&lt;/groupId&gt;
       &lt;artifactId&gt;json&lt;/artifactId&gt;
       &lt;version&gt;20220320&lt;/version&gt;
    &lt;/dependency&gt;
</code></pre>
</li>
</ul>
<pre><code>
---

### 8. JSON 관련 jar 추가하기

- 이어서 붙여넣기
```xml
&lt;!-- =====  #8. JSON 관련 jar 추가하기 =====  --&gt;
      &lt;!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
          &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;
          &lt;version&gt;2.10.0&lt;/version&gt; 
      &lt;/dependency&gt;

      &lt;!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
          &lt;artifactId&gt;jackson-core&lt;/artifactId&gt;
          &lt;version&gt;2.10.0&lt;/version&gt;
      &lt;/dependency&gt;

      &lt;!-- =====  JSON 관련 jar 추가하기 =====  --&gt;
      &lt;!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
          &lt;artifactId&gt;gson&lt;/artifactId&gt;
          &lt;version&gt;2.9.1&lt;/version&gt;
      &lt;/dependency&gt;</code></pre><hr>
<h3 id="9-spring-프레임워크-버전-4x-이상시--tiles-관련-추가하기">9. Spring 프레임워크 버전 4.x 이상시  tiles 관련 추가하기</h3>
<ul>
<li>properties 안에 붙어넣기</li>
</ul>
<pre><code class="language-xml">&lt;!-- ===== #9. Spring 프레임워크 버전 4.x 이상시  tiles 관련 추가하기 ===== --&gt;
&lt;org.apache.tiles-version&gt;3.0.7&lt;/org.apache.tiles-version&gt;</code></pre>
<hr>
<h3 id="10--tiles-관련-jar-추가하기">10.  tiles 관련 jar 추가하기</h3>
<p>-&gt; pom.xml 에 <code>&lt;/dependencies&gt;</code> 위</p>
<pre><code class="language-xml">&lt;!-- ===== #10.  tiles 관련 jar 추가하기 ===== --&gt;
      &lt;dependency&gt;
         &lt;groupId&gt;org.springframework&lt;/groupId&gt;
         &lt;artifactId&gt;spring-test&lt;/artifactId&gt;
         &lt;version&gt;${org.springframework-version}&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
            &lt;groupId&gt;org.apache.tiles&lt;/groupId&gt;
            &lt;artifactId&gt;tiles-core&lt;/artifactId&gt;
            &lt;version&gt;${org.apache.tiles-version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.tiles&lt;/groupId&gt;
            &lt;artifactId&gt;tiles-api&lt;/artifactId&gt;
            &lt;version&gt;${org.apache.tiles-version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.tiles&lt;/groupId&gt;
            &lt;artifactId&gt;tiles-servlet&lt;/artifactId&gt;
            &lt;version&gt;${org.apache.tiles-version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.tiles&lt;/groupId&gt;
            &lt;artifactId&gt;tiles-jsp&lt;/artifactId&gt;
            &lt;version&gt;${org.apache.tiles-version}&lt;/version&gt;
        &lt;/dependency&gt;</code></pre>
<hr>
<h3 id="11-파일업로드-및-다운로드-관련-jar-추가하기">11. 파일업로드 및 다운로드 관련 jar 추가하기</h3>
<ul>
<li><p>이어서 붙여넣기</p>
<pre><code class="language-xml">&lt;!-- ===== #11. 파일업로드 및 다운로드 관련 jar 추가하기 commons-fileupload 와 commons-io ===== --&gt;
    &lt;!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;commons-fileupload&lt;/groupId&gt;
        &lt;artifactId&gt;commons-fileupload&lt;/artifactId&gt;
        &lt;version&gt;1.5&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;!-- https://mvnrepository.com/artifact/commons-io/commons-io --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;commons-io&lt;/groupId&gt;
        &lt;artifactId&gt;commons-io&lt;/artifactId&gt;
        &lt;version&gt;2.11.0&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;!-- 아파치 POI(Apache POI)는 아파치 소프트웨어 재단에서 만든 라이브러리로서 마이크로소프트 오피스파일 포맷을 순수 자바 언어로서 읽고 쓰는 기능을 제공한다. 
         주로 워드, 엑셀, 파워포인트와 파일을 지원하며 최근의 오피스 포맷인 Office Open XML File Formats(OOXML, 즉 xml 기반의 *.docx, *.xlsx, *.pptx 등) 이나 아웃룩, 비지오, 퍼블리셔 등으로 지원 파일 포맷을 늘려가고 있다. 
        poi-ooxml은 excel 2007이후 버전이며 이때 schemas도 같이 porting을 해줘야 xlsx 파일을 읽어들인다. 
        poi는 excel 2007포함한 이전 버전이다.  --&gt;
    &lt;!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;
        &lt;artifactId&gt;poi-ooxml-schemas&lt;/artifactId&gt;
        &lt;version&gt;4.1.2&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;
        &lt;artifactId&gt;poi-ooxml&lt;/artifactId&gt;
        &lt;version&gt;5.2.3&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;
        &lt;artifactId&gt;poi&lt;/artifactId&gt;
        &lt;version&gt;5.2.3&lt;/version&gt;
    &lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="12-log4j-관련1-jar-추가하기">12. log4j 관련1 jar 추가하기</h3>
<ul>
<li>이어서 붙여넣기<pre><code class="language-xml">&lt;!-- ===== #12. log4j 관련1 jar 추가하기 ===== --&gt;
    &lt;dependency&gt;
       &lt;groupId&gt;org.lazyluke&lt;/groupId&gt;
       &lt;artifactId&gt;log4jdbc-remix&lt;/artifactId&gt;
       &lt;version&gt;0.2.7&lt;/version&gt;
    &lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<ul>
<li>미리 넣어두기<pre><code class="language-xml">&lt;!-- ==== #165. 이미지 썸네일 생성 라이브러리인 Thumbnailator 라이브러리 추가하기 ==== --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;net.coobird&lt;/groupId&gt;
        &lt;artifactId&gt;thumbnailator&lt;/artifactId&gt;
        &lt;version&gt;0.4.8&lt;/version&gt;
    &lt;/dependency&gt;

</code></pre>
</li>
</ul>
<pre><code>  &lt;!-- === #191. Spring websocket dependency를 에 추가(웹채팅관련1) === --&gt;
  &lt;dependency&gt;
       &lt;groupId&gt;org.springframework&lt;/groupId&gt;
       &lt;artifactId&gt;spring-websocket&lt;/artifactId&gt;
       &lt;version&gt;${org.springframework-version}&lt;/version&gt;
  &lt;/dependency&gt;


  &lt;!-- === #192. (웹채팅관련2) Gson 은 Java 객체를 JSON 표현식으로 변환할 수 있게 해주는 Java 라이브러리임. 
           또한 거꾸로 JSON 표현식 형태의 String 을 Java 객체로 변환도 가능하게 해주는 라이브러리임.
  === --&gt;
  &lt;dependency&gt;
      &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
      &lt;artifactId&gt;gson&lt;/artifactId&gt;
      &lt;version&gt;2.9.1&lt;/version&gt;
  &lt;/dependency&gt;

  &lt;!-- === e메일 관련 === --&gt;
  &lt;dependency&gt;
      &lt;groupId&gt;javax.activation&lt;/groupId&gt;
      &lt;artifactId&gt;activation&lt;/artifactId&gt;
      &lt;version&gt;1.1.1&lt;/version&gt;
  &lt;/dependency&gt;

  &lt;dependency&gt;
      &lt;groupId&gt;com.sun.mail&lt;/groupId&gt;
      &lt;artifactId&gt;javax.mail&lt;/artifactId&gt;
      &lt;version&gt;1.6.2&lt;/version&gt;
  &lt;/dependency&gt;

  &lt;!-- ===== AES-256을 사용하여 양방향 암호화/복호화 하기 위한 라이브러리 ===== --&gt;
   &lt;!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --&gt;
  &lt;dependency&gt;
      &lt;groupId&gt;commons-codec&lt;/groupId&gt;
      &lt;artifactId&gt;commons-codec&lt;/artifactId&gt;
      &lt;version&gt;1.16.0&lt;/version&gt;
  &lt;/dependency&gt;


  &lt;!-- ===== 네이버 스마트 에디터에서 사진첨부 관련하여 이미지의 크기를 구하기위한 라이브러리 ===== --&gt;
   &lt;dependency&gt;
       &lt;groupId&gt;javax.media&lt;/groupId&gt;
       &lt;artifactId&gt;jai_core&lt;/artifactId&gt;
       &lt;version&gt;1.1.3&lt;/version&gt;
   &lt;/dependency&gt;

   &lt;dependency&gt;
       &lt;groupId&gt;javax.media&lt;/groupId&gt;
       &lt;artifactId&gt;jai_codec&lt;/artifactId&gt;
       &lt;version&gt;1.1.3&lt;/version&gt;
   &lt;/dependency&gt;

   &lt;!-- Lombok(롬복)은 Domain(Entity)클래스(VO 클래스, DTO 클래스) 생성시 
           반복되는 getter, setter, toString 등의 메소드 작성 코드를 줄여주는 라이브러리 이다. --&gt;       
  &lt;!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --&gt;
  &lt;dependency&gt;
      &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
      &lt;artifactId&gt;lombok&lt;/artifactId&gt;
      &lt;version&gt;1.18.24&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
  &lt;/dependency&gt;</code></pre><pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Setting_1]]></title>
            <link>https://velog.io/@jjoung-2j/Spring-Setting1</link>
            <guid>https://velog.io/@jjoung-2j/Spring-Setting1</guid>
            <pubDate>Sat, 22 Jun 2024 15:41:20 GMT</pubDate>
            <description><![CDATA[<p>File -&gt; New -&gt; Spring Legacy Project
-&gt; Spring MVC project 클릭
-&gt; com.spring.app 후 확인</p>
<hr>
<h3 id="변경사항">변경사항</h3>
<p>  기본 환경 - 변경 될 환경</p>
<ul>
<li>Spring Framework 3.1.1       - Spring Framework 5.3.22</li>
<li>java version 1.6             - java version 11  (JDK 11 을 사용하므로)</li>
<li>Maven compiler               - Maven compiler
version 2.5.1                  version 3.8.1
source 1.6                     source 11
target 1.6                     target 11</li>
<li>servlet-api 2.5              - javax.servlet-api 4.0.1      (apache-tomcat-9.0.x 을 사용하므로)  </li>
<li>jsp-api 2.1                  - javax.servlet.jsp-api 2.3.3  (apache-tomcat-9.0.x 을 사용하므로)</li>
</ul>
<hr>
<h2 id="pomxml">pom.xml</h2>
<h3 id="properties-변경">properties 변경</h3>
<pre><code class="language-xml">&lt;properties&gt;
        &lt;java-version&gt;11&lt;/java-version&gt;      &lt;!-- JDK 11 용 --&gt;
        &lt;jaxb.version&gt;2.2.11&lt;/jaxb.version&gt;  &lt;!-- JDK 1.8 까지는 내장되었던 JAXB를 JDK 11 에서는 내장하고 있지 않기 때문에  JDK 11 에서 제거 되었던 JAXB를 사용할 수 있도록 하는 것. 참고로 2.2.11 버전은 JAXB가 모듈화 되기 직전 최신버전임. --&gt;
        &lt;org.springframework-version&gt;5.3.22&lt;/org.springframework-version&gt;  
        &lt;org.aspectj-version&gt;1.6.10&lt;/org.aspectj-version&gt;
        &lt;org.slf4j-version&gt;1.6.6&lt;/org.slf4j-version&gt;
  &lt;/properties&gt;
</code></pre>
<hr>
<h3 id="servlet-변경">Servlet 변경</h3>
<ul>
<li>api와 jsp 변경<pre><code class="language-xml">&lt;groupId&gt;javax.servlet&lt;/groupId&gt;
   &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;
   &lt;version&gt;4.0.1&lt;/version&gt; &lt;!-- 다이나믹 웹 모듈 4.0 서블릿 만들기. 전제조건은 Java 1.8 버전 이상과  Servlet API 4.0 버전(servlet-api-4.0.0.jar) 이 있는 Tomcat 9 버전 이상이어야 함 --&gt; 
   &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
      &lt;dependency&gt;
   &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt;
   &lt;artifactId&gt;javax.servlet.jsp-api&lt;/artifactId&gt;
   &lt;version&gt;2.3.3&lt;/version&gt; 
   &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="testplugin-변경">Test(plugin) 변경</h3>
<ul>
<li>2.5.1 -&gt; 3.8.1<pre><code class="language-xml">&lt;plugin&gt;
   &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
   &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
   &lt;version&gt;3.8.1&lt;/version&gt; &lt;!-- jdk11 부터는 적어도 3.7 버전 이상을 사용해야 한다 --&gt; 
   &lt;configuration&gt;
       &lt;source&gt;${java-version}&lt;/source&gt;
       &lt;target&gt;${java-version}&lt;/target&gt;
       &lt;compilerArgument&gt;-Xlint:all&lt;/compilerArgument&gt;
       &lt;showWarnings&gt;true&lt;/showWarnings&gt;
       &lt;showDeprecation&gt;true&lt;/showDeprecation&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;</code></pre>
</li>
</ul>
<p>▶ test 아래 dependencies 전에 복붙</p>
<pre><code class="language-xml">&lt;!-- JDK 11 용 시작 --&gt;
   &lt;!-- JDK 1.8 까지는 내장되었던 JAXB를 JDK 11 에서는 내장하고 있지 않기 때문에  JDK 11 에서 제거 되었던 JAXB를 사용할 수 있도록 하는 것--&gt;
    &lt;dependency&gt;
            &lt;groupId&gt;javax.xml.bind&lt;/groupId&gt;
            &lt;artifactId&gt;jaxb-api&lt;/artifactId&gt;
            &lt;version&gt;${jaxb.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.sun.xml.bind&lt;/groupId&gt;
            &lt;artifactId&gt;jaxb-core&lt;/artifactId&gt;
            &lt;version&gt;${jaxb.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.sun.xml.bind&lt;/groupId&gt;
            &lt;artifactId&gt;jaxb-impl&lt;/artifactId&gt;
            &lt;version&gt;${jaxb.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
        &lt;groupId&gt;com.sun.activation&lt;/groupId&gt;
            &lt;artifactId&gt;javax.activation&lt;/artifactId&gt;
        &lt;version&gt;1.2.0&lt;/version&gt;
    &lt;/dependency&gt;
   &lt;!-- &lt;dependency&gt;
            &lt;groupId&gt;javax.activation&lt;/groupId&gt;
            &lt;artifactId&gt;activation&lt;/artifactId&gt;
            &lt;version&gt;1.1.1&lt;/version&gt;
        &lt;/dependency&gt; 
   --&gt;
        &lt;!-- 현재 JDK 11 사용중인데, @Resource 어노테이션은 JDK 1.8 까지만 지원되고 그 이후로는 지원이 안되므로 JDK 11 에서 사용하려면 아래와 같이 추가해주어야 한다. --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;javax.annotation&lt;/groupId&gt;
        &lt;artifactId&gt;javax.annotation-api&lt;/artifactId&gt;
        &lt;version&gt;1.3.1&lt;/version&gt;
    &lt;/dependency&gt;
   &lt;!-- JDK 11 용 끝 --&gt;
</code></pre>
<p>board -&gt; properties 
-&gt; java build path -&gt; library -&gt; jdk 11 로 edit 후 apply 해주기
-&gt; java compiler -&gt; 11 로 변경
-&gt; project facts -&gt; 버전 4.0 / 11 변경후 runtimes 체크</p>
<hr>
<h2 id="webxml">web.xml</h2>
<p>버전 변경</p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app version=&quot;4.0&quot; xmlns=&quot;http://xmlns.jcp.org/xml/ns/javaee&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd&quot;&gt;</code></pre>
<hr>
<h2 id="root-contextxml">root-context.xml</h2>
<p>spring -&gt; root-context.xml</p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;
    xmlns:mybatis-spring=&quot;http://mybatis.org/schema/mybatis-spring&quot;
    xsi:schemaLocation=&quot;http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd&quot;&gt;</code></pre>
<hr>
<h2 id="servlet-contextxml">servlet-context.xml</h2>
<p>spring -&gt; appservlet -&gt; servlet-context.xml
버전변경</p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans:beans xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;
    xmlns:beans=&quot;http://www.springframework.org/schema/beans&quot;
    xmlns:mvc=&quot;http://www.springframework.org/schema/mvc&quot;
    xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
    xmlns:task=&quot;http://www.springframework.org/schema/task&quot;
    xsi:schemaLocation=&quot;http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd&quot;&gt;
  &lt;mvc:annotation-driven /&gt;</code></pre>
<ul>
<li><code>&lt;resources mapping=&quot;/resources/**&quot; location=&quot;/resources/&quot; /&gt;</code> 변경<pre><code class="language-xml">&lt;mvc:resources mapping=&quot;/resources/**&quot; location=&quot;/resources/&quot; /&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="변경-후-project-우클릭---maven---update-project">변경 후 project 우클릭 -&gt; Maven -&gt; Update Project</h3>
<ul>
<li><p>서버 더블클릭 -&gt; Modules</p>
</li>
<li><blockquote>
<p>Path 원하는 곳 변경</p>
</blockquote>
</li>
<li><p>실행이 느릴 경우 -&gt; Overviews</p>
</li>
<li><blockquote>
<p>Timeouts 를 60 / 30 으로 설정</p>
</blockquote>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ Setting ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-Setting-2e71mbi7</link>
            <guid>https://velog.io/@jjoung-2j/Shop-Setting-2e71mbi7</guid>
            <pubDate>Sat, 22 Jun 2024 15:40:41 GMT</pubDate>
            <description><![CDATA[<h3 id="mydbcp-setting">MYDBCP Setting</h3>
<ul>
<li><p>was 폴더 -&gt; conf -&gt; context.xml</p>
<pre><code class="language-text">&lt;!-- ======= MyDBCP Setting Start ======= --&gt;
&lt;Resource name=&quot;jdbc/myoracle&quot; auth=&quot;Container&quot;
        type=&quot;javax.sql.DataSource&quot; driverClassName=&quot;oracle.jdbc.OracleDriver&quot;
        url=&quot;jdbc:oracle:thin:@127.0.0.1:1521:xe&quot;
        username=&quot;@@user&quot; password=&quot;@@&quot; maxTotal=&quot;20&quot; maxIdle=&quot;20&quot;
        maxWaitMillis=&quot;10000&quot;/&gt;
&lt;!-- ======= MyDBCP Setting End ======= --&gt;</code></pre>
</li>
<li><p>xml</p>
<pre><code class="language-xml">&lt;!-- ========= MyDBCP Setting Start  ===========  --&gt;
&lt;resource-ref&gt;
   &lt;description&gt;Oracle Datasource example&lt;/description&gt;
   &lt;res-ref-name&gt;jdbc/myoracle&lt;/res-ref-name&gt;
   &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
   &lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;
&lt;!-- ========= MyDBCP Setting End  ===========  --&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="library">Library</h3>
<ul>
<li><p>ojdbc8.jar</p>
</li>
<li><p>Tomcat 10</p>
</li>
<li><blockquote>
<p>jakarta.servlet.jsp.jstl-2.0.0.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>jakarta.servlet.jsp.jstl-api-2.0.0.jar</p>
</blockquote>
</li>
<li><p>Tomcat 9
다운 : <a href="https://tomcat.apache.org/download-taglibs.cgi">https://tomcat.apache.org/download-taglibs.cgi</a></p>
</li>
<li><blockquote>
<p>taglib-standard-impl-1.2.5.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>taglib-standard-jstlel-1.2.5.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>taglib-standard-spec-1.2.5.jar</p>
</blockquote>
</li>
<li><p>AES256 ( 암호화 - 복호화 )
다운 : <a href="https://mvnrepository.com/artifact/commons-codec/commons-codec">https://mvnrepository.com/artifact/commons-codec/commons-codec</a></p>
</li>
</ul>
<p>1.15 -&gt; jar 다운
-&gt; commons-codec-1.15.jar</p>
<ul>
<li>JSON
다운 : <a href="https://mvnrepository.com">https://mvnrepository.com</a> -&gt; json 검색
json in java -&gt; 20231013 - bundle 다운
json.simple -&gt; 1.1.1 - bundle 다운</li>
<li><blockquote>
<p>json-20231013.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>json-simple-1.1.1.jar</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="bootstrap">Bootstrap</h3>
<ul>
<li>webapp 에 다운받은 폴더 넣기</li>
<li><blockquote>
<p>bootstrap-4.6.2-dist</p>
</blockquote>
</li>
</ul>
<h3 id="jquery">jQuery</h3>
<ul>
<li>webapp -&gt; js -&gt; 압축한 min 파일 넣기</li>
<li><blockquote>
<p>jquery-3.7.1.min.js</p>
</blockquote>
</li>
</ul>
<h3 id="jquery-ui">jQuery UI</h3>
<ul>
<li>webapp -&gt; js 에 다운받은 폴더 넣기</li>
<li><blockquote>
<p>jquery-ui-1.13.1.custom</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="filter">Filter</h3>
<ul>
<li><p>Encoding 방법</p>
<pre><code class="language-java">@WebFilter(&quot;/*&quot;)
public class 클래스명 extends HttpFilter implements Filter{
  ...
}</code></pre>
</li>
<li><p>xml 선언 방법</p>
</li>
<li><blockquote>
<p>xml</p>
</blockquote>
<pre><code class="language-xml">&lt;filter&gt;
   &lt;display-name&gt;filter&lt;/display-name&gt;
   &lt;filter-name&gt;filter&lt;/filter-name&gt;
   &lt;filter-class&gt;filter&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
   &lt;filter-name&gt;filter&lt;/filter-name&gt;
   &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</code></pre>
</li>
</ul>
<p>-&gt; Java Resources -&gt; class</p>
<pre><code class="language-java">public class 클래스명 extends HttpFilter implements Filter{
    ...
    // Tomcat9의 경우 한글 깨지지 않게하기
    request.setCharacterEncoding(&quot;UTF-8&quot;);
}</code></pre>
<p>진행중..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ Header, Footer ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-Header-Footer</link>
            <guid>https://velog.io/@jjoung-2j/Shop-Header-Footer</guid>
            <pubDate>Mon, 29 Apr 2024 10:56:44 GMT</pubDate>
            <description><![CDATA[<h3 id="header">Header</h3>
<ul>
<li>head<pre><code class="language-jsp">&lt;%
  String ctxPath = request.getContextPath();
%&gt;
&lt;title&gt;HOMEPAGE&lt;/title&gt;
</code></pre>
</li>
</ul>
<p>&lt;%-- Required meta tags --%&gt;</p>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<p>&lt;%-- Bootstrap CSS --%&gt;</p>
<link rel="stylesheet" type="text/css" href="<%= ctxPath%>/bootstrap-4.6.2-dist/css/bootstrap.min.css" > 

<p>&lt;%-- Font Awesome 6 Icons --%&gt;</p>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">

<p>&lt;%-- 직접 만든 CSS --%&gt;</p>
<link rel="stylesheet" type="text/css" href="<%= ctxPath%>/css/main/main.css" />

<p>&lt;%-- Optional JavaScript --%&gt;</p>
<script type="text/javascript" src="<%= ctxPath%>/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="<%= ctxPath%>/bootstrap-4.6.2-dist/js/bootstrap.bundle.min.js" ></script> 

<p>&lt;%-- jQuery UI CSS 및 JS --%&gt;</p>
<link rel="stylesheet" type="text/css" href="<%= ctxPath%>/jquery-ui-1.13.1.custom/jquery-ui.min.css" />
<script type="text/javascript" src="<%= ctxPath%>/jquery-ui-1.13.1.custom/jquery-ui.min.js"></script>

<p>&lt;%-- 직접 만든 JS --%&gt;</p>
<script type="text/javascript" src="<%= ctxPath%>/js/main/main.js"></script>
</head>
```

<ul>
<li><p>body</p>
<pre><code class="language-jsp">&lt;body&gt;
&lt;%-- 상단 네비게이션 시작 --%&gt;
 &lt;nav class=&quot;navbar navbar-expand-lg navbar-light bg-light fixed-top mx-4 py-3&quot;&gt;

    &lt;%-- Brand/logo --%&gt; &lt;%-- Font Awesome 6 Icons --%&gt;
    &lt;a class=&quot;navbar-brand&quot; href=&quot;&lt;%= ctxPath %&gt;/index.up&quot; style=&quot;margin-right: 10%;&quot;&gt;&lt;img src=&quot;&lt;%= ctxPath %&gt;/images/sist_logo.png&quot; /&gt;&lt;/a&gt;

    &lt;%-- 아코디언 같은 Navigation Bar 만들기 --%&gt;
     &lt;button class=&quot;navbar-toggler&quot; type=&quot;button&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#collapsibleNavbar&quot;&gt;
       &lt;span class=&quot;navbar-toggler-icon&quot;&gt;&lt;/span&gt;
     &lt;/button&gt;

    &lt;div class=&quot;collapse navbar-collapse&quot; id=&quot;collapsibleNavbar&quot;&gt;
      &lt;ul class=&quot;navbar-nav&quot; style=&quot;font-size: 16pt;&quot;&gt;
         &lt;li class=&quot;nav-item active&quot;&gt;
            &lt;a class=&quot;nav-link menufont_size&quot; href=&quot;&lt;%= ctxPath %&gt;/index.up&quot;&gt;Home&lt;/a&gt;
         &lt;/li&gt;
         &lt;li class=&quot;nav-item active&quot;&gt;
            &lt;a class=&quot;nav-link menufont_size&quot; href=&quot;&lt;%= ctxPath %&gt;/member/memberRegister.up&quot;&gt;회원가입&lt;/a&gt;
         &lt;/li&gt;
        &lt;li class=&quot;nav-item&quot;&gt;
           &lt;a class=&quot;nav-link menufont_size&quot; href=&quot;&lt;%= ctxPath %&gt;/member/memberList.up&quot;&gt;회원목록&lt;/a&gt;
        &lt;/li&gt;
        &lt;li class=&quot;nav-item dropdown&quot;&gt;
            &lt;a class=&quot;nav-link dropdown-toggle menufont_size text-primary&quot; href=&quot;#&quot; id=&quot;navbarDropdown&quot; data-toggle=&quot;dropdown&quot;&gt; 
               Dropdown                                &lt;%-- .text-primary 는 글자색으로 파랑색임 --%&gt;  
            &lt;/a&gt;
            &lt;div class=&quot;dropdown-menu&quot; aria-labelledby=&quot;navbarDropdown&quot;&gt;
               &lt;a class=&quot;dropdown-item text-primary&quot; href=&quot;#&quot;&gt;Action&lt;/a&gt;
               &lt;a class=&quot;dropdown-item text-primary&quot; href=&quot;#&quot;&gt;Another action&lt;/a&gt;
               &lt;div class=&quot;dropdown-divider&quot;&gt;&lt;/div&gt;
               &lt;a class=&quot;dropdown-item text-primary&quot; href=&quot;#&quot;&gt;Something else here&lt;/a&gt;
            &lt;/div&gt;
         &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
 &lt;/nav&gt;
 &lt;%-- 상단 네비게이션 끝 --%&gt;

  &lt;hr style=&quot;background-color: gold; height: 1.2px; position: relative; top:85px; margin: 0 1.7%;&quot;&gt; 

  &lt;div class=&quot;container-fluid&quot; id=&quot;container&quot; style=&quot;position: relative; top:90px; padding: 0.1% 2.5%;&quot;&gt;

   &lt;div class=&quot;row&quot;&gt;
     &lt;div class=&quot;col-md-3&quot; id=&quot;sideinfo&quot;&gt;
       &lt;div style=&quot;height: 200px; text-align: left; padding: 20px;&quot;&gt;
          2. 로그인/Tree/View
       &lt;/div&gt;
       &lt;div id=&quot;sidecontent&quot; style=&quot;text-align: left; padding: 20px;&quot;&gt;&lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&quot;col-md-9&quot; id=&quot;maininfo&quot; align=&quot;center&quot;&gt;
       &lt;div id=&quot;maincontent&quot;&gt;
&lt;%-- body 를 마무리하지 않는다. --%&gt;</code></pre>
</li>
</ul>
<blockquote>
<h3 id="div-idmaincontent-안의-내용은-계속-변경된다"><code>&lt;div id=&quot;maincontent&quot;&gt;</code> 안의 내용은 계속 변경된다.</h3>
</blockquote>
<h3 id="footer">Footer</h3>
<ul>
<li><p><code>&lt;/div&gt;</code>  마무리 후 진행</p>
<pre><code class="language-jsp">      &lt;/div&gt; &lt;%-- id=&quot;maincontent&quot; --%&gt;
  &lt;/div&gt; &lt;%-- id=&quot;maininfo&quot; --%&gt;
&lt;/div&gt; &lt;%-- class=&quot;row&quot; --%&gt;
&lt;div class=&quot;row mt-2 mb-4 text-center&quot; id=&quot;footer&quot;&gt;
     &lt;div class=&quot;col-md-12&quot;&gt;
        &lt;p&gt;
           &amp;copy; Company 2024 &amp;nbsp;&amp;nbsp; 대표전화(전국) : 0000-0000
        &lt;/p&gt;
        &lt;p&gt;
           회사명
        &lt;/p&gt;
     &lt;/div&gt;
   &lt;/div&gt;

 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ 회원가입 ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85</link>
            <guid>https://velog.io/@jjoung-2j/Shop-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85</guid>
            <pubDate>Sun, 28 Apr 2024 16:07:07 GMT</pubDate>
            <description><![CDATA[<h3 id="membervo">MemberVO</h3>
<pre><code class="language-java">// === Field === //
~~
// === Getter, Setter === //</code></pre>
<hr>
<h3 id="controller">Controller</h3>
<pre><code class="language-java">private MemberDAO mdao = null;

// === 기본생성자 === //
public MemberRegister(){
    mdao = new MemberDAO_imple();
}

@Override
public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception{
    String method = request.getMethod();
    if(&quot;GET&quot;.equalsIgnoreCase(method)){
        super.setRedirect(false);
        super.setViewPage(&quot;/WEB-INF/member/memberRegister.jsp&quot;); 
    }
    else{    // &quot;POST&quot;
        String name = request.getParameter(&quot;name&quot;);
        String userid = request.getParameter(&quot;userid&quot;);
        String pwd = request.getParameter(&quot;pwd&quot;);
        ...

        MemberVO member = new MemberVO();
        member.setUserid(userid);
        member.setPwd(pwd);
        member.setName(name);
        ...

        // === 회원가입 성공/실패 시 메시지와 이동 === //
        String message = &quot;&quot;;
        String location = &quot;&quot;;

        try{
            int n = mdao.registerMember(member);

            if(n==1){
                message = &quot;회원가입 성공^-^&quot;;
                location = request.getContextPath() + &quot;/index.do&quot;;
            }
        } catch(SQLException e) {
            message = &quot;회원가입 실패ㅠㅠ&quot;;
            location = &quot;javascript:history.back()&quot;;    // 자바스크립트 : 이전페이지 이동
            e.printStackTrace();
        }    // end of try~catch--------------------

        request.setAttribute(&quot;message&quot;,message);
        request.setAttribute(&quot;location&quot;,location);

        super.setRedirect(false);    // forward
        super.setViewPage(&quot;/WEB-INF/msg.jsp&quot;);

    }    // end of if~else--------------
}    // end of public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception------</code></pre>
<hr>
<h3 id="jsp--get---register">JSP ( Get - Register)</h3>
<pre><code class="language-jsp">&lt;%
    String ctxPath = request.getContextPath();
%&gt;

&lt;%-- 직접 만든 CSS --%&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;%= ctxPath%&gt;/css/member/memberRegister.css&quot; /&gt;

&lt;script src=&quot;https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js&quot;&gt;&lt;/script&gt;

&lt;%-- 직접 만든 JS --%&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;%= ctxPath%&gt;/js/member/memberRegister.js&quot;&gt;&lt;/script&gt;

&lt;jsp:include page=&quot;../header.jsp&quot; /&gt;
... ( 내용물 )
&lt;jsp:include page=&quot;../footer.jsp&quot; /&gt;</code></pre>
<h3 id="jsp--post---message-">JSP ( Post - Message )</h3>
<pre><code class="language-jsp">&lt;script type=&quot;text/javascript&quot;&gt;
    // === 메시지 출력 === //
    alert(&quot;${requestScope.message}&quot;);
    // === 페이지 이동 === //
    location.href = &quot;${requestScope.location}&quot;;
&lt;/script&gt;</code></pre>
<hr>
<h3 id="security">Security</h3>
<h4 id="--sha256--암호화-">- Sha256 ( 암호화 )</h4>
<h4 id="--aes256--암호화---복호화-">- AES256 ( 암호화 - 복호화 )</h4>
<h4 id="--secretmykey">- SecretMyKey</h4>
<hr>
<h3 id="dao">DAO</h3>
<pre><code class="language-java">// === 회원가입 === //
int registerMember(MemberVO member) throws SQLException;</code></pre>
<h3 id="dao_imple">DAO_imple</h3>
<ul>
<li>기본 세팅<pre><code class="language-java">private DataSource ds;
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
</code></pre>
</li>
</ul>
<p>private AES256 aes;        // 암호화-복호화</p>
<p>// === 기본 생성자 === //
public  MemberDAO_imple(){
    try{
        Context initContext = new InitialContext();
        Context envContext = (Context)initContext.lookup(&quot;java:/comp/env&quot;);
        ds = (DataSource)envContext.lookup(&quot;jdbc/myoracle&quot;);
        aes = new AES256(SecretMyKey.key);
    } catch(NamingException e){
        e.printStackTrace();
    } catch(UnsupportedEncodingException e){
        e.printStackTrace();
    }    // end of try~catch--------------------------
}</p>
<p>// === 자원반납 메소드 === //
private void close(){
    try{
        if(rs != null){
            rs.close();
            rs=null;
        }
        if(pstmt != null){
            pstmt.close();
            pstmt=null;
        }
        if(conn != null){
            conn.close();
            conn=null;
        }
    } catch(SQLException e){
        e.printStackTrace();
    }    // end of try~catch--------
}    // end of close()----------------</p>
<pre><code>
- 회원가입 메소드
```java
public int registerMember(MemberVO member) throws SQLException{
    int result = 0;
    try{
        conn = ds.getConnection();
        String sql = &quot; insert into 테이블명(userid, pwd, name, ... 컬럼명) &quot;
                + &quot; values( ?, ?, ? ...) &quot;;
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, member.getUserid());

        // === SHA256 ( 암호화 ) === // 
        pstmt.setString(2, Sha256.encrypt(member.getPwd()));

        pstmt.setString(3, member.getName());

        // === AES256 ( 암호화 - 복호화 ) === //
        pstmt.setString(4, aes.encrypt(member.getEmail()));

        ...

        result = pstmt.executeUpdate();
    } catch(UnsupportedEncodingException | GeneralSecurityException e){
        e.printStackTrace();
    } finally{
        close();
    }    // end of try~catch~finally-----------------
    return result;
}    // end of public int registerMember(MemberVO member) throws SQLException------</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ 첫페이지 ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-%EC%B2%AB%ED%8E%98%EC%9D%B4%EC%A7%80</link>
            <guid>https://velog.io/@jjoung-2j/Shop-%EC%B2%AB%ED%8E%98%EC%9D%B4%EC%A7%80</guid>
            <pubDate>Sun, 28 Apr 2024 08:42:15 GMT</pubDate>
            <description><![CDATA[<h3 id="properties">Properties</h3>
<pre><code class="language-text"># index mapping information
/=common.controller.IndexController
/index.do=common.controller.IndexController</code></pre>
<hr>
<h3 id="indexcontroller">IndexController</h3>
<ul>
<li>AbstractController 클래스 extends<pre><code class="language-java">private ProductDAO pdao = null;
</code></pre>
</li>
</ul>
<p>public IndexController(){
    pdao = new ProductDAO_imple();
}
// === Override === //
try{
    // === 모든 이미지 리스트 뽑기 === //
    List<ImageVO> imgList = pdao.imageSelectAll();
    request.setAttribute(&quot;imgList&quot;,imgList);</p>
<pre><code>super.setRedirect(false);
super.setViewPage(&quot;/WEB-INF/index.jsp&quot;);</code></pre><p>} catch(SQLException e){
    super.setRedirect(true);
    super.setViewPage(request.getContextPath() + &quot;/error.do&quot;);
}</p>
<pre><code>
### ErrorController
```java
// === Override === //
super.setRedirect(false);
super.setViewPage(&quot;/WEB-INF-error.jsp&quot;);</code></pre><hr>
<h3 id="dao">DAO</h3>
<pre><code class="language-java">// === 메인페이지 이미지 === //
List&lt;ImageVO&gt; imageSelectAll() throws SQLException;</code></pre>
<h3 id="dao_imple">DAO_imple</h3>
<pre><code class="language-java">private DataSource ds;    // 아파치톰캣에서 제공하는 DB Connection Pool
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;

// 기본생성자
public ProductDAO_imple(){
    try{
        Context initContext = new InitialContext();
        Context envContext = (Context)initContext.lookup(&quot;java:/comp/env&quot;);
        ds = (DataSource)envContext.lookup(&quot;jdbc/myoracle&quot;);
    } catch(NamingException e){
        e.printStackTrace();
    }    // end of try~catch--------------
}

// === 자원 반납 close 메소드 === //
private void close(){
    try{
        if(rs != null){
            rs.close();
            rs=null;
        }
        if(pstmt != null){
            pstmt.close();
            pstmt=null;
        }
        if(conn != null){
            conn.close();
            conn=null;
        }
    } catch(SQLException e){
        e.printStackTrace();
    }    // end of try~catch--------------------
}    // end of private void close()-----------------

// === 상품이미지 파일명 조회 메소드 === //
@Override
public List&lt;ImageVO&gt; imageSelectAll() throws SQLException{
    List&lt;ImageVO&gt; imgList = new ArrayList&lt;&gt;();
    try{
        conn = ds.getConnection();    // DB 와 연결
        String sql = &quot; select imgno, imgfilename &quot;
            + &quot; from tbl_main_image &quot;
            + &quot; order by imgno asc &quot;;
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery();
        while(rs.next()){
            ImageVO imgvo = new ImageVO();
            imgvo.setImageno(rs.getInt(&quot;imgno&quot;));
            imgvo.setImgfilename(rs.getString(&quot;imgfilename&quot;));

            imgList.add(imgvo);
        }    // end of while-----------
    } finally{
        close();
    }    // end of try~finally-----------
    return imgList;
}    // end of public List&lt;ImageVO&gt; imageSelectAll() throws SQLException----</code></pre>
<hr>
<h3 id="jsp--정상-">JSP ( 정상 )</h3>
<pre><code class="language-jsp">&lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %&gt;
&lt;%
    String ctxPath = request.getContextPath();
%&gt;

&lt;%-- 직접 만든 CSS --%&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;%= ctxPath%&gt;/css/main/main.css&quot; /&gt;

&lt;jsp:include page=&quot;header.jsp&quot; /&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;div&gt;
        &lt;div id=&quot;carouselExampleIndicators&quot; class=&quot;carousel slide&quot; data-ride=&quot;carousel&quot;&gt;
            &lt;ol class=&quot;carousel-indicators&quot;&gt;
                &lt;c:if test=&quot;${not empty requestScope.imgList}&quot;&gt;
                    &lt;c:forEach items=&quot;${requestScope.imgList}&quot; varStatus=&quot;status&quot;&gt;
                        &lt;c:if test=&quot;${status.index == 0}&quot;&gt;
                            &lt;li data-target=&quot;#carouselExampleIndicators&quot; data-slide-to=&quot;${status.index}&quot; class=&quot;active&quot;&gt;&lt;/li&gt;
                        &lt;/c:if&gt;
                        &lt;c:if test=&quot;${status.index &gt; 0}&quot;&gt;
                              &lt;li data-target=&quot;#carouselExampleIndicators&quot; data-slide-to=&quot;${status.index}&quot; &gt;&lt;/li&gt;
                          &lt;/c:if&gt;
                     &lt;/c:forEach&gt;
                &lt;/c:if&gt;
            &lt;/ol&gt;
            &lt;div class=&quot;carousel-inner&quot;&gt;
                &lt;c:if test=&quot;${not empty requestScope.imgList}&quot;&gt;
                      &lt;c:forEach var=&quot;imgvo&quot; items=&quot;${requestScope.imgList}&quot; varStatus=&quot;status&quot;&gt;
                          &lt;c:if test=&quot;${status.index == 0}&quot;&gt;
                              &lt;div class=&quot;carousel-item active&quot;&gt;
                                &lt;img src=&quot;&lt;%= ctxPath %&gt;/images/${imgvo.imgfilename}&quot; class=&quot;d-block w-100&quot; alt=&quot;...&quot;&gt; &lt;!-- d-block 은 display: block; 이고  w-100 은 width 의 크기는 &lt;div class=&quot;carousel-item active&quot;&gt;의 width 100% 로 잡으라는 것이다. --&gt;
                                &lt;%-- 상품명 컬럼이 있는 경우
                                &lt;div class=&quot;carousel-caption d-none d-md-block&quot;&gt; &lt;!-- d-none 은 display : none; 이므로 화면에 보이지 않다가, d-md-block 이므로 d-md-block 은 width 가 768px이상인 것에서만 display: block; 으로 보여라는 말이다.  --&gt; 
                                      &lt;h5&gt;Koala&lt;/h5&gt;
                                    &lt;p&gt;Koala Content&lt;/p&gt;
                                  &lt;/div&gt;
                                  --%&gt;
                               &lt;/div&gt;
                          &lt;/c:if&gt;
                          &lt;c:if test=&quot;${status.index &gt; 0}&quot;&gt;
                              &lt;div class=&quot;carousel-item&quot;&gt;
                                &lt;img src=&quot;&lt;%= ctxPath %&gt;/images/${imgvo.imgfilename}&quot; class=&quot;d-block w-100&quot; alt=&quot;...&quot;&gt;          
                            &lt;/div&gt;
                          &lt;/c:if&gt;
                      &lt;/c:forEach&gt;
                  &lt;/c:if&gt;
             &lt;/div&gt;
             &lt;a class=&quot;carousel-control-prev&quot; href=&quot;#carouselExampleIndicators&quot; role=&quot;button&quot; data-slide=&quot;prev&quot;&gt;
                &lt;span class=&quot;carousel-control-prev-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;
                &lt;span class=&quot;sr-only&quot;&gt;Previous&lt;/span&gt;
              &lt;/a&gt;
              &lt;a class=&quot;carousel-control-next&quot; href=&quot;#carouselExampleIndicators&quot; role=&quot;button&quot; data-slide=&quot;next&quot;&gt;
                &lt;span class=&quot;carousel-control-next-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;
                &lt;span class=&quot;sr-only&quot;&gt;Next&lt;/span&gt;
              &lt;/a&gt;
        &lt;/div&gt;
        설명글
    &lt;/div&gt;
&lt;/div&gt;
&lt;jsp:include page=&quot;footer.jsp&quot; /&gt;</code></pre>
<h3 id="jsp--error-페이지-">JSP ( Error 페이지 )</h3>
<pre><code class="language-jsp">&lt;%
    String ctxPath = request.getContextPath();
%&gt;

&lt;jsp:include page=&quot;header.jsp&quot; /&gt;
&lt;div class=&quot;container&quot;&gt;
    &lt;p class=&quot;h2 text-danger mt-4&quot;&gt;장애발생&lt;/p&gt;
    &lt;img src=&quot;&lt;%= ctxPath%&gt;/images/error.gif&quot; class=&quot;img-fluid&quot; /&gt;
    &lt;p class=&quot;h4 text-primary mt-3&quot;&gt;빠른 복구를 위해 최선을 다하겠습니다&lt;/p&gt;
&lt;/div&gt;
&lt;jsp:include page=&quot;footer.jsp&quot; /&gt;</code></pre>
<hr>
<h3 id="참고">참고</h3>
<ul>
<li>Connection : <a href="https://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&amp;_10g">https://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&amp;_10g</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SHOP [ SQL ]]]></title>
            <link>https://velog.io/@jjoung-2j/SHOP-SQL</link>
            <guid>https://velog.io/@jjoung-2j/SHOP-SQL</guid>
            <pubDate>Sun, 28 Apr 2024 07:52:19 GMT</pubDate>
            <description><![CDATA[<h3 id="sql">SQL</h3>
<ul>
<li>SQL 폴더와 파일 생성</li>
</ul>
<h4 id="open-with---other---external-programs">Open With -&gt; Other -&gt; External programs</h4>
<p>-&gt; Browse.. -&gt; sql실행파일</p>
<h4 id="use-this-editor-for-all-sql파일명files-체크">Use this editor for all &#39;sql파일명&#39;files 체크</h4>
<hr>
<h3 id="sql-문-실행">SQL 문 실행</h3>
<h4 id="--sys-로-작업">- SYS 로 작업</h4>
<pre><code class="language-sql">show user;
-- USER이(가) &quot;SYS&quot;입니다.

-- 오라클 계정 생성시 계정명 앞에 c## 붙이지 않고 생성하도록 하겠습니다.
alter session set &quot;_ORACLE_SCRIPT&quot;=true;
-- Session이(가) 변경되었습니다.

-- 오라클 계정명은 @ 이고 암호는 # 인 사용자 계정을 생성합니다.
create user @ identified by # default tablespace users; 
-- User @이(가) 생성되었습니다.

-- 위에서 생성되어진 MYMVC9_USER 이라는 오라클 일반사용자 계정에게 오라클 서버에 접속이 되어지고,
-- 테이블 생성 등등을 할 수 있도록 여러가지 권한을 부여해주겠습니다.
grant connect, resource, create view, unlimited tablespace to MYMVC9_USER;
-- Grant을(를) 성공했습니다.</code></pre>
<h4 id="---로-접속-만들기">- @ 로 접속 만들기</h4>
<ul>
<li>설정한 사용자 이름과 비밀번호 테스트 후 저장하기</li>
</ul>
<h4 id="---로-작업">- @ 로 작업</h4>
<pre><code class="language-sql">// === 테이블 생성 ,시퀀스 생성 === //</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ DTO / VO ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-DTO-VO</link>
            <guid>https://velog.io/@jjoung-2j/Shop-DTO-VO</guid>
            <pubDate>Sat, 27 Apr 2024 17:47:02 GMT</pubDate>
            <description><![CDATA[<h3 id="dto">DTO</h3>
<ul>
<li>Data Transfer Object</li>
</ul>
<h3 id="vo">VO</h3>
<ul>
<li>Value Object</li>
</ul>
<hr>
<h3 id="dto--vo">DTO == VO</h3>
<pre><code class="language-java">private String 변수명(컬럼명);
...

// SHA-256 =&gt; 단방향 암호화 / 한번 암호하면 풀 수 없다.
// AES-256 =&gt; 양방향 암호화 / 암호화 - 복호화

// === Getter, Setter === //
...</code></pre>
<hr>
<h3 id="정리">정리</h3>
<ul>
<li><p>myshop.domain -&gt; ImageVO.java</p>
</li>
<li><p>member.domain -&gt; MemberVO.java</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ InterCommand, AbstractController ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-InterCommand-AbstractController</link>
            <guid>https://velog.io/@jjoung-2j/Shop-InterCommand-AbstractController</guid>
            <pubDate>Sat, 27 Apr 2024 17:34:14 GMT</pubDate>
            <description><![CDATA[<h3 id="intercommand">InterCommand</h3>
<ul>
<li>인터페이스</li>
<li>import 타입이 해당 was 에 적합하지 않을 때, <code>ctrl + shit + o</code> 입력<pre><code class="language-java">public interface InterCommand {
  void execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}</code></pre>
</li>
</ul>
<h3 id="abstractcontroller">AbstractController</h3>
<ul>
<li><p>InterCommand 인터페이스 implement 하기</p>
</li>
<li><p>abstract 클래스로 설정 -&gt; override 해주지 않아도 된다.</p>
<pre><code class="language-java">public abstract class AbstractController implements InterCommand {
  private boolean isRedirect = false;
  // false -&gt; forward
  // true -&gt; sendRedirect

  private String viewPage;
  // false -&gt; ~.jsp
  // true -&gt; URL 주소

  // === Getter, Setter === //
  ...
}</code></pre>
</li>
</ul>
<hr>
<h3 id="정리">정리</h3>
<ul>
<li><p>common.controller -&gt; InterCommand.java</p>
</li>
<li><p>common.controller -&gt; AbstractController.java</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ FrontController ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-FrontController</link>
            <guid>https://velog.io/@jjoung-2j/Shop-FrontController</guid>
            <pubDate>Sat, 27 Apr 2024 16:47:48 GMT</pubDate>
            <description><![CDATA[<h3 id="properties">Properties</h3>
<ul>
<li>WEB-INF -&gt; properties 파일 생성</li>
</ul>
<p>-&gt; 주석문 : #</p>
<p>-&gt; 한글/공백 불가</p>
<p>-&gt; Context Path 명 이후부터 표시</p>
<pre><code class="language-file">~~/=패키지명.클래스명(첫글자는 대문자로)
Ex)
/index.up=common.controller.IndexController</code></pre>
<hr>
<h3 id="servlet">Servlet</h3>
<p>-&gt; 생성한 properties 파일 location 복사 후 Servlet 생성 실행하기</p>
<ul>
<li><p>description : servlet 설명문(사용자가 웹에서 *.up 을 했을 경우 이 서블릿이 응답을 해주도록 한다.)</p>
</li>
<li><p>Initialization parameters
add </p>
</li>
<li><blockquote>
<p>name : 지정이름</p>
</blockquote>
</li>
<li><blockquote>
<p>value : 복사한 location 붙여넣기</p>
</blockquote>
</li>
<li><blockquote>
<p>description : mapping 설명문(*.up에 대한 클래스의 매핑파일)</p>
</blockquote>
</li>
<li><p>URL mapping : edit 하여 <code>&#39;*.마지막글자&#39;</code> 로 변경</p>
</li>
</ul>
<p>-&gt; constructors from superclass 체크 해제
-&gt; init / doGet / doPost 체크</p>
<p>생성 후 value 에 빨간줄 에러가 뜰 시
-&gt; value 에 각 \ 앞에 \ 를 하나 더 작성해 주면 된다.</p>
<h3 id="init">init</h3>
<ul>
<li><p>WAS 가 구동된 이후 1번만 실행</p>
<pre><code class="language-java">private Map&lt;String, Object&gt; cmdMap = new HashMap&lt;&gt;();
public void init(ServletConfig config) throws ServletException{
// === 특정 파일에 있는 내용 읽어오기 === //
FileInputStream fis = null;
String props = config.getInitParameter(&quot;Servlet지정이름&quot;);
// props = Servlet 에 지정한 value 값(location)
try{
  fis = new FileInputStream(props);
  Properties pr  = new Properties();
  pr.load(fis);
  // fis 객체를 사용하여 props(location 위치의 파일)을 읽어
  // pr 에 load 한다. ( 왼쪽 key, 오른쪽 value 로 인식 )

  Enumeration&lt;Object&gt; en = pr.keys();
  // pr에 저장한 모든 key 값들 가져오기

  while(en.hasMoreElements()){    // 저장된 key 값이 있으면
      String key = (String)en.nextElement();
      // object 를 string 타입으로 casting 해주기
      String classname = pr.getProperty(key);
      // value 값 (class 위치)

      if(className != null){
          className = className.trim();    // 공백 대비
          // === 1. 클래스화 === //
          Class&lt;?&gt; cls = Class.forName(className);
          // className 위치 클래스화하여 객체

          // 생성자를 만들 수 있는 객체
          Constructor&lt;?&gt; constrt = cls.getDeclaredConstructor();

         // === 2. 인스턴스화 === //
          Object obj = constrt.newInstance();

          // === 3. Mapping === //
          cmdMap.put(key,obj);
      }    // end of if------------------
  }    // end of while---------------------
} catch(FileNotFoundException e){
  System.out.println(&quot;~~ value값인 properties 파일 location 존재 X&quot;);
} catch(ClassNotFoundException e){
  System.out.println(&quot;클래스명의 클래스가 존재 X&quot;)
} catch(Exception e){
  e.printStackTrace();
}
}    // end of init()-------------------</code></pre>
</li>
</ul>
<h3 id="doget--dopost">doGet / doPost</h3>
<pre><code class="language-java">// === 웹브라우저 주소창입력 === //
String uri = request.getRequestURI();
String key = uri.substring(request.getContextPath().length());
AbstractController action = (AbstractController) cmdMap.get(key);
if(action == null){
    System.out.println(&quot;&gt;&gt;&gt; &quot; + key + &quot; 은 URI 패턴에 매핑된 클래스는 없습니다. &lt;&lt;&lt;&quot;);
}
else{
    try{
        action.execute(request, response);

        // === 나만의 loot 지정 === //
        boolean bool = action.isRedirect();
           String viewPage = action.getViewPage();

        if(!bool){    // =&gt; forward
            // 특징 : forward 되어진 페이지로 데이터 전달 가능
            if(viewPage != null){
                RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
                dispatcher.forward(request,response);
            }
        }
        else{    // sendRedirect
            // 특징 : 단순 페이지 이동, 데이터 전달 X
            if(viewPage != null){
                response.sendRedirect(viewPage);
            }
        }    // end of if~else------------------
    } catch(Exception e){
        e.printStackTrace();
    }
}</code></pre>
<h3 id="xml">xml</h3>
<ul>
<li>ctxPath 뒤에 아무것도 존재하지 않을때 첫페이지로 보이게 하기<pre><code class="language-xml">&lt;welcome-file&gt;~~&lt;/welcome-file&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="정리">정리</h3>
<ul>
<li>common.controller -&gt; FrontController.java</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Shop [ Setting ]]]></title>
            <link>https://velog.io/@jjoung-2j/Shop-Setting</link>
            <guid>https://velog.io/@jjoung-2j/Shop-Setting</guid>
            <pubDate>Sat, 27 Apr 2024 11:54:55 GMT</pubDate>
            <description><![CDATA[<h3 id="mydbcp-setting">MYDBCP Setting</h3>
<ul>
<li><p>was 폴더 -&gt; conf -&gt; context.xml</p>
<pre><code class="language-text">&lt;!-- ======= MyDBCP Setting Start ======= --&gt;
&lt;Resource name=&quot;jdbc/myoracle&quot; auth=&quot;Container&quot;
        type=&quot;javax.sql.DataSource&quot; driverClassName=&quot;oracle.jdbc.OracleDriver&quot;
        url=&quot;jdbc:oracle:thin:@127.0.0.1:1521:xe&quot;
        username=&quot;@@user&quot; password=&quot;@@&quot; maxTotal=&quot;20&quot; maxIdle=&quot;20&quot;
        maxWaitMillis=&quot;10000&quot;/&gt;
&lt;!-- ======= MyDBCP Setting End ======= --&gt;</code></pre>
</li>
<li><p>xml</p>
<pre><code class="language-xml">&lt;!-- ========= MyDBCP Setting Start  ===========  --&gt;
&lt;resource-ref&gt;
   &lt;description&gt;Oracle Datasource example&lt;/description&gt;
   &lt;res-ref-name&gt;jdbc/myoracle&lt;/res-ref-name&gt;
   &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
   &lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;
&lt;!-- ========= MyDBCP Setting End  ===========  --&gt;</code></pre>
</li>
</ul>
<hr>
<h3 id="library">Library</h3>
<ul>
<li><p>ojdbc8.jar</p>
</li>
<li><p>Tomcat 10</p>
</li>
<li><blockquote>
<p>jakarta.servlet.jsp.jstl-2.0.0.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>jakarta.servlet.jsp.jstl-api-2.0.0.jar</p>
</blockquote>
</li>
<li><p>Tomcat 9
다운 : <a href="https://tomcat.apache.org/download-taglibs.cgi">https://tomcat.apache.org/download-taglibs.cgi</a></p>
</li>
<li><blockquote>
<p>taglib-standard-impl-1.2.5.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>taglib-standard-jstlel-1.2.5.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>taglib-standard-spec-1.2.5.jar</p>
</blockquote>
</li>
<li><p>AES256 ( 암호화 - 복호화 )
다운 : <a href="https://mvnrepository.com/artifact/commons-codec/commons-codec">https://mvnrepository.com/artifact/commons-codec/commons-codec</a></p>
</li>
</ul>
<p>1.15 -&gt; jar 다운
-&gt; commons-codec-1.15.jar</p>
<ul>
<li>JSON
다운 : <a href="https://mvnrepository.com">https://mvnrepository.com</a> -&gt; json 검색
json in java -&gt; 20231013 - bundle 다운
json.simple -&gt; 1.1.1 - bundle 다운</li>
<li><blockquote>
<p>json-20231013.jar</p>
</blockquote>
</li>
<li><blockquote>
<p>json-simple-1.1.1.jar</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="bootstrap">Bootstrap</h3>
<ul>
<li>webapp 에 다운받은 폴더 넣기</li>
<li><blockquote>
<p>bootstrap-4.6.2-dist</p>
</blockquote>
</li>
</ul>
<h3 id="jquery">jQuery</h3>
<ul>
<li>webapp -&gt; js -&gt; 압축한 min 파일 넣기</li>
<li><blockquote>
<p>jquery-3.7.1.min.js</p>
</blockquote>
</li>
</ul>
<h3 id="jquery-ui">jQuery UI</h3>
<ul>
<li>webapp -&gt; js 에 다운받은 폴더 넣기</li>
<li><blockquote>
<p>jquery-ui-1.13.1.custom</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="filter">Filter</h3>
<ul>
<li><p>Encoding 방법</p>
<pre><code class="language-java">@WebFilter(&quot;/*&quot;)
public class 클래스명 extends HttpFilter implements Filter{
  ...
}</code></pre>
</li>
<li><p>xml 선언 방법</p>
</li>
<li><blockquote>
<p>xml</p>
</blockquote>
<pre><code class="language-xml">&lt;filter&gt;
   &lt;display-name&gt;filter&lt;/display-name&gt;
   &lt;filter-name&gt;filter&lt;/filter-name&gt;
   &lt;filter-class&gt;filter&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
   &lt;filter-name&gt;filter&lt;/filter-name&gt;
   &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</code></pre>
</li>
</ul>
<p>-&gt; Java Resources -&gt; class</p>
<pre><code class="language-java">public class 클래스명 extends HttpFilter implements Filter{
    ...
    // Tomcat9의 경우 한글 깨지지 않게하기
    request.setCharacterEncoding(&quot;UTF-8&quot;);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[JSP [ DB 데이터 읽어오기 ]]]></title>
            <link>https://velog.io/@jjoung-2j/JSP-DB-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@jjoung-2j/JSP-DB-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Sat, 27 Apr 2024 09:37:26 GMT</pubDate>
            <description><![CDATA[<h3 id="db-데이터-읽어오기">DB 데이터 읽어오기</h3>
<ul>
<li><p>DAO</p>
<pre><code class="language-java">List&lt;PersonDTO_02&gt; selectAll() thorows SQLException;</code></pre>
</li>
<li><p>SQL문</p>
<pre><code class="language-sql">select seq, name, school, color, food
   , to_char(registerday, &#39;yyyy-mm-dd hh24:mi:ss&#39;) AS registerday
   , to_char(updateday, &#39;yyyy-mm-dd hh24:mi:ss&#39;) AS updateday
from tbl_person_interest
order by seq;</code></pre>
</li>
<li><p>DAO_imple</p>
<pre><code class="language-java">@Override
public List&lt;PersonDTO_02&gt; selectAll() throws SQLException {

  List&lt;PersonDTO_02&gt; personList = new ArrayList&lt;&gt;();

  try {

      String sql = &quot; select seq, name, school, color, food &quot;
          + &quot; , to_char(registerday, &#39;yyyy-mm-dd hh24:mi:ss&#39;) &quot;
          +&quot; AS registerday &quot;
          + &quot; , nvl(to_char(updateday, &#39;yyyy-mm-dd hh24:mi:ss&#39;) &quot;
          + &quot;,&#39; &#39;) AS updateday &quot;
          + &quot; from tbl_person_interest &quot;
          + &quot; order by seq &quot;;

      pstmt = conn.prepareStatement(sql);

      rs = pstmt.executeQuery();

      while(rs.next()) {

          PersonDTO_02 psdto = new PersonDTO_02();

          // 컬럼 name 대소문자 구분 x
          psdto.setSeq(rs.getInt(&quot;SEQ&quot;));
          psdto.setName(rs.getString(&quot;NAME&quot;));
          psdto.setSchool(rs.getString(&quot;school&quot;));
          psdto.setColor(rs.getString(&quot;COLOR&quot;));

          String foodes = rs.getString(&quot;FOOD&quot;);
          if(foodes != null) {
              psdto.setFood(foodes.split(&quot;\\,&quot;));
          }
          else {
              psdto.setFood(null);
          }

          psdto.setRegisterday(rs.getString(&quot;REGISTERDAY&quot;));

          psdto.setUpdateday(rs.getString(&quot;UPDATEDAY&quot;));

          personList.add(psdto);

      }    // end of while(rs.next())---------    
  }finally {
      close();
  }
  return personList;
}    // end of public List&lt;PersonDTO_02&gt; selectAll() ------------</code></pre>
</li>
<li><p>Controller</p>
<pre><code class="language-java">DAO클래스명 dao = new DAO_imple 클래스명();
</code></pre>
</li>
</ul>
<p>// === doGet method 내 === //
String pathname = &quot;&quot;;</p>
<p>try {</p>
<pre><code>List&lt;DTO 클래스명&gt; 변수명 = dao.selectAll();
request.setAttribute(&quot;변수명에대한 key값&quot;, 변수명);

pathname = &quot;/WEB-INF/~~.jsp&quot;;</code></pre><p>}catch(SQLException e) {
    pathname = &quot;/WEB-INF/<del>.jsp&quot;;
}    // end of try</del>catch-------------</p>
<p>RequestDispatcher dispatcher 
                    = request.getRequestDispatcher(pathname);</p>
<p>dispatcher.forward(request, response);</p>
<pre><code>---

### URL 페이지 이동
- 자바에서 URL 이동
response sendRedirect(&quot;~~~&quot;);
```java
response.sendRedirect(request.getContextPath() + &quot;/~~&quot;);
// request.getContextPath() : 컨텍스트 패스명</code></pre><ul>
<li>자바스크립트에서 URL 이동
location.href = &quot;이동하고자하는 url주소&quot;;<pre><code class="language-js">location.href = `~~.do?seq=${seq}`;
// &#39;/&#39; 가 없는 주소로 작성해야 한다.</code></pre>
</li>
</ul>
<hr>
<h3 id="정리">정리</h3>
<ul>
<li><p>JSPServletBegin -&gt; chap05.oracle.domain</p>
</li>
<li><blockquote>
<p>PersonDTO_02.java</p>
</blockquote>
</li>
<li><p>JSPServletBegin -&gt; chap05.oracle.model</p>
</li>
<li><blockquote>
<p>PersonDAO_03.java, PersonDAO_imple_04.java</p>
</blockquote>
</li>
<li><p>JSPServletBegin -&gt; chap05.oracle.controller</p>
</li>
<li><blockquote>
<p>PersonSelect_06.java, PersonDetail_07.java</p>
</blockquote>
</li>
<li><p>JSPServletBegin -&gt; webapp -&gt; WEB-INF -&gt; chap05</p>
</li>
<li><blockquote>
<p>SQL -&gt; chap05_oracle.sql</p>
</blockquote>
</li>
<li><p>JSPServletBegin -&gt; webapp -&gt; chap05 -&gt; js</p>
</li>
<li><blockquote>
<p>personSelectAll.js</p>
</blockquote>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>