<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>_-_-kk.log</title>
        <link>https://velog.io/</link>
        <description>_-_-kk</description>
        <lastBuildDate>Wed, 26 Apr 2023 05:35:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. _-_-kk.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_-_-kk" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[SPRING 3일차 TIL]]></title>
            <link>https://velog.io/@_-_-kk/SPRING-3%EC%9D%BC%EC%B0%A8-TIL-2nbcxpjg</link>
            <guid>https://velog.io/@_-_-kk/SPRING-3%EC%9D%BC%EC%B0%A8-TIL-2nbcxpjg</guid>
            <pubDate>Wed, 26 Apr 2023 05:35:13 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-java">@PostMapping(&quot;/login&quot;)
    public String login( /*@ModelAttribute*/ Member inputMember,
                        Model model,
                        RedirectAttributes ra,
                        HttpServletResponse resp,
                        HttpServletRequest req,
                        @RequestParam(value=&quot;saveId&quot;, required=false) String saveId ) {

        // 커맨드 객체 
        // @ModelAttribute 생략된 상태에서 파라미터가 필드에 세팅된 객체


        logger.info(&quot;로그인 기능 수행됨&quot;);


        // 아이디, 비밀번호가 일치하는 회원 정보를 조회하는 Service 호출 후 결과 반환 받기
        Member loginMember = service.login(inputMember);


        /* Model : 데이터를 맵 형식(K:V) 형태로 담아 전달하는 용도의 객체
         * -&gt; request, session을 대체하는 객체
         * 
         * - 기본 scope : request
         * - session scope로 변환하고 싶은 경우
         *     클래스 레벨로 @SessionAttributes를 작성하면 된다.
         * 
         * @SessionAttributes 미작성 -&gt; request scope
         * */

        if(loginMember != null) { // 로그인 성공 시
            model.addAttribute(&quot;loginMember&quot;, loginMember); // == req.setAttribute(&quot;loginMember&quot;, loginMember);


            // 로그인 성공 시 무조건 쿠키 생성
            // 단, 아이디 저장 체크 여부에 따라서 쿠키의 유지시간을 조정

            Cookie cookie = new Cookie(&quot;saveId&quot;, loginMember.getMemberEmail());

            if(saveId != null) { // 아이디 저장 체크 되었을 때

                cookie.setMaxAge(60 * 60 * 24 * 365); // 초단위 지정(1년)

            } else { // 체크되지 않았을 때

                cookie.setMaxAge(0); // 0초 -&gt; 생성되자마자 사라짐 == 쿠키삭제

            }

            // 쿠키가 적용될 범위(경로) 지정
            cookie.setPath(req.getContextPath()); 

            // 쿠키를 응답 시 클라이언트에게 전달
            resp.addCookie(cookie);


        } else {
            //model.addAttribute(&quot;message&quot;, &quot;아이디 또는 비밀번호가 일치하지 않습니다.&quot;);

            ra.addFlashAttribute(&quot;message&quot;, &quot;아이디 또는 비밀번호가 일치하지 않습니다.&quot;);

            // redirect 시에도 request scope로 세팅된 데이터가 유지될 수 있도록 하는 방법을
            // Spring 에서 제공해줌
            // -&gt; RedirectAttributes 객체 (컨트롤러 매개변수에 작성하면 사용 가능)


        }


        return &quot;redirect:/&quot;; 
    }


</code></pre>
<hr>
<pre><code class="language-java">
&lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot; pageEncoding=&quot;UTF-8&quot;%&gt;

&lt;!-- 

    *  http://localhost:8080/comm    
    *  http://localhost:8080/comm/main 주소로 요청 위임
    -&gt; forward 이기 때문에 출력되는 주소는 http://localhost:8080/comm 유지

 --&gt;

 &lt;jsp:forward page=&quot;main&quot; /&gt;

</code></pre>
<pre><code class="language-java">
package edu.kh.comm.main.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController {

    @RequestMapping(&quot;/main&quot;)
    public String mainForward() {

        return &quot;common/main&quot;;
    }

}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[SPRING 1일차 TIL]]></title>
            <link>https://velog.io/@_-_-kk/SPRING-1%EC%9D%BC%EC%B0%A8-TIL</link>
            <guid>https://velog.io/@_-_-kk/SPRING-1%EC%9D%BC%EC%B0%A8-TIL</guid>
            <pubDate>Tue, 25 Apr 2023 05:48:10 GMT</pubDate>
            <description><![CDATA[<p>servlet-context.xml</p>
<p> 컨트롤러에서 jsp로 렌더링하는 것을 처리하는 부분이다. 
        == 컨트롤러의 응답을 jsp로 보낼때 어떻게 처리할것인가? 를 작성하는 부분
        ==&gt; View Resolver : Controller에서 반환된 문자열 앞/뒤에 
        접두사(prefix), 접미사(suffix)를 추가하여 만들어진 경로의 jsp로 요청을 위임(forward)</p>
<p>member/signUp
        /WEB-INF/views/member/signUp
        /WEB-INF/views/member/signUp.jsp
        forward !</p>
<p>단, 반환된 문자열의 시작이 redirect:  구문이면 재요청(redirect) 진행
redirect:/    최상위로 재요청. </p>
<pre><code>&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:bean&gt;</code></pre><hr>
<p>log4j.xml</p>
<pre><code>&lt;!DOCTYPE log4j:configuration PUBLIC &quot;-//APACHE//DTD LOG4J 1.2//EN&quot; &quot;log4j.dtd&quot;&gt; </code></pre><p>해당 부분때문에 에러가 날수도 있음 -&gt; 기본으로 내장되어있는 log4j를 sts가 인식할수 없어서 
원격에서 가지고 오겠다해서 원격 경로를 작성한 구문으로 수정!</p>
<p> Appenders :
출력되는 로그의 형태를 지정하는 부분으로, 로그를 뒤에 계속 남기는 역할을 한다.</p>
<p>Application Loggers </p>
<p>이 패키지 이하에서 출력되는 로그들을 출력하겠다. 
trace &lt; debug &lt; info &lt; warn &lt; error &lt; fatal</p>
<pre><code>&lt;logger name=&quot;edu.kh.comm&quot;&gt;
    &lt;level value=&quot;debug&quot; /&gt;
&lt;/logger&gt;

&lt;!-- 3rdparty Loggers --&gt;
&lt;logger name=&quot;org.springframework.core&quot;&gt;
    &lt;level value=&quot;info&quot; /&gt;
&lt;/logger&gt;

&lt;logger name=&quot;org.springframework.beans&quot;&gt;
    &lt;level value=&quot;info&quot; /&gt;
&lt;/logger&gt;

&lt;logger name=&quot;org.springframework.context&quot;&gt;
    &lt;level value=&quot;info&quot; /&gt;
&lt;/logger&gt;

&lt;logger name=&quot;org.springframework.web&quot;&gt;
    &lt;level value=&quot;info&quot; /&gt;
&lt;/logger&gt;</code></pre><blockquote>
<ul>
<li>POJO 기반 프레임워크
외부 라이브러리 상속 X</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>class
객체를 만들기위한 설계도
-&gt; 객체로 생성 되어야지 기능 수행 가능하다.
--&gt; IOC(제어의 역전, 객체 생명주기를 스프링이 관리)를 이용하여 객체 생성
** 이 때, 스프링이 생성한 객체를 bean 이라고 한다. ** </li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>bean
스프링이 생성한 객체
bean 등록 이란?
== 스플링이 객체로 만들어서 가지고 있어라</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>@Component 
해당 클래스를 bean으로 등록하라고 프로그램에게 알려주는 주석 (Annotation)</li>
</ul>
</blockquote>
<ul>
<li>@Controller
생성된 bean이 Controller임을 명시 + bean 등록
Controller : 요청/응답을 제어하는 역할을 하는 클래스</li>
</ul>
<blockquote>
<ul>
<li>@RequestMapping
클라이언트 요청(url)에 맞는 클래스 or 메서드를 연결 시켜주는 어노테이션<ul>
<li>[ 위치에 따른 해석 ] <ul>
<li><ul>
<li>클래스 레벨 : 공통 주소</li>
</ul>
</li>
<li><ul>
<li>메서드 레벨 : 공통 주소 외 나머지 주소</li>
</ul>
</li>
<li></li>
<li>단, 클래스레벨에 @RequestMapping이 존재하지 않는다면</li>
<li><ul>
<li>메서드 레벨 : 단독 요청 처리 주소</li>
</ul>
</li>
</ul>
</li>
<li>[ 작성법에 따른 해석 ]<ul>
<li></li>
<li>1) @RequestMapping(&quot;url&quot;)</li>
<li>--&gt; 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리</li>
<li></li>
<li>2) @RequestMapping(value = &quot;url&quot;, method = RequestMethod.GET | POST)</li>
<li>--&gt; 요청 방식에 따라 요청 처리함</li>
</ul>
</li>
</ul>
</li>
<li>** 메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우 **<ul>
<li>@GetMapping(&quot;url&quot;)   /   @PostMapping(&quot;url&quot;)  사용하는것이 일반적</li>
<li>(메서드 레벨에서만 작성 가능!)</li>
<li>*/</li>
</ul>
</li>
</ul>
</blockquote>
<blockquote>
<p>파라미터를 얻어오는 방법 1
HttpServletRequest 이용</p>
</blockquote>
<pre><code class="language-java">@RequestMapping(&quot;/login&quot;)
    public String login(HttpServletRequest req) {
        logger.info(&quot;로그인 요청됨&quot;);

        String inputEmail = req.getParameter(&quot;inputEmail&quot;);
        String inputPw = req.getParameter(&quot;inputPw&quot;);

        logger.debug(&quot;inputEmail : &quot; + inputEmail);
        logger.debug(&quot;inputPw : &quot; + inputPw);

        return &quot;redirect:/&quot;; // sendRedirect 안써도 된다. 이게 리타이렉트 구문임.
</code></pre>
<blockquote>
<p>파라미터를 얻어오는 방법 2
-&gt; @RequestParam 어노테이션 사용</p>
</blockquote>
<p>  @RequestParam(&quot;name속성값&quot;)자료형 변수명</p>
<ul>
<li>클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장
--&gt; 어떤 파라미터를 변수에 저장할지는 &quot;name속성값&quot;을 이용해 지정</li>
</ul>
<p>매개변수 지정 시 데이터 타입 파싱을 자유롭게 진행할 수 있음 
ex) String -&gt; int 로 변환</p>
<p>[속성]
 value : input 태그의 name 속성값</p>
<p>required : 입력된 name 속성값이 필수적으로 파라미터에 포함되어야 하는지 지정
                required=true / false (기본값 true)</p>
<p>defaultValue : required 가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정</p>
<pre><code class="language-java">
@RequestMapping(&quot;/login&quot;)
    public String login( @RequestParam(&quot;inputEmail&quot;) String inputEmail,
                        @RequestParam(&quot;inputPw&quot;) String inputPw,
                        @RequestParam(value=&quot;inputName&quot;, required = false, defaultValue = &quot;홍길동&quot;) String inputName
            ) {

        logger.debug(&quot;email: &quot; + inputEmail );
        logger.debug(&quot;pw: &quot; + inputPw );
        logger.debug(&quot;inputName: &quot; + inputName );

        // email 숫자만 입력받는다고 가정
        //logger.debug(inputEmail + 100 );

        return &quot;redirect:/&quot;; 
    }</code></pre>
<blockquote>
<p>요청 시 파라미터를 얻어오는 방법 3
-&gt; @ModelAttribute 어노테이션 사용</p>
</blockquote>
<p> @ModelAttribute VO타입 변수명
-&gt; 파라미터 중 name 속성값이 VO의 필드와 일치하면
 해당 VO 객체의 필드에 값을 세팅</p>
<p><strong>* @ModelAttribute를 이용해서 객체에 값을 직접 담는 경우에 대한 주의 사항 *</strong>
 -- 반드시 필요한 내용</p>
<ul>
<li>VO 기본 생성자</li>
<li>VO 필드에 대한 Setter</li>
</ul>
<hr>
<p> InitFilter.java</p>
<blockquote>
<p>print 구문 사용 대신 
 -&gt; Logger 사용</p>
</blockquote>
<p> Logger 객체 생성 (해당 클래스에 대한 log를 출력하는 객체)</p>
<pre><code class="language-java">private Logger logger = LoggerFactory.getLogger(InitFilter.class);</code></pre>
<p>필터가 생성될 때 실행   </p>
<pre><code class="language-java">public void init(FilterConfig fConfig) throws ServletException {
logger를 이용해서 출력하는 방법

trace - debug - info - warn - error

debug : 개발의 흐름 파악 (이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)

info : 메소드 실행 파악

이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info 가 제일 적절함.

logger.info(&quot;초기화 필터 생성&quot;);
    }</code></pre>
<p>필터가 파괴될 때 실행 (서버는 켜져있는데 백엔드 코드가 수정되었을 때)</p>
<pre><code class="language-java">    public void destroy() {
        logger.info(&quot;초기화 필터 파괴&quot;);
    }</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공단9기]혼자 공부하는 자바 4주차]]></title>
            <link>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 05 Feb 2023 14:10:34 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_-_-kk/post/c0442bee-2177-4252-b0a2-0fc7cabda0d5/image.png" alt=""></p>
<p>p. 550 [직접 해보는 손코딩 코딩] 과정 및 실행 결과 캡처하기</p>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/750d1991-ecd4-4112-a02b-667784cfb052/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/c3219a4d-7265-4c07-9325-f8efaa49cae6/image.png" alt=""></p>
<h1 id="실행-결과">실행 결과</h1>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/fde1b624-7d03-4908-b066-267a70c40aaf/image.png" alt=""></p>
<h1 id="소감">소감</h1>
<p>솔직히 말하자면 잘 모르겠다.
학원에선 이쪽부터 배우지 않아서ㅠ
이렇게 한번만 공부해서는 이해가 되지않는것같다.
한번 더 다시 훑어보는 시간을 가져야 할것같다고 느꼈다.
그래도 새로운 부분을 배울수있어서 재밌었던것 같다 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공단9기]혼자 공부하는 자바 3주차]]></title>
            <link>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 22 Jan 2023 14:30:56 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_-_-kk/post/86e4ce5f-c47c-4116-b91d-0e41ca78a638/image.png" alt=""></p>
<h1 id="노트활용">노트활용</h1>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/dbdb8249-120b-46e6-852f-d863363c0d51/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/_-_-kk/post/fcf1f6ac-b404-46e8-949a-f2f20fbb075a/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/_-_-kk/post/6039a060-a00c-4bca-8650-cd5010e16a78/image.jpg" alt=""></p>
<h1 id="소감">소감</h1>
<p>전 책을 통으로 가지고다니기보다는
제 핸드폰이 폴드라 스캔해주는 어플로 혼공노트를 스캔한다음
노트어플에 넣어서 중요한 부분을 보는 용도로 사용을 했는데요.
혼공노트가 정말 중요한 부분만 간추려나와있어서 얇아가지고 
정말 유용하게 사용했던것 같습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공단9기]혼자 공부하는 자바 2주차]]></title>
            <link>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 15 Jan 2023 13:19:15 GMT</pubDate>
            <description><![CDATA[<p> <img src="https://velog.velcdn.com/images/_-_-kk/post/c78fe3eb-a630-4007-9b7a-5057cacbf544/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/f1c61fcb-2ea4-43ae-b16d-7c9d2fd7cfc2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/7c433f4b-5265-4e07-bb22-8fa091972666/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/bc906e45-462a-41cb-9ba3-2c15670ef55e/image.png" alt=""></p>
<h1 id="실행결과">실행결과</h1>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/941a96cc-a9e0-45cc-81a6-2bf8a73fa52d/image.png" alt=""></p>
<h1 id="소감">소감</h1>
<p>역시....벌써부터 학원진도와 정처기와 혼공단의 싸움이 시작되었습니다.</p>
<p>정처기는 어쩔수없이 공부해야겠지만
제일 문제인 학원진도만 어떻게든 학원에서 다 이해하고 온다면
나머지도 잘 마무리할수있지않을까싶어요.
이번은 이렇게 정말 기본미션만 했지만 다음엔 꼭 선택미션도 하고싶어요.
최선을 다할겁니다.
포기하지않을거에요.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공단9기]혼자 공부하는 자바 1주차]]></title>
            <link>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 04 Jan 2023 13:00:08 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_-_-kk/post/8c6b9871-ef41-4ec1-8456-908b2345c480/image.png" alt=""></p>
<h2 id="기본미션">기본미션</h2>
<blockquote>
<p>JDK 설치 화면 인증하기</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_-_-kk/post/f5738c79-4502-4d7d-a740-f5681cd079b9/image.png" alt=""></p>
<h2 id="선택미션">선택미션</h2>
<blockquote>
<p>학습 스케줄 직접 짜고 공유하기</p>
</blockquote>
<p>하루에 한챕터씩 강의듣기.힘들면 이틀에 나눠서 듣기.
정리본은 새로 작성하기보다는 학원에서 배운내용들이 아직 임시저장되어있기때문에
그것들을 정리하면서 강의보기.
책에 나와있는 손코딩문제는 빠짐없이 손코딩하기.
학원에서 했던 실습문제가 있다면 코드를 보지않고 다시 풀기.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공단9기] 시!작!]]></title>
            <link>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@_-_-kk/%ED%98%BC%EA%B3%B5%EB%8B%A89%EA%B8%B0-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Wed, 04 Jan 2023 12:30:12 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_-_-kk/post/b4fea696-6252-49d9-b385-ff578b67eb1d/image.png" alt=""></p>
<p>예전에 신청을 한적이 있었다.
근데 그때 페북계정에 문제가 생겨서 결국 중간에 그만둘수밖에 없었는데
이제 페북계정문제도 해결되었고
게다가 정말 기간이 딱 자바진도가 끝난 시점이다!!!
시기가 아주 좋아서 또 신청을 한것도 있다 ㅎ
자바복습할겸 열심히 최선을 다해야지  ㅠ  </p>
]]></description>
        </item>
    </channel>
</rss>