<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>nick_wild.log</title>
        <link>https://velog.io/</link>
        <description>우당탕탕 지금은 개발중</description>
        <lastBuildDate>Thu, 29 Dec 2022 13:59:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>nick_wild.log</title>
            <url>https://velog.velcdn.com/images/nick_wild/profile/bc132362-9477-4a7f-a832-52d71a7f4327/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. nick_wild.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/nick_wild" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[12월 29일 Day44]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-29%EC%9D%BC-Day44</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-29%EC%9D%BC-Day44</guid>
            <pubDate>Thu, 29 Dec 2022 13:59:44 GMT</pubDate>
            <description><![CDATA[<h2 id="spring-용어-정리">Spring 용어 정리</h2>
<p>Spring수업이 들어간후 Controller, Service, Repository 스프링 빈들을 통해 CRUD를 실행하는 연습을 해왔다. 하지만 아직 몇몇 용어가 깔끔하게 머리속에 정리가 안된듯하여 정리를 하려고 한다. </p>
<ol>
<li><p>HttpServletRequest
클라이언트가 서버로 요청을 보내면, 서버에서 HttpServletRequest를 생성하여 정보를 담아서 매핑된 서블릿으로 전달을 하게 된다.</p>
</li>
<li><p>DispatcherServlet
Http 프로토콜을 통해 들어오는 모든 요청을 가장 먼저 받아서 적합한 컨트롤러를 찾아서 위임해주는 프론트 컨트롤러이다. 디스패처 서블릿은 가장 먼저 요청을 받는 프론트 컨트롤러이다. 서블릿 컨텍스트(웹 컨텍스트)에서 필터들을 지나 스프링 컨텍스트에서 디스패처 서블릿이 가장 먼저 요청을 받게된다. </p>
</li>
<li><p>스프링빈
원래 기본 자바수업에서는 객체를 생성할때 new를 이용하여 객체를 생성하였는데, spring에서 사용하는 객체중 스프링이 생성하고 제어하는 객체들을 스프링빈이라고 한다. 이제 사람이 직접 제어하기보단, 스프링빈으로 등록하겠다고 명시하여 설정한다면 스프링이 이를 인식하고 빈으로 등록하고 우리는 그에 맞는 로직을 더 간결하고 가시성 좋게 사용할수있다. </p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월 27일 Day43]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-27%EC%9D%BC-Day43</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-27%EC%9D%BC-Day43</guid>
            <pubDate>Tue, 27 Dec 2022 14:37:46 GMT</pubDate>
            <description><![CDATA[<h1 id="spring-개념-이해하기">Spring 개념 이해하기</h1>
<p>어제에 이어 Spring 운영 개념 수업을 진행 하게 되었다.
오늘은 그중에서 Controller 와 관련된 내용들을 위주로 공부가 진행 되었다.</p>
<h4 id="controller">Controller</h4>
<ol>
<li>controller 란?</li>
</ol>
<p>스프링에서는 사용자가 보는 화면 (jsp페이지들)과 기능구현페이지(java 페이지들)이 따로 존재하게 되는데 jsp페이지에서는 이미 구현된 자바 메서드들 값을 표현하는 방식이고 java는 메서드를 실행하는 공간이다. 이둘을 이어서 자바페이지에서 얻은 값이나 내용을 jsp 페이지에서 출력해주기 위해 연결을 도와주는것이 Controller이다.</p>
<ol start="2">
<li><p>controller 생성방법
어노테이션을 이용하여 controller를 생성합니다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/425e8ffa-a791-459c-a192-bb12ca6a9300/image.png" alt="">
컨트롤러로 만들 클래스의 위에 @Controller 라고 적어주고 ctrl + space 를 하게 되면 자동으로 import가 되며 controller 어노테이션 적용되면 자동으로 bean이 등록되어 사용이 가능해진다.</p>
</li>
<li><p>RequestMapping 
controller어노테이션을 만들게되면 요청 URL에 해당하는 메소드를 매핑해줄수있는 RequestMapping 어노테이션을 생성합니다. (
<img src="https://velog.velcdn.com/images/nick_wild/post/76066396-011c-4a7d-a235-883e90ac70fa/image.png" alt="">
요청의 방식에 따라 메서드의 오버로딩이 성립이 되며 반환형이 없는 경우 요청을 실행한 url이 되고, 반환형이 있는경우 해당 이름을 가진 jsp페이지가 된다. </p>
</li>
</ol>
<p>RequestMapping은 value=&quot;요청주소&quot; , method=RequestMethod.(GET or POST)형식으로 사용이 된다</p>
<ol start="4">
<li>RequestMapping의 간단한 버전
<img src="https://velog.velcdn.com/images/nick_wild/post/0647ad31-cef4-4df4-b7c6-38982c0bdf2d/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/273b10b3-266e-4fee-8e75-df5047acf49a/image.png" alt=""></p>
<p>@GetMapping 과 @PostMapping을 각각 import 해주고 해당 method에 따라 실행할 메서드들도 만들어준다.</p>
<p>Model은 HttpServletRequest의 가벼운 버전의 객체로 request를 대신해 attribute에 값을 전달을 해준다.</p>
<ol start="5">
<li>ModelAndView
Model에서 기능이 추가된것이 ModelAndView이다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/a93a674c-2575-48f3-add2-b7e60b9f0a63/image.png" alt=""></li>
</ol>
<p>ModelAndView는 객체 생성시 매개 변수로 viewName을 지정할수 있고, 아니면 setViewName()으로도 지정할수 있다. 지정된 viewName의 jsp 페이지로 포워드 된다. 그리고 jsp에 넘길 attribute는 오브젝트 타입으로 addObject() 메서드를 통하여 추가해준다.</p>
<ul>
<li>커맨드 객체 
Mapping 어노테이션으로 으로 매개 변수를 받게 되는곳의 매개변수가 많아진다면 해당 자리는 많은 값들을 @RequestParam 어노테이션이라던가 request.getParameter()등으로 코드 가독성도 떨어지고 길이가 무척 길어질것이다 이를 해결하기 위해 등장한것이 바로 커맨드 객체이다.커맨드 객체(Command Object) 란 HttpServletRequest 를 통해 들어온 요청 파라미터들을 setter 메서드를 이용하여 객체에 정의되어있는 속성에 바인딩이 되는 객체를 의미한다.
이전 JSP에서 많이 사용했던 DTO라고 생각하면 된다.  그러므로 클래스를 따로 설정하여 자바빈즈 규칙에 맞게 private 맴버필드, getter와 setter 그리고 기본생성자를 생성해주어야 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/d98ad514-802c-4c42-81f6-6a7fb97522fb/image.png" alt=""></p>
<p>다른 패키지에서 클래스를 생성
<img src="https://velog.velcdn.com/images/nick_wild/post/25873f7b-5b8d-4d42-bb9f-f177c3c7e0d9/image.png" alt=""></p>
<ol start="6">
<li>HashMap 타입
컨트롤러의 mapping시 넘어오는 매개변수들을 HashMap 타입으로 key 와 value값으로 지정하여 전달 받아서 처리하는 타입이다.
<img src="https://velog.velcdn.com/images/nick_wild/post/e8258c9c-386b-4645-b8e8-b5bcbf4a9e66/image.png" alt=""></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월26일 Day 42]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%9426%EC%9D%BC-Day-42</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%9426%EC%9D%BC-Day-42</guid>
            <pubDate>Mon, 26 Dec 2022 13:59:56 GMT</pubDate>
            <description><![CDATA[<p>지난 한주간은 미니 프로젝트 기간으로 미니 프로젝트만 진행을 하고 마지막 금요일은 데이터 베이스 시험을 치루게 되어 복습정리가 없었습니다.</p>
<p>미니 프로젝트는 조만간 직접 구현한 기능들 (그동안 배운 jsp 와 Oralce 데이터베이스기반)을 소개 할 수 있는 게시글도 올려 보려고 합니다. </p>
<p>12월26일 크리스마스가 지난 오늘 부터느 Spring 수업이 시작 되었습니다. </p>
<h2 id="spring-설치">Spring 설치</h2>
<p>먼저 Spring 설치입니다.</p>
<ol>
<li><p>jsp와 구동 방식이 다르다보니 새로운 이클립스를 설치하고 workspace 경로도 맞추어서 잡아줍니다.</p>
</li>
<li><p>신규 이클립스 설치후 window-preferences로 들어가서 workspace, css,html, jsp를 모두 UTF-8 로 설정을 바꿔주고, 톰캣 경로도 잡아줍니다. (server-runtimeEnvirenment로 가서 add하여서 톰캣이 설치된 폴더를 선택해줍니다. %CATALINA_HOME% 경로가 잘 설정되어 있다면 디렉토리에 이렇게 쳐주면 바로 해당 위치로 이동이됩니다</p>
</li>
<li><p>설정이 끝나면 help에서 eclipse-marketPlace로 이동하여서 sts3를 검색해줍니다.
Spring Tools 3 for Standalone 다운받기를 하고 기다리면 confirm과 설치를 계속할건지 물어보는 경고창이 뜨게되면 수락하고 설치를 진행 합니다. 다 다운이 되면 재시작 버튼이 나오게 되고 바로 재시작을 해줍니다.</p>
</li>
</ol>
<p>이렇게 하면 Spring 설치는 완료 됩니다.</p>
<p>Spring의 경우 이전 jsp와 다르게 모든 시작 단위는 각각의 jsp 파일이 아닌 프로젝트 단위로 실행이 됩니다. 즉 이전에는 home.jsp 에서 바로 ctrl+F11로 실행이 되었다면. spring에서는 jsp 파일이 들어있는 web-inf폴더를 사용자가 직접 접근이 안됩니다. 그러므로 프로젝트 자체를 실행시켜주면 됩니다.</p>
<h2 id="프로젝트-만들기">프로젝트 만들기</h2>
<p>ctrl + n 을 눌러 legacy를 검색하면 Spring legacy 프로젝트가 나옵니다.</p>
<p>맨위에 사용할 프로젝트 이름을 설정하고 템플릿 선택에서 MVC를 선택하고 next를 눌러줍니다. 그러면 TOP level package를 입렵하도록 나옵니다. 형태는 com.****.*** 이런식으로 설정합니다.</p>
<p>그러면 finish를 눌러 줍니다.</p>
<p>생성된 프로젝트에 보이는 pom.xml을 먼저 설정해줍니다.  맨위에 java -version이 나오는데 이곳을 사용중인 버전으로 바꾸어줍니다. 그리고 springframework-version도 4.3.30으로 설정해줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/2e7eea37-68ce-4f47-9772-f1e96686610e/image.png" alt=""></p>
<p>그리고 프로젝트 익스플로러에서 com.****.*** 으로 작성한한 패키지를 선택하면 HomeController라는 자바 클래스가 나옵니다. 이 자바 클래스는 프로젝트 실행시 해당 컨트롤러에서 클라이언트에서 받은 요청을 web.xml에서 특정작업을 처리하도록 선언된 부분이 있다면 해당 내용을 먼저 처리한다, 그리고 servlet-context에서 해당하는 controller로 이어주는 작업을 진행되면, HomeController로 넘어와서 mapping 작업을 통하여 해당 메서드를 실행하고 반환값을 반환받아서, 다시 왔던 루트인 servlet-context -&gt; web.xml - 해당jsp 페이지( 기본 homeController는 home.jsp페이지로) 로 가게 되며 반환값이 출력됩니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/d44bed45-b15a-4c3f-a3cf-01fd022f7850/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월15일 Day 41]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%9415%EC%9D%BC-Day-41</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%9415%EC%9D%BC-Day-41</guid>
            <pubDate>Thu, 15 Dec 2022 14:20:05 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp-파일-업로드">JSP 파일 업로드</h2>
<hr>

<ol>
    <li>form에서 method를 지정하지 않으면 기본값은 get</li>
    <li>GET에서는 입력값을 쿼리스트링 형태로 전달한다(ex01-action.jsp?name=이지은&age=30)</li>
    <li>파일은 문자열로 표현할 수 없으므로, GET이 아닌 POST를 사용해야 한다.</li>
    <li>POST로 전송하면, 쿼리스트링 대신 form-data를 별도의 영역으로 전송한다.</li>
    <li>이때에도, 전달하는 주 내용은 글자이고, 데이터를 묶는 방식은 x-www-form-urlencoded 이다</li>
    <li>파일을 전송하기 위해서는 데이터 묶음 방식을 multilpart/form-data() 로 변경하여 전송한다</li>
    <li>다른 input 요소와 달리 type="file" 이면 value를 지정할수 없다(보안상의 문제로 절대로 지정할수 없다)</li>
</ol>

<p><img src="https://velog.velcdn.com/images/nick_wild/post/0694ceb9-bdc7-49ea-a42b-ea707196f692/image.png" alt=""></p>
<h2 id="전송받은-파일을-처리하기">전송받은 파일을 처리하기</h2>
<hr>
<ol>
    <li>JSP에서 파일을 전달받으면, 일반 parameter로 처리할 수 없다 (반환형이 String)</li>
    <li>JSP 내장객체 request에서는 파일을 처리하는 함수가 준비되어 있지 않다</li>
    <li>파일 처리를 위한 별도의 라이브러리를 가져와서 처리한다 (com.oreilly.servlet)</li>
  <li>내장객체 request로는 파일을 처리할 수 없어서, MultipartRequest 타입의 객체로 변환한다
생성자 매개변수에 기존 request를 전달해야 한다
    </li>
</ol>

<p><img src="https://velog.velcdn.com/images/nick_wild/post/27025cbd-499c-41df-a1e1-457268f92c8d/image.png" alt=""></p>
<h2 id="이미지-파일-업로드">이미지 파일 업로드</h2>
<fieldset>
    <legend>파일 업로드에 사용하는 ContentType</legend>
    <ul>
        <li>text/plain : 단순 텍스트 파일 (*.txt, *.text)</li>
        <li>image/jpeg, image/gif, image/* : 이미지 파일</li>
        <li>text/html : 텍스트 기반 html 파일 (*.html)</li>
        <li>application/zip : zip 형식 압축파일 (*.zip)</li>
        <li>video/mp4 : mp4 방식의 동영상 파일</li>
    </ul>
</fieldset>

<p><img src="https://velog.velcdn.com/images/nick_wild/post/4afcfd22-aca9-4ec3-a378-f103fbfce5a7/image.png" alt=""></p>
<p>action 페이지</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/9f19333f-ea61-4a9a-a6d7-a662b6c79ee5/image.png" alt="">
useBean 형식으로 만든 fileUtil을 application에 저장시킨뒤 이걸로 자바 클래스에 작성해둔 getDTO 메서드를 호출합니다 (매개 변수로  request를 전달합니다).</p>
<p> FileUtile 자바 클래스</p>
<p> <img src="https://velog.velcdn.com/images/nick_wild/post/e1de858f-e05a-4cda-93ee-b1e041bfa818/image.png" alt="">
예외는 throws 처리 하고 난뒤 multipartRequest로 전달 받은 request를 각각의 조건에 맞게 파일을 업로드 합니다. </p>
<p>업로드된 파일의 정보를 DTO에 모두 넣어서 반환합니다.</p>
<p>Ex02DTO</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/ca51cb85-617a-4af0-9b9d-d1d992b82dc2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월13일 Day 40]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%9413%EC%9D%BC-Day-40</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%9413%EC%9D%BC-Day-40</guid>
            <pubDate>Tue, 13 Dec 2022 06:17:51 GMT</pubDate>
            <description><![CDATA[<h2 id="sql-활용">SQL 활용</h2>
<h4 id="ddl-dcl-dml">DDL, DCL, DML</h4>
<p>DDL(Data Definition Language)</p>
<p>create : 데이터베이스, 테이블등을 생성
alter : 테이블을 수정
drop : 데이터베이스, 테이블을 삭제
truncate : 테이블을 초기화</p>
<p>DML(Data Manipulation Language)</p>
<p>select : 데이터 조회
insert : 데이터 삽입
update : 데이터 수정
delete : 데이터 삭제</p>
<p>DCL(Data Control Language)</p>
<p>grant : 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 부여
revoke : 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 박탈, 회수
commit : 트랜잭션의 작업을 저장
rollback : 트랜잭션의 작업을 취소, 원래대로 복구</p>
<h4 id="제약조건중-외래키">제약조건중 외래키</h4>
<ul>
<li>foreign key    : 외래키 (다른 테이블의 특정 값을 참조하는 값)
  다른 테이블의 데이터를 참조해야만 한다.
  댓글은 게시글 번호를 가지고 있어야 작성할 수 있다.
  이때 댓글에는 게시글 테이블의 글번호 컬럼을 참조해야 한다.
  게시글에 없는 번호는 작성할 수 없다.</li>
</ul>
<p>※ SQL developer에서 hr 계정을 사용하여 연습하기 (hr 계정은 oracle에서 연습용으로 주어진 더미데이터들이다)</p>
<p>-사용할 테이블 employees 와 departments 테이블이다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/62a4ab5b-c09e-4031-9852-ebda0ec3d2f2/image.png" alt=""></p>
<p>join 쿼리문을 이용하여 두개의 테이블을 참조한다. on에는 조건문이 들어가게 되며 primary key등을 비교하여 함께 불러온다.</p>
<h4 id="조건문">조건문</h4>
<p>where 문은 select와 상호 작용하며 조건을 수행하게 된다. </p>
<blockquote>
<p>예시)
<img src="https://velog.velcdn.com/images/nick_wild/post/3489991f-0dd5-445f-9e03-c2b01ff2797a/image.png" alt=""></p>
</blockquote>
<p>salary 가 10000 보다 크거나 같은 데이터만 내림차순으로 정렬되도록 하는 부분이다.</p>
<p>when 
<img src="https://velog.velcdn.com/images/nick_wild/post/eec9dcb5-6c47-4e27-8820-44650886efee/image.png" alt=""></p>
<p>경우에따라 다른 값을 가지도록 when then else를 사용하여 표시합니다.</p>
<p>where 과 when 은 조건문이므로 종속문안에 and or 등으로 이어서 작성하기가 가능하다.</p>
<h4 id="시퀀스">시퀀스</h4>
<p>oracle sequence
지정된 범위에서 일정한 값을 순서대로 하나씩 뽑아서 사용할 수 있게 하는 데이터베이스 객체
주로 primary key로 설정된 number 타입의 컬럼의 값을 자동으로 불러오기 위해 사용한다.</p>
<ul>
<li>1부터 시작하여 999999999 까지 1씩 증가하는 숫자를 자동으로 관리하는 시퀀스</li>
</ul>
<p>create seuqence member2_seq
    start with 1
    maxvalue 999999999
    increment by 1
    nocache
    nocycle;</p>
<p>for(int i = 1; i &lt;= 999999999; i ++){
...
}</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월12일 Day39]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%9412%EC%9D%BC-Day39</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%9412%EC%9D%BC-Day39</guid>
            <pubDate>Mon, 12 Dec 2022 05:49:25 GMT</pubDate>
            <description><![CDATA[<h2 id="connection-pool">Connection Pool</h2>
<p>불필요한 메모리 낭비를 없애기 위해 개발된 도구이다. 매번 객체를 생성하고 없애기보다 계속 사용되는 객체를 만들어 사용후 사용하지 않을때는 커넥션을 끊는식으로 이용하게된다.</p>
<ol>
<li>사전 설정</li>
</ol>
<p>Tomcat lib 폴더안의 dbcp.jar 파일을 web-inf lib 폴더에 넣어준다.
<img src="https://velog.velcdn.com/images/nick_wild/post/9737d9c0-0e21-433a-978e-95c619543d0b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/417ba262-2fd6-4b38-b7d4-d9fd9410f28e/image.png" alt=""></p>
<ul>
<li>context.xml 파일 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/1e79c1de-301e-40fa-8cd1-02a9969ad7b7/image.png" alt=""></li>
</ul>
<p>-web.xml 파일 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/ff2c4643-3897-45e9-bf8f-4b0f42b51b5f/image.png" alt=""></p>
<p>xml 파일은 객체를 텍스트 타입으로 표현하기 위한 파일이다.</p>
<ol start="2">
<li>singleton 만들기</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/80c6c823-84d8-4270-82fe-c4ea41d715a6/image.png" alt=""></p>
<p>기본 클래스의 객체는 생성자를 사용해서 만들지만 singleton의 경우 하나의 객체만 사용하기위해 생성자가 private 속성이나 static형식의 instance를 반환하는 함수를 사용하여 함수를 호출 할 수있다.</p>
<p>특징: </p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/38af561a-3a5c-4584-9586-00266b0a8e64/image.png" alt=""></p>
<ol start="3">
<li>연습</li>
</ol>
<p>singleton과 connectionPool이 적용된 DAO 파일 작성하기</p>
<p>사용할 클래스는 member2 테이블로 먼저 DTO를 만들어준다.
<img src="https://velog.velcdn.com/images/nick_wild/post/f01d4800-adb6-40b4-8805-a6d26e77bb5a/image.png" alt=""></p>
<p>멤버필드들의 getters 와 setters를 만들어준다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/239771c5-65d7-49a5-875c-88203985e903/image.png" alt=""></p>
<p>싱글톤 형식으로 생성자는 private로 그리고 instance를 반환하는 메서드를 만들어준다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/40469705-a594-4343-b7cd-4aeb7d342605/image.png" alt=""></p>
<p>기본생성자에서 datasource를가져올수 있게 연결준비를 해줍니다. 그리고 공통적으로 select를 이용하여 불러오는 메서드들은 공통작업으로 필요한 객체를 반환하는 mapping 함수를 작성해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/b587be0e-0869-42bd-9313-ab84d74ea834/image.png" alt=""></p>
<p>close 작업또한 공통적으로 수행되는 함수로 미리 선언해두고, 전체목록을 반환하는 selectList 함수를 선언해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/8453edc9-5919-4a8d-98f0-609699a74a74/image.png" alt=""></p>
<p>header파일에는 싱글톤으로 구현된 DAO클래스를 사용하기 위해 미리 선언해둔 getInstance함수를 통하여 불러온 instance는 dao라는 이름으로 선언해둡니다. </p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/f13e869c-58a0-4acf-a14a-5eaf02363b86/image.png" alt=""></p>
<p>리스트를 보여줄 화면에서는 선언해둔 dao를 통하여 selectList()함수를 호출하여 전체 목록을가져옵니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월 09일 Day38]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-09%EC%9D%BC-Day38</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-09%EC%9D%BC-Day38</guid>
            <pubDate>Sat, 10 Dec 2022 16:04:05 GMT</pubDate>
            <description><![CDATA[<h2 id="dto-dao-활용하여-databass에-추가하기">DTO DAO 활용하여 Databass에 추가하기</h2>
<ol>
<li>DTO 작성해주기.
<img src="https://velog.velcdn.com/images/nick_wild/post/d0da90d4-85fd-4ee0-b2df-0f26860add7b/image.png" alt="">
멤버필드로 idx, userid, userpw, username, joinDate, gender, profileImg를 설정해주고 그에 맞는 getter와 setter로 만들어줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/e43c933a-9db7-4dea-97db-5fee51409efb/image.png" alt=""></li>
</ol>
<ol start="2">
<li>멤버 추가하는 JSP페이지 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/3b6f6ce1-36e6-4091-b726-8375644f662a/image.png" alt=""></li>
</ol>
<p>form태그 형식으로 DTO 멤버필드들을 전부다 입력 받아 줍니다. useBean형식에 맞추기 위해 멤버 필드 이름을 꼭 동일하게 작성해줍니다</p>
<ol start="3">
<li>DAO 작성해주기
<img src="https://velog.velcdn.com/images/nick_wild/post/ba4b7519-2da8-418c-b635-dfcbd317334b/image.png" alt="">
DAO 객체가 생성될때 oracle jdbc driver가 불러와지며 sql연결을 준비 합니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/e7acda72-4c09-4c61-bf17-7fae09728803/image.png" alt=""></p>
<p>입력받은 값을 처리할 함수도 만들어줍니다. 반환값은 정수형으로 query문은 preparedStatement로 실행되고 성공시 1을 실패시 0을 반환합니다.</p>
<ol start="4">
<li>입력값을 받아서 처리할 action 페이지 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/c604e8d7-d1d5-4568-b6f9-7cb4e56d9ec5/image.png" alt=""></li>
</ol>
<p>사용자에게 입력 받은 값은 useBean형식으로 만들어서 DAO 객체의 insert 함수의 매개 변수로 전달합니다, 그리고 반환받은 값을  JSTL c:set으로 row라는 이름으로 등록하여
그값에 따라 출력을 성공 또는 실패로 출력을 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월 8일 day37]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-8%EC%9D%BC-day37</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-8%EC%9D%BC-day37</guid>
            <pubDate>Thu, 08 Dec 2022 13:14:35 GMT</pubDate>
            <description><![CDATA[<h2 id="dml-databass-management-language">DML (DataBass Management Language)</h2>
<ol>
<li>insert (테이블에 새로운 행을 삽입)
ex) insert into product</li>
</ol>
<ul>
<li>이클립스에서 연동하여 추가하기
<img src="https://velog.velcdn.com/images/nick_wild/post/89031350-ec39-45db-90a4-b918c21f618c/image.png" alt="">
먼저 JSP 페이지를 만들어준후 DAO에 메서드를 작성해줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/5d878afd-0880-4f92-91f0-88ea108c863f/image.png" alt="">
기본 DAO 객체를 생성하면 jdbc driver를 구동할 준비를 하며 모든 함수를 실행할때마다 공통적으로 close를 실행할 함수도 선언해줍니다. </li>
</ul>
<p>insert 함수 실행시 쿼리문은 &quot;insert into product values (?, ?, ?, ?)&quot;; 으로 pstmt의 setInt 메서드를 통하여 설정을 해줍니다. 모든 설정이 정상적으로 끝나면 1개가 정상적으로 추가되어 1이 반환되고 아닐시 0을 반환합니다
<img src="https://velog.velcdn.com/images/nick_wild/post/5acff2ee-eb9e-41e7-8756-54e8cb07a18e/image.png" alt="">
action 페이지로 넘어와 추가 성공과 실패시 출력할 문자를 설정해줍니다.</p>
<ol start="2">
<li>update 테이블에 있는 행의 내용을 갱신
ex) update product(테이블이름) set price(컬럼의 이름)=&quot;1000&quot;</li>
</ol>
<ul>
<li>이클립스에서 연동하여 갱신하기
<img src="https://velog.velcdn.com/images/nick_wild/post/d02c6346-fff9-4cff-b75a-fe1cf6aeca98/image.png" alt="">
jsp 페이지에서 수정할 제품의 idx를 입력 받습니다.
그리고 파라미터러를 기반으로 해당 객체를 반환하는 메서드를 작성해줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/e11eaca6-b402-4cb5-9840-78c8419a86f8/image.png" alt="">
해당 내용을 토대로 객체의 정보를 불러와 보여주고 최종적으로 수정되면  submit 되어 action 페이지로 넘어갑니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/1478c1de-45b5-49df-8922-0a53aaebe71c/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/441e2dbc-c807-4e27-af96-2c3a116a9f07/image.png" alt="">
dao클래스에 객체정보를 수정하는 메서드를 작성해주고 이 메서드도 성공시 1개가 성공되면 1을 아닐시 0 을 반환합니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/59dcb534-0634-47e3-80cd-e9cce42b28fe/image.png" alt="">
최종적으로 수정성고과 실패를 출력할 action 페이지를 작성해줍니다.</p>
<ol start="3">
<li>Delete 테이블의 행을 삭제한다.
ex) delete from product where idx=&quot;1&quot;;</li>
</ol>
<p>-이클립스에서 연동하여 삭제하기
<img src="https://velog.velcdn.com/images/nick_wild/post/c360f75a-757d-4e53-9945-9711fbcf498f/image.png" alt="">
삭제할 제품의 idx를 입력받을 form 페이지를 작성해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/342d8ad3-e8a2-48df-b86b-e5741facb075/image.png" alt="">
DAO 클래스에 삭제에 사용될 메서드를 작성해줍니다. 
쿼리문은 String sql = &quot;delete from product where idx=&quot; + idx; 이렇게 됩니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/dc95e705-74e5-4243-a404-e2a7eda7b291/image.png" alt="">
 삭제 성공과 실패를 출력할 화면을 만들어줍니다.</p>
<h2 id="jstljsp-standard-tag-library">JSTL(JSP Standard Tag Library)</h2>
<p>JSP에서 임의의 태그를 작성하여 사용할 수 있는데, 많이 사용되는 태그를 모아서 표준으로 지정한 모음이다</p>
<ul>
    <li>core (c) : 가장 많이 사용되는 선언, 제거, if, for, redirect 등을 태그로 사용할 수 있음</li>
    <li>function (fn) : 배열의 길이, 문자열의 길이, substring 등의 편의 기능을 모아놓은 태그</li>
    <li>format (fmt) : 숫자 및 날짜, 시간 등의 서식을 처리하는 태그</li>
    <li>sql : 자바 코드를 사용하지 않고, sql를 처리할 수 있는 태그</li>
</ul>


]]></description>
        </item>
        <item>
            <title><![CDATA[12월06일 Day36]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%9406%EC%9D%BC-Day36</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%9406%EC%9D%BC-Day36</guid>
            <pubDate>Tue, 06 Dec 2022 14:15:07 GMT</pubDate>
            <description><![CDATA[<h2 id="database-연결하여-jsp에서-출력하기">DataBase 연결하여 JSP에서 출력하기</h2>
<ol>
<li>Sqldeveloper에 데이터 table 만들어주기.</li>
</ol>
<p>쿼리문을 이용하여 데이터 테이블을 만들어준다.</p>
<blockquote>
<p>create table student1 (
    name        varchar2(100),
    kor            number,
    eng            number,
    mat            number
);
insert into student1 values(
    &#39;조규성&#39;, 78, 87, 95
);
insert into student1 values(
    &#39;손흥민&#39;, 99, 97, 98
);
insert into student1 values(
    &#39;김진수&#39;, 86, 79, 89
);
commit;</p>
</blockquote>
<ol start="2">
<li><p>JSP 파일에서 보여주기
<img src="https://velog.velcdn.com/images/nick_wild/post/8eb6db04-5906-429a-b39d-4f4f66d32933/image.png" alt="">
출력을위한 함수들까지 전부 스클립틀릿에 적어서 사용하고 있다. 데이터베이스에서 저장된 데이터를 자바 객체로 표현하는 클래스를 잘 구성해둔다면 출력하는 화면에서는 간단한 출력문 만으로도 표현이 가능해진다.</p>
</li>
<li><p>자바 클래스를 이용하여 출력하기 - 1
<img src="https://velog.velcdn.com/images/nick_wild/post/5ce9a17e-50f8-451d-ad88-edfb75635400/image.png" alt="">
객체의 속성을 표시한 클래스를 작성해줍니다. 자바빈즈 규칙에 따라 기본생성자도 필요하지만, 기본생성자는 다른 매개 변수를 받는 생성자가 없으면 따로 선언 안해줘도 존재하기에 선언할 필요가 없다.</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/5a313eb3-66ad-4607-875d-675f12e35757/image.png" alt="">
데이터에 접근할때 사용하는 클래스로 DTO 객체를 만들어준다. 이 DTO 객체에서는 맴버필드로 질의어와 url 그리고 user id 그리고 password등을 갖고 있으며 기본생성자 생성시 멤버필드에 선언된 변수들을 이용하여 oracle jdbc driver를 구성하여 데이터 베이스에 연결을 한다. 데이터 베이스 연결시 여러 예외가 발생가능하므로 try catch로 예외처리를 해주어야 한다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/87636da6-5408-43dc-a261-7450fb32ce77/image.png" alt=""></p>
<p>기본생성자가 만들어졌으면, 이제 데이터베이스에서 필요한 정보만 가져와서 반환할 함수들을 정의 해주면 됩니다. 
selectList() 메서드는 해당 데이터 테이블에 있는 정보를 객체들을 반환하는 함수로 sql에는 sqldeveloper에서 사용할 쿼리문을 작성해주고 실행이 되면 while문을 통해 다음 내용이 없을때까지 반복하며 ob객채에 받아서 리스트에 저장해주고 저장받은 리스트를 반환해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/017e1a52-2f06-4021-90e2-1495a7b34a06/image.png" alt="">
이제 JSP 페이지에서 불러오기만 하면되므로 page부분에서 해당 클래스(Student1)과 ArrayList를 임포트해준후 스크립틀릿을 열어 StudentDAO 클래스를 호출한 객체를 생성하여 만들어둔 메서드 selectList()메서드를 호출하고 이를 출력해주면 됩니다.</p>
<ol start="4">
<li>자바 클래스를 이용하여 출력하기 - 2
기존에 DAO 클래스와 DTO 클래스가 잘 만들어져 있다면 EL 태그와 JSTL 태그를 이용하여 더 간결한 방법으로 출력이 가능하다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/e3d1bab2-66ec-4ce8-be11-997ee31b7423/image.png" alt=""></p>
<p>DAO 클래스또한 jsp:useBean 을 통해 객체 생성이 가능하다. JSTL을 이용하여 &lt;c:forEach&gt;를 이용하여 forEach 구문처럼 dao클래스스의 selectList()함수를 호출하여 받아온 리스트의 내용을 EL 태그로 출력을 해주면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월 5일 Day36]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-5%EC%9D%BC-Day36</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-5%EC%9D%BC-Day36</guid>
            <pubDate>Mon, 05 Dec 2022 13:34:32 GMT</pubDate>
            <description><![CDATA[<h2 id="session">Session</h2>
<ol>
<li>session 이란?</li>
</ol>
<ul>
<li>클라이언트 마다 서로 다른 정보를 저장할 수 있는 서버 저장소</li>
<li>서버에 접속한 클라이언트의 수 만큼 세션을 생성해야 할 수도 있다</li>
<li>세션에 유효시간을 설정하여 일정 시간 이후 자동으로 로그아웃을 구현할 수 있다</li>
<li>서버에는 다수의 세션이 있어서, 이를 구분하기 위한 id가 있다</li>
</ul>
<h2 id="session-쿠키를-활용한-자동로그인-구현">session 쿠키를 활용한 자동로그인 구현</h2>
<ol>
<li>자바 리소스에 Member 클래스및 Handler 클래스 생성</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/0c9b9eee-c9e8-4399-9c16-3837c4db6876/image.png" alt="">
자바빈즈 규칙으로 멤버필드와 기본생성자 그리고 게터 세터즈를 생성해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/82ee7819-1473-49f4-a32b-54269013ec40/image.png" alt="">
 handler에서는 먼저 객체를저장할 배열과 해당객체를 찾아서 반환하는 로그인 함수를 구현해줍니다.</p>
<ol start="2">
<li>login-form 작성</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/b5d01a47-9be2-46b7-8257-4137535f23c9/image.png" alt=""></p>
<p>로그인 페이지에서는 아이디 및 비밀번호를 입력 받아서 action form으로 넘겨줍니다.</p>
<ol start="3">
<li>action페이지 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/477e444c-0ac9-4062-8271-7115b0441693/image.png" alt="">
먼저 핸들러를 사용하기위해 application에 저장된 handler 객체를 불러옵니다. 한번도 등록된적이 없는 처음이라면 handler 객체를 저장하고 application에 저장해줍니다.
그리고</li>
</ol>
<p>form에서 넘어온 데이터를 바탕으로 useBean을 이용하여 Member타입의 객체를 생성해줍니다.
생성된 객체는 handler의 login 함수의 매개 변수로 전달되어 일치하는 객체가 존재한다면 해당 객체를 반환하고, 없다면 null을 반환합니다. 그리하여 함수 결과가 null이면 다시 로그인 페이지로 리다이렉트 시켜주고 아니라면 session에 해당객체를 login이라는 이름으로 등록해줍니다. 만약 자동 로그인이 체크된 체로 넘어왔다면 쿠키에 현재 session id를 JSESSION이라는 이름으로 저장해주고 유효시간은 하루로 설정해주고 main 페이지로 리다이렉트 시켜 줍니다.</p>
<ol start="4">
<li>main 페이지 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/77c7f7af-b3b3-4edd-a3f2-ac0e5ee817bb/image.png" alt=""></li>
</ol>
<p>먼저 스크립틀릿에서는 로그인페이지를 통하지 않고 바로 main으로 넘어왔을 경우를 대비하여 login 정보가 없다면 로그인페이지로 리다이렉트 시켜주도록 하고 login 정보가 존재 한다면 현재 로그인 객체의 이름을 보여줍니다.</p>
<ol start="5">
<li><p>logout 페이지 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/a85570ad-bc3a-40d9-9f2a-d708db9d5aed/image.png" alt="">
로그아웃을 할때는 해당 session을 무효화 시키는 invalidate() 함수를 실행하고 로그인 페이지로 리다이렉트 시켜 줍니다. </p>
</li>
<li><p>자동 로그인 설정
<img src="https://velog.velcdn.com/images/nick_wild/post/e868880d-d8b8-472a-a371-8618846c0bb4/image.png" alt="">
저장된 쿠키들중 JSESSION 이라는 이름으로 저장된 쿠키가 있다면 해당 쿠키에 저장된 session값을 불러와줍니다. getSession(cookie 안의 getValue()함수를 통해 그 값을 가져와서 ) session에 저장해줍니다.</p>
</li>
</ol>
<p>HttpSession new Session = request.getSession();은 현재 요청과 연관된 session이 있다면 해당 세션을 반환하고 없다면 새로운 session을 생성해줍니다.</p>
<p>그리고 세션쿠키가 존재한다면 (!=null) 로그인페이지로 접속을 하여도 main 페이지로 리다이렉트 시켜줍니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월2일 Day35]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%942%EC%9D%BC-Day35</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%942%EC%9D%BC-Day35</guid>
            <pubDate>Sat, 03 Dec 2022 16:32:49 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp-속-cookie">JSP 속 Cookie</h2>
<ul> 쿠키의 속성 및 개념
    <li>HTTP는 한 번의 request와 한번의 response 이후 접속이 끊어지는 형태의 통신이다</li>
    <li>따라서, 지속적인 통신이 아니므로, 데이터를 유지할 방법이 필요하다.</li>
    <li>특정 데이터를 Server에 저장하려면 session을 이용한다.</li>
    <li>특정 데이터를 Client에 저장하려면 cookie을 이용한다.</li>
    <li>cookie는 특정 데이터를 클라이언트에 저장하는 형식이며, 문자열 기반의 데이터를 저장한다.</li>
    <li>JSP에서는 Cookie 클래스를 이용하여 객체를 생성한다. new Cookie(String name, String value)</li>
    <li>서버에서 Cookie를 생성했다면, 클라이언트에게 보내기 위해 response를 이용한다.</li>
    <li>클라이언트가 보관하고있는 쿠키는, 특정 주소로 요청할 때, 요청에 포함하여 서버에게 보낸다.</li>
    <li>서버는 클라이언트가 보낸 요청에 쿠키를 꺼내서 분석하고, 이를 데이터를 처리에 활용한다.</li>
</ul>

<ol>
<li>쿠키 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/2cc07395-6916-4191-8d03-5af9944e1ddf/image.png" alt="">
파라미터로 가져온 데이터를 String타입의 변수에 저장한후 그 변수를 새로운 쿠키 객체를 만들어서 저장시켜줍니다. 쿠키는 String 타입의 name과 value로 이루어져있습니다.
쿠키는 계속해서 존재하지 않고 유효시간이 존재합니다. ((60초 * 60 = 1시간 )* 24 = 하루)로 유효시간을 setMaxAge()로 설정해주고, response.addCookie()로 응답을 해주어야 쿠키가 저장이 됩니다.</li>
</ol>
<ol start="2">
<li>쿠키 가져오기
<img src="https://velog.velcdn.com/images/nick_wild/post/2022eea4-7125-4177-ba7a-fed27707b1d8/image.png" alt=""></li>
</ol>
<p>저장된 쿠키가 있다면 쿠키배열을 만들어서 거기에 쿠키를 담고 for문을 돌려서 쿠키값을 하나씩 꺼내와서 찾으려는 쿠키의 이름으로 동일한 쿠키가 있다면 그 그 쿠키를 현재 페이지에 사용하기 위해 등록 시켜 주고 원하는곳에 출력을 해줍니다. EL태그는 값이 있다면 표시를 하고 값이 없다면 아예 출력 자체를 안하는 속성을 이용하여 쿠키가 있다면 자동 완성 기능 사용도 가능합니다.</p>
<ol start="3">
<li>쿠키 삭제 하기
<img src="https://velog.velcdn.com/images/nick_wild/post/14e50d2b-e084-4d5c-9239-d608f1fd96c8/image.png" alt=""></li>
</ol>
<p>만들때와 마찬가지로 해당 쿠키의 이름으로 새로 만들게 되면 기존 쿠키의 내용이 덮어 씌워지므로, 해당 쿠키의 유효시간을0으로 설정하고 response로 응답해주면 해당 쿠키는 새로 만들어지면서 0초간 유지 됨으로 존재하지 않게 됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12월 1일 Day34]]></title>
            <link>https://velog.io/@nick_wild/12%EC%9B%94-1%EC%9D%BC-Day34</link>
            <guid>https://velog.io/@nick_wild/12%EC%9B%94-1%EC%9D%BC-Day34</guid>
            <pubDate>Thu, 01 Dec 2022 13:31:18 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp로-로그인-페이지-구현하기">JSP로 로그인 페이지 구현하기</h2>
<ol>
<li>자바 리소스에서 패키지및 클래스 만들어주기</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/89bf60bd-c234-4bc3-a5db-1ca408943388/image.png" alt="">
<img src="https://velog.velcdn.com/images/nick_wild/post/a1794f37-59c5-4f0d-9f64-b7ef16a8e022/image.png" alt=""></p>
<p>자바빈 형식으로 Private 멤버필드, 기본생성자, 그리고 getter/setter를 만들어줍니다.</p>
<p>데이터를 관리할 핸들러 클래스도 만들어줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/f07e1230-1995-48ff-bef4-0c7386eab166/image.png" alt="">
 나머지 기능적 함수들은 페이지 만들어가면서 만들 예정입니다.</p>
<ol start="2">
<li>webContent에서 index,header jsp 페이지 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/75fff883-5329-4148-bb07-4c93e0340cc7/image.png" alt="">
먼저 모든 페이지들은 이 header를 include 하기에 헤더 페이지를 만들어주고 대문 페이지인 index 페이지도 만들어줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/49d84901-4d11-46c6-9e3f-4125158c18e3/image.png" alt="">
이엘 태그 안의 empty와 not empty는 말 그대로 ob가 있는지 유무를 판단하는 태그로 attribute ob가 empty 라면 비어 있고 not empty 라면 존재 한다는 뜻입니다.</li>
</ol>
<ol start="3">
<li><p>webContent에서 회원가입 (join, join-action.jsp)페이지 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/81a4a0a6-9815-4cc1-acec-b0f2bbbdb770/image.png" alt="">
비밀번호를 포함하기에 주소창에 나타 나지 않는 POST 방식으로 전달하며 join-action으로 넘겨 줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/5e33b8df-a33c-4db5-99b3-2cad53d1b936/image.png" alt="">
join-action에서는 handler 페이지에서 작동할 추가 함수를 만들어줍니다. 바로 insert() 이며 매개 변수로 전달받은 값들을 이용하여 useBean 객체를 만들어서 넘겨줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/5b55d346-76b8-477e-8010-2e244fa3adbf/image.png" alt="">
추가 함수에는 아이디 중복 체크 기능을 포함하여 중복 아이디라면 결과적으로 추가가 안됩니다. </p>
</li>
<li><p>WebContent에서 login, login-action.jsp 만들어주기
<img src="https://velog.velcdn.com/images/nick_wild/post/17ca438e-5e68-4a8c-a439-a776ca4b7c9f/image.png" alt="">
로그인정보도 사용자에게 입력 받아야 하므로 form 태그로 작성해주고 전달 방식또한 post 방식을 이용합니다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/dc93ff29-78e3-48be-8721-7843d59b4922/image.png" alt="">
login-action 페이지에서는 다시 useBean을 이용하여 사용자 id와 pw값으로만 객체를 만들어서 handler의 로그인 기능을 구현하여 반환값으로 해당 객체를 찾아 오도록 설정해줍니다. 
그리고 일치하는 계정이 없을시에는 뒤로 돌아가기 버튼이 표시되도록 해줍니다.</p>
</li>
<li><p>webContent에서 mypage 만들어주기.
<img src="https://velog.velcdn.com/images/nick_wild/post/7a40ace2-c8c5-4231-8e82-0f599c52f97e/image.png" alt="">
mypage 에서는 회원 정보를 보여줍니다. 먼저 로그인이 되어있는지를 자바 스크립트로 확인하도록 되어있으며 로그인 정보가 없을 경우 로그인후 이용할수있다는 경고 메시지가 출력이 되며 로그인 되어있는경우 회원정보가 테이블 테그로 표로 표시되고 아래에 위치한 버튼으로 수정이 가능합니다. </p>
</li>
<li><p>webContent에서 modify, modify-action 페이지 만들어주기
<img src="https://velog.velcdn.com/images/nick_wild/post/6d3d9afe-1ea2-4e39-b4b5-b764a84d29c2/image.png" alt="">
modify 페이지는 mypage에서 보여주던 테이블을 그대로 가져오고 value들을 현재 저장된 값을 불러옵니다. 그리고 submit이 되면 modify-action 페이지로 전달이 됩니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/454877fe-51fd-4100-a528-4a91daa1b78f/image.png" alt="">
modify-action에서는 modify에서 작성된값을 받아서 useBean을 이용하여 객체를 생성하여 handler의 modify()함수의 매개 변수로 전달해줍니다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/112a1eaf-6f77-458a-a122-f0c6f248bbda/image.png" alt="">
handler의 modify()함수는 새로 덮어 씌우기 위해서는 인덱스가 필요하여 for문을 이용하고 userid가 일치하는 객체를 찾아서 해당 객체의 정보를 덮어 씌워 줍니다. index를 반환하는 함수로 일치하는 계정이 없다면 -1이 반환되며 일치하는 계정을 찾는다면 0 이상의 숫자가 반환됩니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월30일 Day33]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%9430%EC%9D%BC-Day33</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%9430%EC%9D%BC-Day33</guid>
            <pubDate>Wed, 30 Nov 2022 12:41:32 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp로-업앤다운-게임-만들기">JSP로 업앤다운 게임 만들기</h2>
<ul>
<li>컴퓨터가 1~100까지 임의의 숫자를 뽑는다</li>
<li>사용자는 숫자를 입력하면 컴퓨터는 사용자의 입력값과 비교하여 &quot;업&quot; ,&quot;다운&quot;,&quot;정답&quot; 3가지를 말해준다.</li>
<li>최종적으로 몇회만에 맞추었는지 횟수까지 표기한다.</li>
</ul>
<ol>
<li>Java resource에서 먼저 자바 클래스 파일을 만들어준다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/273def95-aa28-45d8-93e6-d13ae846e948/image.png" alt=""></p>
<p>JSP는 자바언어로 만들어진 내용물을 웹애서 표현해주는 포장지 같은 역할이다 그러므로 실 내용물은 자바 이므로 클래스가 먼저 잘 만들어져 있어야 연동시키가 쉽다. 클래스에 만들어진 함수와 멤버필드들이 잘 작동하는지 main문을 작성하여 확인하는것도 좋은 방법이다.</p>
<p>자바 클래스에서는 멤버 필드로 컴퓨터가 뽑을 숫자, 그리고 시도한 횟수를 선언해주고, checkInput함수는 사용자의 입력값을 받아야 작동되는 함수로써 이 함수가 한번 실행 될때마다 횟수가 1씩 증가 하게 된다. 함수 결과는 &quot;up&quot;, &quot;down&quot;,correct&quot; 3가지 문자열을 조건에 따라 반환한다.</p>
<ol start="2">
<li>webContent에서 form 페이지를 만들어준다.
<img src="https://velog.velcdn.com/images/nick_wild/post/08b4bf0c-8a60-45e3-b099-b5d2c05d0852/image.png" alt="">
폼에서 사용자의 입력을 받도록 하고 입력받은 파라미터들은 ex02-action.jsp 페이지로 넘겨진다. input type=&quot;number&quot;로 작성되지만, 모든 파라미터는 String 형태로 저장이 된다.
step을 이용하면 증감의 폭을 설정하는값으로 1씩 증가 하거나 감소한다는 뜻이다.</li>
</ol>
<p>이엘테그로 쓰인 ${msg }는 현재 attribute에 저장된 msg가 없으므로 출력이 되지 않는다. 이는 추후 사용자값과 컴퓨터 값을 비교한후 다시 입력받을때 이 폼 페이지를 이용하게 되는데 그때 표시 해주기 위함이다.</p>
<ol start="3">
<li>webContent에서 action 페이지 만들기.
<img src="https://velog.velcdn.com/images/nick_wild/post/48d9348c-0c41-4901-9835-6ba3d8bc83d7/image.png" alt=""></li>
</ol>
<p>업앤다운 만들기는 쉬웠으나 이페이지가 없다면 우리가 생각하는 반복 작업이 손쉽게 이루어지지 않는다. </p>
<p>1) 먼저 만들어진 클래스 UpDownGame 클래스를 객체로 사용하기 위해 attribute를 접근한다. 왜 setAttribute가 먼저가 아니라 getAttribute를 사용한것인가?
-&gt; 이는 추후 반복 작업을 할때를 위함이다. 즉 지금은 처음이라 set으로 설정하는게 맞지만 반복작업을 진행한다면 컴퓨터의 random숫자는 계속 유지 되어야 한다. 그리고 form페이지를 통해서 사용자가 숫자가 맞을때까지 계속 입력을 하게 된다. 사용자가 다시 입력 받고 넘어왔을때는 이미 attribute에 저장되어있는 그 숫자를 가진 객체를 가져와야 하기에 getAttribute를 사용한다. 그리고 아래의 if문에서 만약 지금 Attribute에 저장되어있는값이 없다면(즉 처음 접근한것이라면) 새로 만들어서 저장한다. </p>
<p>2) 그리고 form페이지에서 입력된 num은 String 이므로 int 형태로 바꿔 주고 game 클래스안의 checkInput 함수를 호출하여 결과값을 반환 받아준다.</p>
<p>3) 결과값이 정답이 아닌 경우에는 msg를 request객체에 저장하여 forward 해서 다시 form으로  이동시켜주고
정답인 경우에는 result 페이지로 이동시켜주며, 현재 어트리뷰트에 저장된 game 객체를 삭제 시켜줌으로써 다시 초기화를 시켜준다.</p>
<ol start="4">
<li>webContent에 result 페이지 만들기
<img src="https://velog.velcdn.com/images/nick_wild/post/a716626f-284d-4176-8ba0-96223d16fd0e/image.png" alt=""></li>
</ol>
<p>forward 된 페이지 이므로 request에 저장된 msg는 이엘테그로 바로 출력이 가능하고, 다시 하길 원한다면 a 태그를 이용하여 다시 form 페이지로 이동시켜주는 버튼을 만들어준다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월 28일 Day32]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%94-28%EC%9D%BC-Day32</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%94-28%EC%9D%BC-Day32</guid>
            <pubDate>Tue, 29 Nov 2022 04:14:09 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp로-리스트-만들기">JSP로 리스트 만들기</h2>
<ol>
<li>자바 리소스에 클래스 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/8d2ffee6-dc04-4fac-a91c-ca53d974ac87/image.png" alt="">
<img src="https://velog.velcdn.com/images/nick_wild/post/676b7013-a11f-4607-8481-38299e499cb0/image.png" alt=""></li>
</ol>
<p>자바빈즈 생성을 위해 private 변수와, 기본생성자 그리고 getter와 setter를 작성해줍니다.</p>
<ol start="2">
<li>같은 패키지내에 handler  작성
<img src="https://velog.velcdn.com/images/nick_wild/post/48811548-30cc-416b-9518-4806bd1af7d6/image.png" alt=""></li>
</ol>
<p>만든 객체를 저장할 리스트를 핸들러에 작성해주고, 더미 데이터도 미리 몇개 생성해줍니다. 리스트를 반환하는 함수도 작성하여 원하는곳에서 리스트를 볼수 있도록 합니다.</p>
<ol start="3">
<li>webContent에서 jsp 페이지들 작성하기 1번째 header.jsp 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/57a6be0b-4466-49dd-9918-822eeca20639/image.png" alt="">
인코딩을 UTF-8 방식으로 지정해준후, 최상위 경로로 바로 갈 수있게 cpath 라는 이름을 저장해줍니다. 만들어놓은 핸들러도 사용 할 수 있도록 저장해줍니다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/cdbb3e0f-b15b-4b8f-a0f1-480391c2cc91/image.png" alt=""></li>
</ol>
<p>맨 윗줄에는 나만의 배달 목록이 배치되고, 그아래에는
목록과 추가 버튼을 옆쪽에 배치 됩니다. 그리고 그옆에는 index.jsp 페이지가 배치 됩니다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/d590ba93-d76a-4829-a4e8-1297b2115531/image.png" alt=""></p>
<p>이제 헤더는 모든 페이지의 위에 위치하도록 include 해줍니다. 그러면 어느 탭을 눌러도 헤더쪽은 항상 같은 위치해있게 됩니다. </p>
<p>4.webContent에서 jsp 페이지들 작성하기 2번째 list.jsp 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/d72a6e4f-9ba1-4dd1-91cc-7b0a4cfc7270/image.png" alt="">
헤더를 포함하는 이 list.jsp 는 헤더의 handler가 사용 가능하므로, 스크립틀릿에서 핸들러의 리스트를 출력하는 함수를 호출하여 현재 페이지의 변수로 저장하여놓고 이엘태그를 이용하여 필요한 값들을 출력하여 줍니다. </p>
<p>삭제 및 수정은 쿼리 스트링을 이용하여 인덱스의 번호를 넘겨주어 수정할 객체의 인덱스 번호로 수정하거나 삭제 할 수 있도록 해줍니다.</p>
<p>5.webContent에서 jsp 페이지들 작성하기 3번째 add.jsp 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/b75bfb64-a428-42e2-810f-2b746894e09f/image.png" alt=""></p>
<p>헤더 부분에 위치한 추가 버튼을 클릭하여 add.jsp 페이지를 넘어 오게 되면 기본적으로 get 방식으로 넘어 오게 됩니다. 만약 get 방식으로 넘어 오게 된다면, 아래의 form 태그를 보여주며 사용자의 입력을 유도 하고 이 form은 다시 method가 POST 방식으로 넘겨 주게 됩니다. </p>
<p>그리고 아래에서 이제 POST 방식으로 넘어 가게 된다면 jsp:useBean을 통해 객체 생성후 setProperty를 통해 객체 속성이 지정되고 이렇게 지정된 객체는 handler의 insert 함수를 통하여 추가가 됩니다. 
핸들러의 인서트 함수를 만들어줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/fccaab82-218a-4315-982e-28016e22f9db/image.png" alt=""></p>
<p>6.webContent에서 jsp 페이지들 작성하기 4번째 delete.jsp 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/623abc23-2fb5-4c25-8bce-cdc2a7ae6998/image.png" alt=""></p>
<p>handler에 delete함수를 만들어 줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/897c568a-71fd-46bf-b14f-0605d9354f83/image.png" alt=""></p>
<p>7.webContent에서 jsp 페이지들 작성하기 5번째 modify.jsp 작성
<img src="https://velog.velcdn.com/images/nick_wild/post/89ea3848-ce9e-432f-87b5-649c3afdebd1/image.png" alt="">
idx로 수정할 객체를 찾기 위해 쿼리스트링으로 넘어온 idx를 다시 인트형으로 바꿔서 저장하고 int형 idx를 handler의 getItem()메서드의 파라미터로 전달하여 해당 객체를 찾아오도록 합니다.</p>
<p>그리고 받게된 객체를 추가할때 모습처럼 input 태그에서 보여주고 이전 add.jsp와 마찬가지로 새로 객체를 만들어서 덮어 씌우도록 합니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/3e288218-8676-48fc-9bc5-3c0a5d52fd82/image.png" alt="">
handler에서 index로 객체를 반환하는 메서드 입니다.</p>
<p>마지막으로 form 태그에서 새로 만든 객체는 handler에서 modify()라는 함수로 같은 인덱스를 가진 객체를 set(,) 메서드로 덮어 씌워줍니다.
<img src="https://velog.velcdn.com/images/nick_wild/post/59652541-45ec-4df5-8dea-cd2f28595c0e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월 25일 Day31]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%94-25%EC%9D%BC-Day31</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%94-25%EC%9D%BC-Day31</guid>
            <pubDate>Sat, 26 Nov 2022 17:01:49 GMT</pubDate>
            <description><![CDATA[<h3 id="redirect-와-forward">redirect 와 forward</h3>
<ol>
<li>redirect는 클라이언트에게 특정 주소로 이동하도록 지시하는 기법이다</li>
<li>forward는 클라이언트의 의도를 무시하고, 서버가 다른 문서를 보여주는 기법이다</li>
</ol>
<p>차이점 : 리다이렉트와 포워드 특정 URL 접속 시 리다이렉트 또는 포워드가 일어나게 되면 작업 중인 페이지가 전환된다. 리다이렉트와 포워드는 페이지가 전환된다는 점에서 비슷한 역할을 한다. 하지만 이 둘 사이에는 페이지를 전환하는 주체가 다르다. 리다이렉트는 페이지 전환 주체가 클라이언트이며, 포워드는 페이지 전환 주체가 서버이다. 클라이언트가 주체가 되어 페이지를 전환하는 방법은 접속한 URL이 아닌 다른 URL로 직접 접속하는 방법 밖에 없다. 반대로 서버가 전환 주체가 되면 URL 주소가 바뀌지 않고도 서버 내부의 동작을 통해 다른 응답을 클라이언트에 내려줄 수 있게 된다.</p>
<blockquote>
<p>예시)
<img src="https://velog.velcdn.com/images/nick_wild/post/f77e6756-b398-4c31-a949-8406eb438a32/image.png" alt="">
간단한 입력폼을 만들어서 제출하게 한후
<img src="https://velog.velcdn.com/images/nick_wild/post/1004e75c-f2e0-47c8-bfa7-a4abc4acc66c/image.png" alt="">
받은 내용은 POST 방식이게 먼저 인코딩 방식을 UTF-8로 지정해주고, 표현할 내용을 전부 설정 한 다음 Request.getRequestDispathcer로 포워딩할 주소를 설정하여준다.</p>
</blockquote>
<h3 id="include">include</h3>
<p>다른 문서의 내용을 현재 문서에 포함시키고 싶을 경우 사용한다.</p>
<ol>
<li>&lt;%@ include %&gt; : 서로 다른 JSP를 합쳐서 컴파일한다<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/2d0774a2-743f-47ca-b85e-805db3c4510c/image.png" alt="">
단독으로 사용될일이 없고, 하단에 다른 내용이 추가 될것이므로, &lt;/ html&gt;, &lt;/ body&gt;와 같은 내용을 제거한다
<img src="https://velog.velcdn.com/images/nick_wild/post/59cff074-b3e9-4209-9be7-8e60db4cc4a3/image.png" alt=""></p>
</blockquote>
</li>
</ol>
<ol start="2">
<li>&lt;jsp:include /&gt; : 각각 JSP를 컴파일하고, 결과화면만 합쳐서 보여준다<blockquote>
<p>예시 
<img src="https://velog.velcdn.com/images/nick_wild/post/2d0774a2-743f-47ca-b85e-805db3c4510c/image.png" alt="">
위와 마찬가지로 &lt;/ html&gt;, &lt;/ body&gt;와 같은 내용을 제거한다
<img src="https://velog.velcdn.com/images/nick_wild/post/538081c4-4019-4ad6-bb7e-d35bd79c9e30/image.png" alt=""></p>
</blockquote>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월24일 Day30]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%9424%EC%9D%BC-Day30</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%9424%EC%9D%BC-Day30</guid>
            <pubDate>Thu, 24 Nov 2022 15:07:07 GMT</pubDate>
            <description><![CDATA[<h2 id="request-객체">request 객체</h2>
<p>request 객체는 요청 객체로 서버로 원하는 여러가지 요소들을 요청하여 받을수 있다.</p>
<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/d69ea0fd-c04a-4bf6-b88a-21ec58d5590b/image.png" alt="">
<img src="https://velog.velcdn.com/images/nick_wild/post/cd5f3607-70fb-4bf2-8cff-0aeeb7d1f2f0/image.png" alt=""></p>
</blockquote>
<p>처음 페이지 작동시 bgColor 와 textColor는 null값이기에 기본 컬러인 검정과 화이트 로 출력이 되고 form 태그에서 선택을 하게 되면 request객체가 bgColor와 textColor를 받아와서 style 태그에 적용이 된다. </p>
<p>request로 넘어온 파라미터를 map형식으로 받아 올 수도 있다.</p>
<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/e25883e1-6d86-4ed7-9791-d54212e57404/image.png" alt=""></p>
</blockquote>
<p>가져온 Map에서 다시 key를 이용하여 값을 출력하기</p>
<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/84110ea4-c403-436b-a3d0-8ea6506684fc/image.png" alt=""></p>
</blockquote>
<h3 id="액션태그-usebean">액션태그 useBean</h3>
<p>형식은 태그 이지만, 자바 코드가 수행된느 특수한 태그(xml 기반의 태그)
jsp에서 java를 모르는 사람도 그 로직을 사용할 수 있도록 만들어졌다.</p>
<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/806b1d4a-b406-4601-9e08-c752beb7704c/image.png" alt="">
<img src="https://velog.velcdn.com/images/nick_wild/post/ccc79f89-6dd9-49a1-859e-824aac26c16a/image.png" alt="">
자바 빈즈 규칙에 따라 멤머필드와, 생성자, getter/setter를 생성해야함</p>
</blockquote>
<p><a href="jsp:useBean">jsp:useBean</a> - id 속성</p>
<p>객체의 이름을 설정한다. </p>
<p>① 꺼낸 객체의 참조 변수 이름</p>
<p>② getAttribute()로 값을 꺼낼때 사용하는 이름</p>
<p>③ 객체를 생성할경우 보관소에 저장하는 key값의 이름</p>
<h3 id="attribute">Attribute</h3>
<p>application.getAttribute(String) </p>
<p>application은 서버가 재시작하기전까지 유지되는 특성으로 이곳에 저장된 값을 불러 오고 입력하는 attribute가 있다. 
getAttribute를 사용하게 되면 ( ) 괄호 안의 이름으로 된 값을 찾아서 불러오고 없다면
setAttribute(변수명, 변수)를 사용하여 저장하고 나중에 다시 다른 JSP 페이지에서 불러오기가 가능하다.</p>
<blockquote>
<p>예시
<img src="https://velog.velcdn.com/images/nick_wild/post/ea686335-7846-4bf4-b02e-9fae619f3680/image.png" alt="">
Handler라는 클래스가 이미 자바 리소스에 만들어져있는데 이 Handler를 다른 JSP페이지에서도 불러오려고 한다, applciation에 handler라는 이름으로 저장된게 있는지 먼저 찾아서 없다면 새로운 Handler객체를 만들고 변수 hd라는 이름으로 참조 시킨후. application에  setAttribute를 사용하여 handler라는 이름으로 hd를 저장 시킨다. </p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월 23일 Day29]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%94-23%EC%9D%BC-Day29</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%94-23%EC%9D%BC-Day29</guid>
            <pubDate>Wed, 23 Nov 2022 12:56:04 GMT</pubDate>
            <description><![CDATA[<h2 id="요구사항-확인">요구사항 확인</h2>
<ol>
<li>현행시스템 파악 (정의 - 목적 - 파악 절차)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/a276ea92-5956-40fe-8574-4e36d1a75289/image.png" alt=""></p>
<ol start="2">
<li>운영체제 주요 특징 및 고려 사항</li>
</ol>
<ul>
<li><p>운영체제의 정의: 하드웨어와 소프트웨어를 관리하고 컴퓨터 프로그램을 위한 공통 서비스를 제공하는 소프트웨어.</p>
</li>
<li><p>운영체제의 종류 및 특징</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/0346e687-9220-4a66-af8b-54d024ffd124/image.png" alt=""></p>
<ol start="3">
<li>DBMS의 종류 및 특징</li>
</ol>
<ul>
<li><p>정의 : 사용자, 다른 애플리케이션, 데이터베이스와 상호작용하여 데이터를 저장한고 분석하기 위한 컴퓨터 소프트웨어 애클리케이션.</p>
</li>
<li><p>종류 : 
<img src="https://velog.velcdn.com/images/nick_wild/post/321bfebf-16e9-47df-a2d8-78bb47c41251/image.png" alt="">
<img src="https://velog.velcdn.com/images/nick_wild/post/9996d934-4c9e-46d6-928d-03d14308123f/image.png" alt=""></p>
</li>
</ul>
<ol start="4">
<li>미들웨어 중 WAS 종류</li>
</ol>
<ul>
<li><p>정의 : 운영체제와 소프트웨어 어플리케이션 사이에 위치하여 서비스 추가 및 확장 제공하는 소프트웨어</p>
</li>
<li><p>종류 : 
<img src="https://velog.velcdn.com/images/nick_wild/post/eb5d0aab-2b1e-40f5-9ed3-e1dc36d7e114/image.png" alt=""></p>
</li>
</ul>
<ol start="5">
<li>요구사항 확인하기</li>
</ol>
<ul>
<li>요구사항 개발 프로세스:</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/673ce2e3-41a8-496c-a831-a5541df9224a/image.png" alt=""></p>
<ol start="6">
<li>개념모델링</li>
</ol>
<ul>
<li>개념모델의 종류와 표기법:</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/7d7fb54d-f3bd-4115-9fbc-639377316178/image.png" alt=""></p>
<ol start="7">
<li>유스케이스 분석 클래스의 스테레오타입</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/ab3d8f39-4a9f-436e-ae04-257de12bbbaa/image.png" alt=""></p>
<p>B : Boundary , C : Control , E : Entity 
<img src="https://velog.velcdn.com/images/nick_wild/post/73d1f647-32e6-4e5f-8c65-03c2847433e3/image.png" alt=""></p>
<ol start="8">
<li>자바 빈즈 규칙 </li>
</ol>
<ul>
<li>필수 구성 요성 3가지 : Private 멤버필드 , getter/setter, 기본생성자!</li>
</ul>
<h2 id="get-메서드들-in-jsp">get***() 메서드들 in jsp</h2>
<p>클라이언트가 서버에게 보내는 요청을 객체화한 요소들. 내장객체중 하나.</p>
<ol>
<li><p>getParameter(String name): 사용자가 전달한 특정 파라미터 하나를 가져온다.</p>
</li>
<li><p>getParameterMap() :     사용자가 전달한 모든 파라미터를 map 형태로 가져온다</p>
</li>
<li><p>getParameterValues(String name) : 특정 이름으로 전달된 여러 값을 String[] 형태로 반환한다</p>
</li>
<li><p>getRemoteAddr() : 원격지 주소(클라이언트의 주소)를 문자열 형태로 반환</p>
</li>
<li><p>getLocalAddr() : 자신의 주소(서버의 주소)를 문자열 형태로 반환</p>
</li>
<li><p>getContextPath() : 서버에서 웹 문서가 위치하는 경로를 문자열로 반환한다. WebContent</p>
</li>
<li><p>getLocalPort() : 서버가 운용중인 포트의 번호를 int형으로 반환한다</p>
</li>
<li><p>getRequestURI() : 요청받은 자원(문서)의 경로를 문자열로 반환한다</p>
</li>
<li><p>getRequestURL() :     요청받은 전체 주소 (프로토콜 + 서버이름 + 서버포트 : URI (contextPath + 파일이름))</p>
</li>
<li><p>getQueryString() :     요청받은 쿼리스트링을 문자열로 반환한다. 다듬으면 파라미터가 된다</p>
</li>
<li><p>getHeader(String headerName) : 요청 헤더에 담긴 특정 요소를 문자열 형태로 반환한다 (referer는 참조자, 어디에서 왔는가)</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월22일 Day28]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%9422%EC%9D%BC-Day28</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%9422%EC%9D%BC-Day28</guid>
            <pubDate>Tue, 22 Nov 2022 13:29:12 GMT</pubDate>
            <description><![CDATA[<h2 id="jsp">JSP</h2>
<h3 id="jsp-뜯어보기">jsp 뜯어보기</h3>
<ol>
<li>jsp의 구성</li>
</ol>
<p>jsp에서는 크게 4가지 구성요소로 이루어져있다.</p>
<ul>
<li><p>directive 지시자 : &lt;%@ page import=&quot;java.util.ArrayList&quot; %&gt;
import, 인코딩, session 설정 등을 처리한다. 클래스 전체에 적용되는 설정</p>
</li>
<li><p>declaration 선언부 : &lt;%! int n1 = 10; %&gt;
클래스의 멤버 필드 및 멤버 메서드를 선언하는 공간이다. 함수를 정의할 수 있으나 호출할 수 없다</p>
</li>
<li><p>scriptlet 스크립틀릿 : &lt;% %&gt;
자바 코드를 작성하는 공간. 실제로는 service() 함수에 내용을 작성하는 것이다</p>
</li>
<li><p>expression 표현식 : &lt;%= n1 %&gt;, &lt;%= add(10, 20) %&gt;
  변수 혹은 함수의 값을 HTML에 출력한다. out.print() 와 동일하다</p>
</li>
<li><p>comment, 주석 : &lt;%-- JSP주석<del>~</del> --%&gt;
  JSP주석은 HTML주석과 달리, 웹 브라우저에서 확인할 수 없다</p>
</li>
</ul>
<blockquote>
<p>ex) <img src="https://velog.velcdn.com/images/nick_wild/post/62d31c72-ad70-47b5-81a0-bc4a90d70f4b/image.png" alt=""></p>
</blockquote>
<ol start="2">
<li>jsp 사용 예시</li>
</ol>
<p>선언부에서는 함수나 멤버 필드등을 정의 해준다. 메서드의 정의는 가능하지만 호출은 불가하다. </p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/9f9eb60b-9dd9-473d-a115-f8df286dbd7e/image.png" alt=""></p>
<p>스크립틀릿에서 수행할 자바코드를 작성해준다. 위에서 만든 함수를 호출하는것도 이부분에서 가능하다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/3df511f0-04b7-4bac-871d-9618b1235c95/image.png" alt=""></p>
<p>스크립틀릿에서 사용하여 얻은 값들은 표현식에서  &lt;%= 을 사용하여 웹사이트에서 나타낼수가 있다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/8d26f7de-f1d1-4908-bf71-72331ada12f9/image.png" alt=""></p>
<ol start="2">
<li>사용자에게 입력 받아서 출력하기</li>
</ol>
<p>form태그를 사용하여 input 태그를 사용하여 입력받을수 있도록 한다.
<img src="https://velog.velcdn.com/images/nick_wild/post/440d5a16-7576-4c19-b842-30b72a6cea2a/image.png" alt=""></p>
<p>스크립틀릿에서 해당 입력받은 내용을 요청하여 새로운 변수에 저장하고 포맷에 맞게 출력한다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/22fa5259-523c-46da-83a7-32cce6c923e6/image.png" alt=""></p>
<p>여기서 더 나아가 jsp 파일을 총 2개 만들어서 한쪽은 사용자에게 입력받고 입력 받은 내용을 다른 jsp 파일에서 출력하는것도 가능하다.</p>
<p>ex04-form.jsp 파일을 만들어서 
먼저 form 태그를 만들고 만들어진 form 태그는 submit 되면 ex04-result.jsp 파일로 보내진다. 
<img src="https://velog.velcdn.com/images/nick_wild/post/6d7497b7-1f5f-4ccf-a139-9ec2523a6c0c/image.png" alt=""></p>
<p>ex04-form.jsp에서 보내진 내용들은 request 객체의 getParameter 메서드를 통하여 각각 form 태그에서 name 속성에 저장했던 값들을 불러와서 다시 새로운 변수로 저장하고 이를 표현식을 통해서 화면에 출력을 해줄수 있다. </p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/533de98b-6336-45b7-94a5-ba9478f9cbda/image.png" alt=""></p>
<p>버튼 태그에도 a태그를 사용하여 링크를 걸어주면 해당 버튼을 누르면 해당 페이지로 이동이 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월21일 Day27]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%9421%EC%9D%BC-Day27</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%9421%EC%9D%BC-Day27</guid>
            <pubDate>Mon, 21 Nov 2022 12:52:16 GMT</pubDate>
            <description><![CDATA[<h2 id="html태그">Html태그</h2>
<h4 id="특정-요소만-선택하여-적용하기">특정 요소만 선택하여 적용하기</h4>
<ol>
<li>checkbox 체크<br></li>
</ol>
<p>ex)</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/8c16304c-9cbe-4fe7-bea7-96834f47967b/image.png" alt=""></p>
<p> style 태그 안에서 input value속성들들중 check되고나면 해당span태그 컬러를 red로  혹은 blue로 표현함.
<img src="https://velog.velcdn.com/images/nick_wild/post/636b1c1a-23e6-44d6-bae7-7ed03e045360/image.png" alt=""></p>
<blockquote>
<p>결과</p>
</blockquote>
<style>
  input[value="red"]:checked + span {
            color: red;
        }
        input[value="blue"]:checked + span {
            color: blue;
        }
</style>
<p>
            <label>
                <input type="checkbox" name="color" value="red">
                <span>빨강</span>
            </label>
            <label>
                <input type="checkbox" name="color" value="blue">
                <span>파랑</span>
            </label>
        </p>

<ol start="2">
<li>사용자의 사용제한 (user-select : none)</li>
</ol>
<p>ex) 스타일 태그안에 속성중 사용제한을 금지할 태그에 사용
<img src="https://velog.velcdn.com/images/nick_wild/post/76640270-ed15-4106-af5f-bcac090f1a3f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/4a5f3d73-f1da-43fd-b776-4121fc8bee51/image.png" alt="">
image 다음에 오는 div 속성을 사용자가 접근할수 없도록 한다. 즉 단비라는 글자가 드래그 되지 않음</p>
<h3 id="position">position</h3>
<ol>
<li>static :기본 값, 주변 요소에 맞춰 자리를 배치한다</li>
</ol>
<p>2.relative : 주변 요소에 맞춰 자리배치를 한다. 기본값과 조금 다르다.</p>
<ol start="3">
<li>absolute : 주변 요소와 상관없이, 자신만의 독자적인 자리배치를 한다. 자신의 상위 요소 중에서, position이 기본값이 아닌 요소를 기준으로 한다. </li>
</ol>
<p>4.float : 속성에 따라 자신을 어디에 노출시킬건지 정하는 속성 오른쪽 혹은 왼쪽에서 나타남.</p>
<h3 id="drop-down-메뉴-만들기">drop down 메뉴 만들기</h3>
<p>바디 태그 안에 리스트들을 먼저 만들어 준후 .</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/30b79f5e-d003-4726-ace2-9b4bd8518763/image.png" alt=""></p>
<p>각 리스트별 속성을 정의 해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/nick_wild/post/44b9bf31-52d4-4384-a685-9086c8c4faf8/image.png" alt=""></p>
<p>1) ul/ol 모두 리스트 속성을 없애서 .이나 숫자를 없애줌</p>
<p>2) ul 태그가 가로에 배치되게 flex 속성을 부여</p>
<p>3) ul 속성 안의 li들은 가로 너비 200px 과 검정색 태두리를 가짐</p>
<p>4) ol 태그들은 마진값들 설정과 평소에는 보이지 않게 display가 none으로 설정 그리고 포지션은 absolute로  설정하여 위치를 고정</p>
<p>5) ol의 li들 너비 설정</p>
<p>6) ul 태그안의 li들을 클릭하면 그안의 ol 태그들이 보여지도록  display block 속성부여</p>
<p>7) li 속성들의 패딩값 부여</p>
<p>8) li 태그들 마우스가 올라갔을때 배경색 밑 포인터 지정</p>
<h3 id="div와-같은-다른-속성들">div와 같은 다른 속성들</h3>
<p>다음의 태그들은 전부 div 속성으로 사용도 가능하다. 하지만 속성을 이렇게 분류하는 이유는 전부 div로 나누었을때 보다 레이아웃들을 정형화 하여 인터넷 검색시 분류가 잘되어져있는 레이아웃들은 정확한 검색 노출로 이어진다. 그리하여 header와 footer 그리고 article등에 내용이 정리 되도록하는것이 권장된다.</p>
<ol>
<li><p>header : div class=&quot;header&quot; 와 같은 역할이다.웹 페이지의 상단영역을 표현한다</p>
</li>
<li><p>nav : 웹 페이지의 메뉴 네비게이터 (상단 혹은 측면)</p>
</li>
<li><p>aside : 왼쪽 혹은 오른쪽에 표시되는 광고 및 리모컨 등</p>
</li>
<li><p>section : 문서의 각 주제별 내용을 포함하는 태그</p>
</li>
<li><p>article : section 내부의 단락을 표현하는 태그</p>
</li>
<li><p>footer : 하단 고정 영역</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[11월18일 Day26]]></title>
            <link>https://velog.io/@nick_wild/11%EC%9B%9418%EC%9D%BC-Day26</link>
            <guid>https://velog.io/@nick_wild/11%EC%9B%9418%EC%9D%BC-Day26</guid>
            <pubDate>Sat, 19 Nov 2022 15:07:18 GMT</pubDate>
            <description><![CDATA[<h2 id="input-관련-태그">input 관련 태그</h2>
<p>html에서 사용자에게 원하는 값을 상호작용하면서 받는 태그들이 있다. JAVA에서 scanner로 입력을 받았듯 유사하게 사용자에게서 값을 받아서 전달해주는 태그들이다. 
input 태그는 정의할때 
&lt; input type=&quot;&quot;&gt; 이런형식으로 타입을 지정하여주면서 사용할 수있다.</p>
<ol>
<li>text 태그
사용자에게 문자열 기반의 텍스트를 입력받기 위한 태그이다.<blockquote>
<p>결과</p>
<input type="text">
이런식으로 사용자에게 텍스트 입력받는 공간을 만들어준다. 
</blockquote>
</li>
</ol>
<p>2.number 태그 
사용자에게 정수 및 실수 기반의 텍스트를 입력받기 위한 태그</p>
<blockquote>
<p>결과
<input type="number">
숫자를 입력하거나 아래위로 버튼을 눌러 숫자를 조절할 수도 있다.</p>
</blockquote>
<p>3.password태그
사용자에게 문자열 기반의 텍스트를 입력받기 위한 태그
입력받은 내용을 화면상 표시하지 않는다 (가려서 보여준다)</p>
<blockquote>
<p>결과
<input type="password">
해당 입력 공간이 가려져서 나온다.</p>
</blockquote>
<p>4.email태그
사용자에게 문자열 기반의 이메일 주소를 입력받는다
형식에 맞지 않으면, 제출할 수 없다</p>
<blockquote>
<p>결과
<input type="email" required>
type 옆에 required 를 입력하면 이메일 형식이 갖춰지도록 메세지가 출력된다.</p>
</blockquote>
<ol start="5">
<li>radio 태그
사용자에게 마우스를 이용하여 항목을 선택한다
이름이 같은 항목은 여러개 중 하나만 선택할 수 있다
<img src="https://velog.velcdn.com/images/nick_wild/post/8a94e532-53ac-4630-b27b-c390966c79d8/image.png" alt=""></li>
</ol>
<blockquote>
<p>결과
<input type="radio" name="adult">성인
<input type="radio" name="adult">미성년자
name에는 이 라디오가 선택하게될 값의 이름을 지정해주면 된다.</p>
</blockquote>
<p>6.checkbox
사용자에게 마우스를 이용하여 항목을 선택한다
이름이 같은 항목중 여러개를 중복 선택할 수 있다
<img src="https://velog.velcdn.com/images/nick_wild/post/3351db21-6afd-4e07-9365-dcfa0af27e1d/image.png" alt=""></p>
<blockquote>
<p>결과
<input type="checkbox" name="color">빨강
<input type="checkbox" name="color">초록
<input type="checkbox" name="color">파랑</p>
</blockquote>
<p>7.range
사용자에게 마우스로 숫자의 범위를 지정하여 입력받는다
입력값의 범위를 지정할 수도 있다</p>
<blockquote>
<p>결과
<input type="range"></p>
</blockquote>
<p>8.date
사용자에게 키보드 및 마우스로 날짜를 입력받는다
날짜는 yyyy-MM-dd 형식의 텍스트이다</p>
<blockquote>
<p>결과
<input type="date"></p>
</blockquote>
<p>9.time태그
사용자에게 키보드 및 마우스로 시간을 입력받는다
시간은 a hh:mm 형식의 텍스트이다</p>
<blockquote>
<p>결과
<input type="time"></p>
</blockquote>
<p>10.file태그
사용자에게 첨부 파일을 입력받는다
파일은 문자열 기반이 아니므로, 별도의 규칙이 필요하다</p>
<blockquote>
<p>결과
<input type="file"></p>
</blockquote>
<ol start="11">
<li><p>hidden태그
화면에 나타나지 않는 유형의 input 값을 만들어낸다
input의 type이 hidden이면 display속성이 none 이다(자리차지 없음)</p>
</li>
<li><p>submit태그
form 태그 내부의 input 및 입력 요소의 값을 action에 전달한다
button 태그가 form 태그 내부에 있다면 동일한 역할을 수행한다</p>
<blockquote>
<p>결과</p>
<input type="submit">
</blockquote>
</li>
<li><p>button 태그
외형 상 일반 button 및 submit과 동일하지만 아무런 작동이 없다
주로, javascript를 이용하여 form 내부에서 이벤트를 부여하기 위해 사용한다</p>
<blockquote>
<p>결과</p>
<input type="submit">
</blockquote>
</li>
<li><p>color 태그
색상 고유의 값을 알수있도록 해주는 태그</p>
<blockquote>
<p>결과</p>
<input type="color">
</blockquote>
</li>
</ol>
<h3 id="그외의-태그">그외의 태그</h3>
<p>1.select 태그
여러 목록 중 하나를 선택하여 값을 지정한다
기능 상 input type=&quot;radio&quot; 와 유사하다
<img src="https://velog.velcdn.com/images/nick_wild/post/d7d71b83-cda1-47b6-a723-0acb2f4b0cac/image.png" alt=""></p>
<blockquote>
<p>결과
  <select name="location">
   <option>=== 거주 지역을 선택하세요 ===</option>
    <option value="seoul">서울</option>
    <option value="incheon">인천</option>
    <option value="daejeon">대전</option>
    <option value="daegu">대구</option>
    <option value="ulsan">울산</option>
    <option value="gwangju">광주</option>
    <option value="busan">부산</option>
    <option value="jeju">제주</option>
 </select></p>
</blockquote>
<ol start="2">
<li>textarea태그
<img src="https://velog.velcdn.com/images/nick_wild/post/990ba9b6-83af-434e-8c87-202a4978b133/image.png" alt="">
placeholder라는 속성을 이용하면 커서를 올려 입력칸을 누르기전까지 무엇을 혹은 어떻게 입력해야 할지 가이드라인을 정해줘서 사용자에게 받는 입력 오류를 어느정도 줄여줄수 있다.</li>
</ol>
<blockquote>
<p>결과
 <textarea rows="5" 
 cols="20" 
 name="content" 
 placeholder="바르고 고운 말을 이용합시다">
</textarea></p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>