<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>idk_a_word.log</title>
        <link>https://velog.io/</link>
        <description>I m a Noob web develpoer.</description>
        <lastBuildDate>Fri, 06 Oct 2023 00:59:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. idk_a_word.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/idk_a_word" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Tomcat SSL 인증서 적용]]></title>
            <link>https://velog.io/@idk_a_word/Tomcat-SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%A0%81%EC%9A%A9</link>
            <guid>https://velog.io/@idk_a_word/Tomcat-SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%A0%81%EC%9A%A9</guid>
            <pubDate>Fri, 06 Oct 2023 00:59:56 GMT</pubDate>
            <description><![CDATA[<h2 id="tomcat-ssl-인증서-적용-오류">Tomcat SSL 인증서 적용 오류</h2>
<ul>
<li>적용 환경: CentOS 7.9 + Tomcat 9.0.6x</li>
</ul>
<h3 id="웹-사이트-ssl-인증서-적용-시-오류-발생">웹 사이트 SSL 인증서 적용 시 오류 발생</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/idk_a_word/post/1e30d077-247a-4f5e-83c8-820872e9e0a8/image.png" alt=""></li>
<li>Caused by: java.io.IOException: Alias name [server] does not identify a key entry ...</li>
<li>대게 이 오류의 경우 KeyStore 설정 오류라고 한다. 이 말은 즉, Java KeyStore에서 지정한 별칭(alias)이 올바른 키 항목을 가리키지 않을 때라고 하는데 KeyStore 파일에 별칭이 있는지, 별칭에 해당하는 키 항목이 올바른지 확인을 해야한다.</li>
<li>나의 경우 고객사에서 발급받은 .jks 확장자의 SSL 인증서와 패스워드를 받았고 별다른 내용은 듣지 못했다..</li>
</ul>
<h3 id="해결-방법">해결 방법</h3>
<ul>
<li>우선 인증서 파일의 별칭(alisa)을 확인할 것.</li>
<li>명령 프롬프트 창 실행 &gt; 명령어 실행 &gt; keytool -list -keystore &quot;ssl인증서 파일명&quot; (쌍따옴표(&quot;) 생략)</li>
<li>저장소 비밀번호 입력란에 인증서 패스워드 입력
<img src="https://velog.velcdn.com/images/idk_a_word/post/8c7c9735-8798-4050-b311-344a9637e310/image.png" alt=""></li>
<li>패스워드 입력 후 아래에 나오는 내용 중 alias 명을 확인(alias 명을 바꾸는 것도 가능)
<img src="https://velog.velcdn.com/images/idk_a_word/post/6a5a1173-7683-43a1-b261-bff84c9fbdad/image.png" alt=""></li>
<li>프로젝트의 server.xml 수정. certificateKeyAlias 속성을 추가하면서 alias 명 입력.
<img src="https://velog.velcdn.com/images/idk_a_word/post/03afe742-98c9-4b87-aaf9-b9d28e6e0c7a/image.png" alt=""></li>
<li>이 방법으로 오류 해결</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Annotation]]></title>
            <link>https://velog.io/@idk_a_word/Spring-Annotation</link>
            <guid>https://velog.io/@idk_a_word/Spring-Annotation</guid>
            <pubDate>Fri, 27 Jan 2023 06:29:05 GMT</pubDate>
            <description><![CDATA[<h2 id="annotation이란">Annotation이란?</h2>
<ul>
<li>자바 소스코드에 추가하여 특별한 기능을 사용할 수 있는 메타데이터의 일종이다. 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고 Bean을 주입하기도 하며 자동으로 getter나 setter를 생성하기도 한다. 이러한 Annotation을 통하여 코드량이 감소하고 유지보수가 용이하며, 생산성이 증가한다.</li>
</ul>
<h2 id="대표적인-annotation과-역할">대표적인 Annotation과 역할</h2>
<ul>
<li><p>@Component</p>
<ul>
<li>생성한 Class의 Bean으로 등록할 때 사용하는 Annotation이다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록한다.</li>
</ul>
</li>
<li><p>@Bean</p>
<ul>
<li>제어가 불가능한 외부 라이브러리 같은 것들을 Bean으로 만들 때 사용한다.</li>
</ul>
</li>
<li><p>@Controller</p>
<ul>
<li>Spring에 해당 Class가 Controller의 역할을 한다고 명시한다.</li>
</ul>
</li>
<li><p>@RequestMapping</p>
<ul>
<li><p>@RequestMapping(value=&quot;&quot;)와 같은 형태로 작성하며 요청 들어온 URI의 요청과 Annotation value값이 일치하면 해당 클래스나 메소드가 실행된다. Controller 객체 안의 메서드와 클래스에 적용 가능하다.</p>
<ul>
<li>Class 단위에 사용하면 하위 메서드에 모두 적용된다.</li>
<li>메서드에 적용되면 해당 메서드에서 지정한 방식으로 URI를 처리한다.<pre><code>@Controller                        // IdkController Class는 Controller 역할을 한다.
@RequestMapping(&quot;/idk&quot;)                // IdkController Class는 /idk로 들어오는 요청을 모두 처리한다.
public class IdkController {
@RequestMapping(method=RequestMethod.GET)
public String getIdk(String word) {
// GET Method, /idk 요청 처리
}
</code></pre></li>
</ul>
<p>@RequestMapping(method=RequestMethod.POST)
public String addIdk(String word) {</p>
<pre><code>// POST Method, /idk 요청 처리</code></pre><p>}</p>
<p>@RequestMapping(&quot;/a_word&quot;)
public String addIdk(String word) {</p>
<pre><code>// GET Method, /idk/a_word 요청 처리
// 요청 처리 Method 생략 시 Default Method = GET</code></pre><p>}
}
```</p>
</li>
</ul>
</li>
<li><p>@RequestParam</p>
<ul>
<li><p>URL에 전달되는 파라미터를 메서드의 인자와 매칭시켜 파라미터를 받아 처리한다. JSON 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킨다.</p>
<pre><code>@Controller
@RequestMapping(&quot;/idk&quot;)
public class IdkController {
  @RequestMapping(method=RequestMethod.GET)
  public String getIdk(@RequestParam String id, @RequestParam(name=&quot;nick&quot;) String nickName {
      // GET Method, /idk 요청 처리
      // 요청: https://velog.io/idk?id=noob&amp;nick=babo
      String result = idk + &quot; is &quot; + nickName + &quot;.&quot;;
      ...
  }
}

result = noob is babo.</code></pre></li>
</ul>
</li>
<li><p>@RequestBody</p>
<ul>
<li><p>Body에 전달되는 데이터를 메소드의 인자와 매칭시켜 데이터를 받아서 처리할 때 사용한다. 클라이언트가 보내는 HTTP 요청 본문을 Java 오브젝트로 변환한다.(클라이언트가 Body에 JSON or XML과 같은 형태로 값을 전송하면 해당 내용을 Java 오브젝트로 변환)</p>
<pre><code>IDK = {id:Noob, old: 29}

@Controller
@RequestMapping(&quot;/idk&quot;)
public class IdkController {
  @RequesMapping(method=RequestMethod.POST)
  public String addIdk(@RequestBody IDK idk) {
      String id = idk.id;
      String old = idk.old;
      ...
  }
}

result: id = Noob, old = 29</code></pre></li>
</ul>
</li>
<li><p>@ResponseBody</p>
<ul>
<li><p>메서드에서 리턴되는 값이 view로 출력되지 않고 HTTP Response Body에 직접 사용된다. return 시에 JSON, XML과 같은 데이터를 리턴한다.</p>
<pre><code>@Controller
@RequestMapping(&quot;/idk&quot;)
public class IdkController {
  @RequesMapping(method=RequestMethod.POST)
  @ResponseBody
  public String getIdk(@RequestParam String id, @RequestParam(name=&quot;nick&quot;) String nickName) {
      // 요청: https://velog.io/idk?id=noob&amp;nick=babo
      IDK idk = new IDK();
      idk.setId(id);
      idk.setNickName(nickName);
      return idk;
  }
}

result: IDK = { id: noob, nickName: babo }</code></pre></li>
</ul>
</li>
<li><p>@Autowired</p>
<ul>
<li>Spring Framework에서 Bean 객체를 주입받기 위해 사용한다. Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후 없으면 Name 확인) Bean을 주입한다.</li>
</ul>
</li>
<li><p>@GetMapping</p>
<ul>
<li>@RequestMapping(Method=RequestMethod.GET)과 같은 역할을 한다.<pre><code>@Controller
@RequestMapping(&quot;/idk&quot;)
public class IdkController {
  @GetMapping(&quot;/&quot;)
  public String getIdk(Idk idk) {
      // Get Method, /idk 요청 처리
  }
}</code></pre></li>
</ul>
</li>
<li><p>@PostMapping</p>
<ul>
<li>@RequestMapping(Method=RequestMethod.POST)과 같은 역할을 한다.<pre><code>@Controller
@RequestMapping(&quot;/idk&quot;)
public class IdkController {
  @PostMapping(&quot;/&quot;)
  public String addIdk(Idk idk) {
      // Post Method, /idk 요청 처리
  }
}</code></pre></li>
</ul>
</li>
<li><p>@Test</p>
<ul>
<li>JUnit에서 테스트 할 대상을 표시한다.<pre><code>@Test
public void testIdk() {
  // 테스트 내용
}</code></pre></li>
</ul>
</li>
</ul>
<p><span style="color: grey;font-size: 15px;">출처. &quot;스프링(Spring)에서 자주 사용하는 Annotation 개념 및 예제 정리&quot;, <a href="https://melonicedlatte.com/2021/07/18/182600.html">https://melonicedlatte.com/2021/07/18/182600.html</a>, (2023.01.27)</span></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring?]]></title>
            <link>https://velog.io/@idk_a_word/Spring</link>
            <guid>https://velog.io/@idk_a_word/Spring</guid>
            <pubDate>Thu, 26 Jan 2023 06:02:16 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/idk_a_word/post/8385bdf0-870d-4ef0-b035-6e9d6a553b1f/image.png" alt=""></p>
<h2 id="spring-framework란">Spring Framework란?</h2>
<ul>
<li>Spring은 자바 기반 웹 어플리케이션을 만들 수 있는 Framework(프레임워크)이다. 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로써 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다.</li>
<li>엔터프라이즈급 개발이란 뜻대로만 풀이하면 기업을 대상으로 하는 개발이라는 말이다. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컫는다.</li>
<li>Spring Framework는 경량 컨테이너로 자바 객체를 담고 직접 관리한다. 객체의 생성 및 소멸 그리고 라이프 사이클을 관리하며 언제든 Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다. 이는 Spring이 IoC기반의 Framework임을 의미한다.</li>
</ul>
<h2 id="spring-특징">Spring 특징</h2>
<ul>
<li>자바 객체와 라이브러리들을 관리해주며 Tomcat과 같은 WAS가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있다.</li>
<li>경량 컨테이너로 자바 객체를 직접 Spring안에서 관리한다. 객체의 생성 및 소멸과 같은 생명주기를 관리하며 Spring 컨테이너에서 필요한 객체를 가져와 사용한다.</li>
<li>Spring의 가장 큰 특징으로 제어의 역전(IoC)과 의존성 주입(DI)이 있다.<ul>
<li>제어의 역전(IoC, Iversion of Control)<ul>
<li>일반적으로 처음에 배우는 자바프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 조작하는 작업을 한다. 즉, 모든 작업을 사용자가 직접 제어하는 구조이다. 예를들어 A객체에서 B객체에 있는 메소드를 사용하고 싶으면 B객체를 직접 A객체 내에서 생성하고  메소드를 호출한다.</li>
<li>하지만 IoC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 경우 사용자는 객체를 직접 생성하지 않고 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 제어의 역전(IoC)이라 한다.</li>
<li>Spring IoC란 <strong>Spring에게 제어를 위임하여 Spring이 만든 객체를 주입 -&gt; 의존성 객체의 메소드 호출</strong> 구조이다. Spring에서는 모든 의존성 객체를 Spring이 실행될 때 만들어주고 필요한 곳에 주입해준다.</li>
</ul>
</li>
<li>의존성 주입(DI, Dependency Injection)<ul>
<li>어떤 객체B를 사용하는 주체A가 객체B를 직접 생성하는게 아니라 <strong>객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체A에 주입시켜주는 방식이다.</strong> 사용하는 주체A가 사용하려는 객체B를 직접 생성하는 경우 의존성(변경사항이 있는 경우 서로에게 영향을 많이 준다.)이 높아진다. 하지만 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어들게 된다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><span style="font-size:15px;color:gray;">출처. &quot;스프링(Spring), 스프링 부트(Spring Boot)란? 개념 정리&quot;, <a href="https://melonicedlatte.com/2021/07/11/174700.html">https://melonicedlatte.com/2021/07/11/174700.html</a>, (2023.01.26)</span></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[URI URL]]></title>
            <link>https://velog.io/@idk_a_word/URI-URL</link>
            <guid>https://velog.io/@idk_a_word/URI-URL</guid>
            <pubDate>Thu, 26 Jan 2023 05:59:17 GMT</pubDate>
            <description><![CDATA[<h2 id="uri-url-urn-구조-비교">URI URL URN 구조 비교</h2>
<p><img src="https://velog.velcdn.com/images/idk_a_word/post/f0b1cce2-c499-44ee-9a8b-44489c768ce4/image.png" alt=""></p>
<ul>
<li>Scheme: 리소스에 접근하는 데 사용할 프로토콜</li>
<li>Host: 접근할 대상(서버)의 호스트 명</li>
<li>Path: 접근할 대상(서버)의 경로에 대한 상세 정보</li>
</ul>
<h2 id="uri란">URI란?</h2>
<ul>
<li><p>Uniform Resource Identifier의 약자로 통합 자원(리소스) 식별자이다. 즉, URI는 인터넷 상의 리소스 &quot;자원 자체&quot;를 식별하는 고유한 문자열 시퀀스이다.</p>
<div style="font-size: 15px;">cf. Uniform이란? 리소스를 식별하는 통일된 방식을 말한다.</div>
<div style="font-size: 15px;">cf. Resouce란? URI로 식별이 가능한 모든 종류의 자원(웹 브라우저 파일 및 그 이외의 리소스 포함)을 지칭한다.</div>
<div style="font-size: 15px;">cf. Identifier란? 다른 항목과 구분하기 위해 필요한 정보를 뜻한다.</div>

</li>
</ul>
<h2 id="url이란">URL이란?</h2>
<ul>
<li><p>Uniform Resource Locator의 약자로 네트워크상에서의 통합 자원의 &#39;위치&#39;를 나타내기 위한 규약이다. 즉, 자원 식별자와 위치를 동시에 나타낸다.</p>
</li>
<li><p>웹 사이트 주소뿐만아니라 컴퓨터 네트워크 상의 자원을 모두 나타내는 표기법으로 특정 웹 페이지의 주소에 접속하기 위해서는 웹 사이트의 주소뿐만아니라 프로토콜을 함께 알아야 접속이 가능한데 이들을 모두 나타내는 것이 URL이다.</p>
</li>
</ul>
<h2 id="uri와-url의-차이">URI와 URL의 차이</h2>
<ul>
<li>URI = 식별자 / URL = 식별자 + 위치</li>
<li>리소스의 이름만을 나타내기 때문에 <a href="http://www.example.com%EC%9D%80">www.example.com은</a> URI이고</li>
<li>반면에 이름과 더불어 어떻게 도달할 수 있는지 위치까지 함께 나타내기 때문에(프로토콜 https 포함) <a href="https://www.example.com%EC%9D%80">https://www.example.com은</a> URL이다.<br></li>
<li>URL은 일종의 URI이다. 즉 URI가 더 포괄적인 개념이며 URL은 이 안에 포함된다.<br></li>
<li>URL은 프로토콜과 결합한 형태이다.<div style="font-size: 15px;">cf. 프로토콜이란 리소스에 접근하는 방법을 지정하는 방식이다. 일반적으로 https, http, ftp, file 등이 있다.</div>


</li>
</ul>
<h2 id="urn이란">URN이란?</h2>
<ul>
<li>Uniform Resouce Name의 약자로 리소스의 위치, 프로토콜, 호스트 등과는 상관없이 각 자원에 이름을 부여한 것이다.</li>
<li>URN은 리소스의 위치, 프로토콜, 호스트 등과는 상관없이 각 자원에 이름을 부여한 것으로 URL은 어떤 특정 서버에 있는 웹 문서를 가리키는 반면, URN은 웹 문서의 물리적인 위치와 상관없이 웹 문서 자체를 나타낸다. 개별 자원에 식별자를 부여하게 되면 해당 정보에 대한 URN은 일정하게 유지되며 웹 문서가 다른 웹 서버로 이동하거나 주소가 바뀌는 등 물리적 위치가 변경되더라도 해당 문서를 찾을 수 있다.</li>
</ul>
<p><span style="color: grey;font-size: 15px;">출처. elancer, &quot;URI와 URL, 어떤 차이점이 있나요?&quot;, <a href="https://www.elancer.co.kr/blog/view?seq=74">https://www.elancer.co.kr/blog/view?seq=74</a>, (2023.01.26)</span></p>
]]></description>
        </item>
    </channel>
</rss>