<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>SangHun</title>
    <description>Build a Jekyll blog in minutes, without touching the command line.</description>
    <link>https://parksanghun.github.io/</link>
    <atom:link href="https://parksanghun.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 15 Sep 2019 15:18:28 +0900</pubDate>
    <lastBuildDate>Sun, 15 Sep 2019 15:18:28 +0900</lastBuildDate>
    <generator>Jekyll v3.8.5</generator>
    
      
      <item>
        <title>Difference between Java SE/EE/ME?</title>
        <description>
          &lt;h3 id=&quot;difference-between-java-seeeme&quot;&gt;Difference between Java SE/EE/ME?&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;원티드 이력서를 작성하다가 자바 개발 언어가 Core, EE, SE로 나뉘어 있어 명확히 하고자 정리&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;search&quot;&gt;Search&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/&quot;&gt;oracle doc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition&quot;&gt;wiki Java_Platform,_Enterprise_Edition&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/15774924/just-what-is-java-ee-really&quot;&gt;just-what-is-java-ee-really&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;java-platform-standard-edition-java-se&quot;&gt;Java Platform, Standard Edition (Java SE)&lt;/h4&gt;
&lt;p&gt;Java SE lets you develop and deploy Java applications on desktops and servers. Java SE and component technologies offer the rich user interface, performance, versatility, portability, and security that today’s applications require.&lt;/p&gt;

&lt;h4 id=&quot;java-embedded&quot;&gt;Java Embedded&lt;/h4&gt;
&lt;p&gt;Java ME Embedded is designed for resource-constrained devices like wireless modules for M2M, industrial control, smart-grid infrastructure, environmental sensors and tracking, and more.&lt;/p&gt;

&lt;h4 id=&quot;java-platform-enterprise-edition-java-ee&quot;&gt;Java Platform, Enterprise Edition (Java EE)&lt;/h4&gt;
&lt;p&gt;Java EE provides an API and runtime environment for developing and running large, multi-tiered, reliable, and secure enterprise applications that are portable and scalable and that integrate easily with legacy applications and data.&lt;/p&gt;

&lt;h4 id=&quot;wiki&quot;&gt;Wiki&lt;/h4&gt;
&lt;p&gt;Java Enterprise Edition (Java EE), formerly Java 2 Platform, Enterprise Edition (J2EE), currently Jakarta EE, is a set of specifications, extending Java SE 8 with specifications for enterprise features such as distributed computing and web services. Java EE applications are run on reference runtimes, that can be microservices or application servers, which handle transactions, security, scalability, concurrency and management of the components it is deploying.&lt;/p&gt;

&lt;p&gt;Java EE is defined by its specification. The specification defines APIs (application programming interface) and their interactions. As with other Java Community Process specifications, providers must meet certain conformance requirements in order to declare their products as Java EE compliant.&lt;/p&gt;

&lt;p&gt;Examples of contexts in which Java EE referencing runtimes are used are: e-commerce, accounting, banking information systems.&lt;/p&gt;

&lt;h3 id=&quot;jakarta-ee-architecture-diagram&quot;&gt;Jakarta EE Architecture Diagram&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/platform/8/platform-spec-8.html#architecture&quot;&gt;image from jakarta ee site&lt;/a&gt;
&lt;img src=&quot;/images/jakartaEEArchitectureDiagram.png&quot; alt=&quot;jakartaEEArchitectureDiagram&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;정의만 놓고 보면 EE의 기능을 JDK설치시 대부분 가능하기 때문에 혼동이 오는데 이분법적으로 EE만 사용하다는 개념보다는 JAVA SE의 기능을 보다 확장시킨 것이 EE이며 그것에 대한 상세 명세들을 제공한다라고 생각하면 될 듯…&lt;/p&gt;
&lt;/blockquote&gt;

        </description>
        <pubDate>Sun, 15 Sep 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/09/15/JavaDifferenceEESE/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/09/15/JavaDifferenceEESE/</guid>
        
        <category>java ee se</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Wrapper Class &amp; Autoboxing</title>
        <description>
          &lt;h4 id=&quot;입출력과-데이터-stream-개념&quot;&gt;입출력과 데이터 Stream 개념&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;다양한 장비들과 통신을 하는 것을 입출력이라고 하고, java에서는 java.io 패키지에 이런 것과 관련된 클래스를 만들어 두었다&lt;/li&gt;
  &lt;li&gt;java에서 만들어둔 java.io.InputStream은 읽어들이는 빨대, java.io.OutputStream은 내보내는 빨대&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;문자-인코딩&quot;&gt;문자 인코딩&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;인코딩(encoding)이라는 용어는 사람이 이해하는 문자 1글자를 컴퓨터에서 어떻게 표현하는 약속한 방식&lt;/li&gt;
  &lt;li&gt;한 글자를 어떻게 표현해야 “효율적”으로 표현될 수 있는가에 따른 고민의 결과&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;입출력-속도-향상--버퍼의-사용&quot;&gt;입출력 속도 향상 : 버퍼의 사용&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;한 byte씩 읽거나 한 문자(char)씩 읽는 것은 컴퓨터 입장에서 보면 속도 측면에서 느리게 된다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;unicode-vs-utf-8&quot;&gt;Unicode vs UTF-8&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;The development of Unicode was aimed at creating a new standard for mapping the characters in a great majority of languages that are being used today, along with other characters that are not that essential but might be necessary for creating the text. UTF-8 is only one of the many ways that you can encode the files because there are many ways you can encode the characters inside a file into Unicode.&lt;/li&gt;
  &lt;li&gt;
    &lt;table&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;Read more: Difference Between Unicode and UTF-8&lt;/td&gt;
          &lt;td&gt;Difference Between&lt;/td&gt;
          &lt;td&gt;Unicode vs UTF-8 http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/#ixzz5clWLlsnk&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;nio-vs-io&quot;&gt;NIO VS IO&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;NIO allows you to manage multiple channels (network connections or files) using only a single (or few) threads, but the cost is that parsing the data might be somewhat more complicated than when reading data from a blocking stream.&lt;/li&gt;
  &lt;li&gt;If you need to manage thousands of open connections simultanously, which each only send a little data, for instance a chat server, implementing the server in NIO is probably an advantage. Similarly, if you need to keep a lot of open connections to other computers, e.g. in a P2P network, using a single thread to manage all of your outbound connections might be an advantage. This one thread, multiple connections design is illustrated in this diagram:&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;출처&quot;&gt;출처&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/java-nio-vs-io&quot;&gt;java-nio-vs-io&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://joochang.tistory.com/78&quot;&gt;IO 와 NIO&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/38698182/close-java-8-stream&quot;&gt;IO 와 NIO&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

        </description>
        <pubDate>Wed, 16 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/16/JavaIOStream/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/16/JavaIOStream/</guid>
        
        <category>java stream</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Wrapper Class &amp; Autoboxing</title>
        <description>
          &lt;h4 id=&quot;wrapper-클래스란&quot;&gt;Wrapper 클래스란?&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;원래 자료형에다가 랩을 씌운 클래스라고 하여 Wrapper 클래스인 것이다&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;기본형 타입&lt;/th&gt;
      &lt;th&gt;wrapper class&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;byte&lt;/td&gt;
      &lt;td&gt;Byte&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;short&lt;/td&gt;
      &lt;td&gt;Short&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;int&lt;/td&gt;
      &lt;td&gt;Integer&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;long&lt;/td&gt;
      &lt;td&gt;Long&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;float&lt;/td&gt;
      &lt;td&gt;Float&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;double&lt;/td&gt;
      &lt;td&gt;Double&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;char&lt;/td&gt;
      &lt;td&gt;Charater&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;boolean&lt;/td&gt;
      &lt;td&gt;Boolean&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;void&lt;/td&gt;
      &lt;td&gt;Void&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;참고&quot;&gt;참고&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://hoonmaro.tistory.com/19&quot;&gt;자바 메모리 구조&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://againsee.com/2018/06/15/java-datatype/&quot;&gt;java datatype&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;


        </description>
        <pubDate>Thu, 10 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/10/JavaWrapperAutoboxing/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/10/JavaWrapperAutoboxing/</guid>
        
        <category>java autoboxing wrapper class</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Stream</title>
        <description>
          &lt;h4 id=&quot;java-stream&quot;&gt;Java Stream&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;JAVA 8에서 추가된 기능&lt;/li&gt;
  &lt;li&gt;스트림을 이용하면 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다)으로 컬렉션 데이터를 처리할 수 있다&lt;/li&gt;
  &lt;li&gt;스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;

        </description>
        <pubDate>Thu, 10 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/10/JavaStream/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/10/JavaStream/</guid>
        
        <category>java stream</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Generic</title>
        <description>
          &lt;h3 id=&quot;lesson-generics&quot;&gt;Lesson: Generics&lt;/h3&gt;
&lt;p&gt;In any nontrivial software project, bugs are simply a fact of life. Careful planning, programming, and testing can help reduce their pervasiveness, but somehow, somewhere, they’ll always find a way to creep into your code. This becomes especially apparent as new features are introduced and your code base grows in size and complexity.&lt;/p&gt;

&lt;p&gt;Fortunately, some bugs are easier to detect than others. Compile-time bugs, for example, can be detected early on; you can use the compiler’s error messages to figure out what the problem is and fix it, right then and there. Runtime bugs, however, can be much more problematic; they don’t always surface immediately, and when they do, it may be at a point in the program that is far removed from the actual cause of the problem.&lt;/p&gt;

&lt;p&gt;Generics add stability to your code by making more of your bugs detectable at compile time.&lt;/p&gt;

&lt;p&gt;Generics was added in Java 5 to provide compile-time type checking and removing risk of ClassCastException that was common while working with collection classes. The whole collection framework was re-written to use generics for type-safety. Let’s see how generics help us using collection classes safely.&lt;/p&gt;

&lt;h3 id=&quot;why-use-generics&quot;&gt;Why Use Generics?&lt;/h3&gt;

&lt;p&gt;Code that uses generics has many benefits over non-generic code:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Stronger type checks at compile time.&lt;/p&gt;

    &lt;p&gt;A Java compiler applies strong type checking to generic code and issues errors if the code violates type safety. Fixing compile-time errors is easier than fixing runtime errors, which can be difficult to find.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Elimination of casts.&lt;/p&gt;

    &lt;p&gt;The following code snippet without generics requires casting:&lt;/p&gt;
    &lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;When re-written to use generics, the code does not require casting:
    &lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;// no cast&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Enabling programmers to implement generic algorithms.
By using generics, programmers can implement generic algorithms that work on collections of different types, can be customized, and are type safe and easier to read.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;the-most-commonly-used-type-parameter-names-are&quot;&gt;The most commonly used type parameter names are:&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;E - Element (used extensively by the Java Collections Framework)
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;what-is-the-difference-between--e-and-t-for-java-generics&quot;&gt;What is the difference between ‘?’, ‘E’, and ‘T’ for Java generics?&lt;/h3&gt;
&lt;p&gt;there’s no difference between the first two - they’re just using different names for the type parameter (E or T).&lt;/p&gt;

&lt;p&gt;The third isn’t a valid declaration - ? is used as a wildcard which is used when providing a type argument, e.g. List&amp;lt;?&amp;gt; foo = … means that foo refers to a list of some type, but we don’t know what.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The Diamond&lt;/p&gt;

    &lt;p&gt;In Java SE 7 and later, you can replace the type arguments required to invoke the constructor of a generic class with an empty set of type arguments (&amp;lt;&amp;gt;) as long as the compiler can determine, or infer, the type arguments from the context. This pair of angle brackets, &amp;lt;&amp;gt;, is informally called the diamond. For example, you can create an instance of Box&lt;Integer&gt; with the following statement:&lt;/Integer&gt;&lt;/p&gt;
    &lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Box&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;integerBox&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Box&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Multiple Bounds&lt;/p&gt;

    &lt;p&gt;The preceding example illustrates the use of a type parameter with a single bound, but a type parameter can have multiple bounds:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A type variable with multiple bounds is a subtype of all the types listed in the bound. If one of the bounds is a class, it must be specified first. For example:&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;C&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bound&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;specified&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;error:&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// compile-time error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

        </description>
        <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/08/JavaGeneric/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/08/JavaGeneric/</guid>
        
        <category>java generic</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java CollectionFramework</title>
        <description>
          &lt;h3 id=&quot;컬렉션이란&quot;&gt;컬렉션이란?&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;배열과 같이 여러 개의 데이터를 담을 수 있도록 Java에서 특별히 제작된 클래스들&lt;/li&gt;
  &lt;li&gt;“자료구조”를 구현한 클래스&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;자료구조란&quot;&gt;자료구조란?&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;“자료(데이터)의 집합”이라는 뜻으로 데이터들을 어떤 형태로 저장해 둘 것인가에 대한 미리 연구해놓은 형태들&lt;/li&gt;
  &lt;li&gt;리스트(list), 스택(stack), 큐(queue), 집합(set), 해쉬테이블(hash table) 등이 있다&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;스택&quot;&gt;스택&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;데이터를 “위로 쌓아두는 형태의 통”&lt;/li&gt;
  &lt;li&gt;차곡 차곡 저장하고 위에서부터 순서대로 보는 형태&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;큐&quot;&gt;큐&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;“큐”라는 통에 데이터를 담아두게 되면 맨 먼저 저장한 것부터 순서대로 꺼내 쓰는 형태&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;리스트&quot;&gt;리스트&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;넣은 순서대로 번호를 붙여서 저장하는 통으로 어느 위치에 있는지 index 번호(목록번호)를 가지고 저장된 데이터를 조회&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;다른-사람-공부&quot;&gt;다른 사람 공부&lt;/h4&gt;
&lt;p&gt;큐는 리턴 타입이 있다?&lt;/p&gt;


        </description>
        <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/08/JavaCollectionFramework/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/08/JavaCollectionFramework/</guid>
        
        <category>java collection</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Regular Expression</title>
        <description>
          &lt;h3 id=&quot;정규-표현식의-기초-메타-문자&quot;&gt;정규 표현식의 기초, 메타 문자&lt;/h3&gt;
&lt;p&gt;메타 문자의 종류&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.^$*+?{}[]₩|()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;문자-클래스&quot;&gt;문자 클래스&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;[abc] : ‘a,b,c’ 중 한개의 문자와 매치를 뜻함(문자열 중 하나라도 있으면 yes)&lt;/li&gt;
  &lt;li&gt;a.b : a와 b 사이에 줄바꿈 문자를 제외한 어떤 문자가 들어가도 모두 매치(주의!!! 사이 문자가 하나라도 있어야함)&lt;/li&gt;
&lt;/ul&gt;


        </description>
        <pubDate>Sun, 06 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/programming/2019/01/06/RegularExpression/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/programming/2019/01/06/RegularExpression/</guid>
        
        <category>regular expression</category>
        
        
        <category>programming</category>
        
      </item>
      
    
      
      <item>
        <title>There's more to life than being happy</title>
        <description>
          &lt;h3 id=&quot;행복과-삶의-의미&quot;&gt;행복과 삶의 의미&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;인생의 목적이란 행복을 추구하는 것이라고 믿고 그것들을 가졌으나 만족스럽지 않고 늘 근심이 가득했고, 방황했다&lt;/li&gt;
  &lt;li&gt;자료에 따르면 행복을 좇는 사람은 결국 불행하게 된다고 한다&lt;/li&gt;
  &lt;li&gt;우리의 삶은 객관적으로 나아지고 있지만 더 많은 사람들이 희망을 잃고 우울하고 외롭다고 느낀다&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;사람들이 절망하게 되는 원인은 행복하지 않기 때문이 아니라고 한다 다른 무언가가 부족하기 때문이다. 그건 바로 삶의 의미다&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;삶의 의미란 누군가와 유대감을 느끼고 타인을 위해 봉사하며 자신 안에 있는 최고를 끌어내는 것&lt;/li&gt;
  &lt;li&gt;우리는 행복해져야 한다고 강박적으로 믿는 문화에서 살고 있다 하지만 삶의 의미를 찾아야 삶이 충만해진다&lt;/li&gt;
  &lt;li&gt;삶의 의미를 갖는 사람들은 더 회복력이 있고 학교와 직장에서 잘 해내며 심지어 더 오래 산다고 한다&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;의미있는-삶을-구성하는-4개의-기둥기준&quot;&gt;의미있는 삶을 구성하는 4개의 기둥(기준)&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;소속감(유대감) - Belonging
    &lt;ul&gt;
      &lt;li&gt;가치있다고 생각하는 사람들 사이의 관계에서 생겨난다&lt;/li&gt;
      &lt;li&gt;진정한 유대감은 사랑하는 마음이 있을 때 생긴다&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;&lt;em&gt;사랑으로 관계를 이끈다면 서로를 연결하는 끈이 생기고 서로를 지지하게 된다&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;목적 - purpose
    &lt;ul&gt;
      &lt;li&gt;삶의 목적이란 자신의 원하는게 아니라 자신이 무언가를 내어주는 것이다&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;&lt;em&gt;목적의 중요한 점은 여러분의 강점을 이용해 타인을 돕는다는 것이다&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;우리가 어떤 일에 기여해서 자신이 꼭 필요한 존재라는 느끼는 것&lt;/li&gt;
      &lt;li&gt;사람들은 자신들이 가치있는 무언가를 할 수 없을 때 방황한다&lt;/li&gt;
      &lt;li&gt;목적은 살아갈 이유를 제공하고 그 “이유”라는 것은 앞으로 나아가는 원동력이 되어준다&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;초월성 - transcendence
    &lt;ul&gt;
      &lt;li&gt;초월성의 상태를 자주 경험하게 되진 않지만 바쁜 일상에서 기쁘게 하는 순간이다&lt;/li&gt;
      &lt;li&gt;자신은 사라지는 듯한 느낌을 받는다&lt;/li&gt;
      &lt;li&gt;좀 더 높은 현실과 연결되어 있다고 느끼게 된다&lt;/li&gt;
      &lt;li&gt;사람마다 초월성을 느끼는 순간 -&amp;gt; 예술 작품을 감상할 때 경험, 교회에서 경험, 작가의 경우 글을 쓸 때 등등…&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;스토리텔링 - storytelling
    &lt;ul&gt;
      &lt;li&gt;일상에서 이야기를 만들어내면 삶을 명확히 바라볼 수 있다&lt;/li&gt;
      &lt;li&gt;현재의 자신이 어떻게 형성되었는지 이해하게 된다&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;&lt;em&gt;의미있는 삶을 이끄는 사람들은 그들의 삶 속에서 벌어지는 이야기를 회복, 성장, 사랑으로 정리하여 들려준다&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;자신의 삶을 찬찬히 들여다보면서 자신이 겪은 일들이 자신을 어떻게 형성하게 되었는지 잃은 것은 무엇인지, 또 얻게된 것은 무엇인지 분명하게 하면서 방식을 찾아간다&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;출처 - &lt;a href=&quot;https://www.ted.com/talks/emily_esfahani_smith_there_s_more_to_life_than_being_happy?referrer=playlist-how_to_notice_and_build_joy_into_your_life&quot;&gt;There’s more to life than being happy&lt;/a&gt;&lt;/p&gt;

        </description>
        <pubDate>Sat, 05 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/ted/2019/01/05/ThereIsMoreToLifeThanBeingHappy/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/ted/2019/01/05/ThereIsMoreToLifeThanBeingHappy/</guid>
        
        <category>ted speak listen</category>
        
        
        <category>ted</category>
        
      </item>
      
    
      
      <item>
        <title>Java Static</title>
        <description>
          &lt;h3 id=&quot;static&quot;&gt;Static&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;공통으로 쓰는 변수를 static 변수라고 한다 -&amp;gt; 한군데서 바꾸면 다른데서 사용할 때 모두 변경된 값으로 보인다&lt;/li&gt;
  &lt;li&gt;클래스 변수(static 변수)는 new해서 인스턴스 만들 때 만들어지는 변수가 아니고, 공통으로 사용되는 것이라서 클래스만들 때 같이 만들어진다고 보면 된다&lt;/li&gt;
  &lt;li&gt;인스턴스를 만들지 않아도 클래스명으로 직접 호출해서 사용할 수 있는 메소드가 클래스 메소드, 즉 static 메소드다&lt;/li&gt;
  &lt;li&gt;정적 메소드는 흔히 팩토리 메서드를 만드는데 사용한다 -&amp;gt; 팩토리 메소드는 클래스의 새로운 인스턴스를 반환하는 정적 메소드다&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NumberFormat&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;currencyFormatter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NumberFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getCurrencyInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NumberFormat&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;percentFormatter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NumberFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getPercentInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;currencyFormatter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;percentFormatter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

        </description>
        <pubDate>Thu, 03 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/03/JavaStatic/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/03/JavaStatic/</guid>
        
        <category>java static</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Interface</title>
        <description>
          &lt;h3 id=&quot;추상클래스&quot;&gt;추상클래스&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;메소드를 정의하지 않고 메소드 이름만 정해두고, 실제 메소드의 정의는 나중에 상속받는 자식클래스에서 정의하도록 한 클래스&lt;/li&gt;
  &lt;li&gt;정의하지 않은 메소드가 하나라도 있으면 추상클래스이다.&lt;/li&gt;
  &lt;li&gt;사용 목적 : 형태만 만들고 상속해서 자식클래스에서 구체화하려고 부모나 조상클래스로 만들어 두는 것&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;인터페이스-until-java-7&quot;&gt;인터페이스 (UNTIL JAVA 7)&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.&lt;/li&gt;
  &lt;li&gt;모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.&lt;/li&gt;
  &lt;li&gt;추상클래스보다 더 단순화된 형태&lt;/li&gt;
  &lt;li&gt;상수와 메소드 이름으로만 구성되어있다&lt;/li&gt;
  &lt;li&gt;인터페이스는 어떤 기능에 대한 추상이며, 실제 구현은 그 인터페이스를 구현하는 클래스에게 맡긴다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DBLogging&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MONGO_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Mongo_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NEO4J_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Neo4J_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CASSANDRA_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Cassandra_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logInfo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logWarn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logError&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logFatal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
   &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;인터페이스의-변화-since-java-8&quot;&gt;인터페이스의 변화 (SINCE JAVA 8)&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;인터페이스가 어떤 상태(인스턴스 변수)나 구현된 메서드를 갖는 것이 불가능했다. 하지만 Java 8부터 인터페이스가 조금 더 유연하게 바뀌었다&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Java 8에서는 인터페이스에 기본 구현을 정의할 수 있게되었다. -&amp;gt; 같은 내용의 메소드를 추가 또는 작성해야하는 경우 유용&lt;/li&gt;
  &lt;li&gt;Java 8 이전에는 여러 인터페이스가 같은 메서드를 갖더라도 어차피 구현은 클래스에서만 제공했기 때문에 문제가 되지 않았다. 
하지만 Java 8에서 인터페이스들이 각각 동일한 메서드의 기본 구현을 제공하고, 
클래스에서 충돌이 발생하는 메서드를 명시적으로 오버라이드 하지 않으면 컴파일러가 어떤 기본 메서드를 사용해야할 지 선택할 수 없기 때문에 문제가 발생한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DBLogging&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MONGO_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Mongo_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NEO4J_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Neo4J_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CASSANDRA_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Cassandra_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;c1&quot;&gt;// abstract method example&lt;/span&gt;
      &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logInfo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;

      &lt;span class=&quot;c1&quot;&gt;// default method example&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logWarn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 1: Connect to DataStore&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 2: Log Warn Message&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 3: Close the DataStore connection&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logError&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 1: Connect to DataStore&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 2: Log Error Message&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 3: Close the DataStore connection&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logFatal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 1: Connect to DataStore&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 2: Log Fatal Message&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// Step 3: Close the DataStore connection  &lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// static method example&lt;/span&gt;
      &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isNull&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Interface Null Check&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// Any other abstract, default, static methods&lt;/span&gt;
   &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;인터페이스의-변화-since-java-9&quot;&gt;인터페이스의 변화 (SINCE JAVA 9)&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;JAVA 9 부터는 인터페이스에서 private으로 메소드 선언이 가능하다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DBLogging&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MONGO_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Mongo_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NEO4J_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Neo4J_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CASSANDRA_DB_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ABC_Cassandra_Datastore&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logInfo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;INFO&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logWarn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;WARN&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logError&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ERROR&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logFatal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;FATAL&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;msgPrefix&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;c1&quot;&gt;// Step 1: Connect to DataStore&lt;/span&gt;
		&lt;span class=&quot;c1&quot;&gt;// Step 2: Log Message with Prefix and styles etc.&lt;/span&gt;
		&lt;span class=&quot;c1&quot;&gt;// Step 3: Close the DataStore connection&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;// Any other abstract, static, default methods&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://www.journaldev.com/12850/java-9-private-methods-interfaces&quot;&gt;Java 9 Private methods in Interfaces&lt;/a&gt;&lt;/p&gt;

        </description>
        <pubDate>Thu, 03 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/03/JavaInterface/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/03/JavaInterface/</guid>
        
        <category>java interface</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Java Final</title>
        <description>
          &lt;h3 id=&quot;final&quot;&gt;Final&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;final 지정자는 멤버변수, 메소드, class명 앞에 사용할 수 있다&lt;/li&gt;
  &lt;li&gt;뜻은 말 그대로 “최종적으로 정해진 것이니 바꾸려고 하지 말라”고 Java 컴파일러에게 힌트를 주는 것이다&lt;/li&gt;
  &lt;li&gt;final 클래스 : 메소드 1~2개만 바꾸지 못하도록 막는 것이 아니라 아예 전체 클래스를 통째로 못 바꾸게 할 경우&lt;/li&gt;
  &lt;li&gt;주로 라이브러리 형태의 프로젝트를 작성할 때 사용 -&amp;gt; 재정의 하지 못하도록&lt;/li&gt;
&lt;/ul&gt;

        </description>
        <pubDate>Thu, 03 Jan 2019 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2019/01/03/JavaFinal/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2019/01/03/JavaFinal/</guid>
        
        <category>java final</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>How to speak so that people want to listen</title>
        <description>
          &lt;h3 id=&quot;말하기-7가지-죄악우리가-빠지기-쉬운-말하기-습관-버려야할-습관&quot;&gt;말하기 7가지 죄악(우리가 빠지기 쉬운 말하기 습관, 버려야할 습관)&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;험담하기(gossip) - 자리에 없는 사람을 나쁘게 말하는 것&lt;/li&gt;
    &lt;li&gt;비판하기(judging) - 비판하는 사람의 말은 듣기 힘들다&lt;/li&gt;
    &lt;li&gt;부정성(negativity)&lt;/li&gt;
    &lt;li&gt;불평하기(complaining) - 막연한 비참함이다&lt;/li&gt;
    &lt;li&gt;변명(excuses)&lt;/li&gt;
    &lt;li&gt;이야기를 치장하거나 과장하는 것(lying) - 과장은 거짓이되고 계속 거짓이 되면 거짓말하는 사람이 된다.&lt;/li&gt;
    &lt;li&gt;독단주의(dogmatism) - 사실과 의견을 혼동하는 것&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;hail&quot;&gt;HAIL&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;우리의 연설이 강력하고 세상을 바꿀만한 것이 되도록 하시기 원하신다면 토대로 삼아야 할 강력한 네 가지 기초 원리가 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;정직(Honesty) - 말에 있어 진실하고 솔직 명확한(be clear and straight)&lt;/li&gt;
    &lt;li&gt;진정성(Authenticity) - 자연스러운 것(be yourself)&lt;/li&gt;
    &lt;li&gt;도덕성(Integrity) - 말을 지키는 것(being your word), 말과 행동이 일치 누군가 신뢰할 수 있는 사람이 되는 것&lt;/li&gt;
    &lt;li&gt;사랑(Love) - 낭만적인 사랑이 아닌 사람들이 잘 되길 바라는 마음(wish them well)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;놀만한-말의-힘을-증가시켜-줄-몇-가지-도구&quot;&gt;놀만한 말의 힘을 증가시켜 줄 몇 가지 도구&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;말하는 음성 - 예를 들면 사실 우리는 낮은 목소리를 가진 정치인에게 투표를 한다. 목소리의 깊이를 힘과 권위에 연관시키기 때문이다. 무게감을 원한다면 가슴을 이용하여 음성을 내야한다.&lt;/li&gt;
    &lt;li&gt;음색 - 목소리에서 느껴지는 것, 호흡법, 자세와 연습으로 목소리의 음색을 향상시킬수 있다.&lt;/li&gt;
    &lt;li&gt;운율 - 운율이 전혀없다면 듣기가 힘들다.&lt;/li&gt;
    &lt;li&gt;속도 - 매우 빠르게 말해서 흥분하게 되거나 강조하기 위해 바로 속도를 늦출 수도 있고 침묵할 수도 있다. 침묵은 매우 강력할 수 있다.&lt;/li&gt;
    &lt;li&gt;음조 - 낮은 소리와 높은 소리를 통해 주의환기를 보여 줄 수 있다.&lt;/li&gt;
    &lt;li&gt;음량 - 음량 조절을 통해 매우 격해질 수 있다.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;출처 - &lt;a href=&quot;https://www.ted.com/talks/julian_treasure_how_to_speak_so_that_people_want_to_listen&quot;&gt;How to speak so that people want to listen&lt;/a&gt;&lt;/p&gt;

        </description>
        <pubDate>Sat, 29 Dec 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/ted/2018/12/29/HowToSpeakSoThatPeopleWantToListen/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/ted/2018/12/29/HowToSpeakSoThatPeopleWantToListen/</guid>
        
        <category>ted speak listen</category>
        
        
        <category>ted</category>
        
      </item>
      
    
      
      <item>
        <title>Java Variable</title>
        <description>
          &lt;h2 id=&quot;변수의-종류&quot;&gt;변수의 종류&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;클래스 변수, 인스턴스 변수, 지역 변수 3가지가 있다.&lt;/li&gt;
  &lt;li&gt;그 중 클래스 변수와 인스턴스 변수를 멤버 변수라고 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;클래스 변수
    &lt;ul&gt;
      &lt;li&gt;인스턴스 변수에 static을 붙였을 경우(메모리에 딱 한번만 올라감)&lt;/li&gt;
      &lt;li&gt;클래스가 메모리에 올라올때 생성&lt;/li&gt;
      &lt;li&gt;결국 변수의 범위가 클래스에 한정됨 따라서, 클래스 변수(개인 정리)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;인스턴스 변수
    &lt;ul&gt;
      &lt;li&gt;객체가 생성될 때(new를 사용해 메모리를 할당할 때) 생성&lt;/li&gt;
      &lt;li&gt;변수 생성 시점이 인스턴스의 범위에 해당되므로, 인스턴스 변수(개인 정리)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;지역 변수
    &lt;ul&gt;
      &lt;li&gt;변수 선언문이 수행될 때 생성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Test&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;instanceVariable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;classVariable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;localVariable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

        </description>
        <pubDate>Sat, 29 Dec 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/java/2018/12/29/JavaVariables/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/java/2018/12/29/JavaVariables/</guid>
        
        <category>java variable</category>
        
        
        <category>java</category>
        
      </item>
      
    
      
      <item>
        <title>Basic Java</title>
        <description>
          &lt;p&gt;접근제어 지시자&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public(전체공개) &amp;gt; protected(상속 or 패키지내부) &amp;gt; default(패키지 내부) &amp;gt; private(클래스 내부)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;멤버변수는 override 되지 않는다, 단지 hiding 될 뿐.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Hiding Fields&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Within a class, a field that has the same name as a field in the superclass hides the superclass’s field, even if their types are different. Within the subclass, the field in the superclass cannot be referenced by its simple name. Instead, the field must be accessed through super, which is covered in the next section. Generally speaking, we don’t recommend hiding fields as it makes code difficult to read.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Car&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;owner&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;철수&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PremiumCar&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Car&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;owner&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;영희&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Car&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pCar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PremiumCar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pCar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 철수&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;업 캐스팅&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;파생 타입의 객체 참조를 베이스 타입으로 처리하는 것&lt;/li&gt;
  &lt;li&gt;전체 집합에서 부분 집합으로 타입을 바꾸는 셈이므로 파생 클래스에서 추가로 가지고 있는 메소드를 호출할 수 없게 된다.
단, 오버라이딩된 메소드는 파생 클래스의 것이 호출된다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exception 실행시 우선순위&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ExceptionTest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;NumberFormatException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;123&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NumberFormatException&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;NumberFormatException&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Exception&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;err&quot;&gt;결과&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NumberFormatException&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;JVM 에서는 첫번째 Catch 블록에서 부터 호출된 예외를 처리한 Catch 블럭을 찾아 내려오기 때문이다. 
만약 가능한 예외 블록이 있다면, 비교를 멈추고 catch 블록에 정의된 예외처리 코드들을 실행하게 된다.&lt;/li&gt;
&lt;/ul&gt;


        </description>
        <pubDate>Wed, 26 Dec 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/books/2018/12/26/BasicJava/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/books/2018/12/26/BasicJava/</guid>
        
        <category>book java</category>
        
        
        <category>books</category>
        
      </item>
      
    
      
      <item>
        <title>GettingStartedWithElasticsearch</title>
        <description>
          &lt;h1 id=&quot;elasticsearch시작하세요-엘라스틱서치&quot;&gt;Elasticsearch(시작하세요! 엘라스틱서치)&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;시작하세요! 엘라스틱서치를 읽고 정리를 해보자!!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;서문&quot;&gt;서문&lt;/h4&gt;
&lt;p&gt;정보의 홍수 속에서 필요로하는 정확한 데이터를 검색하여 찾는 기술은 무엇보다 중요해졌다.
데이터를 검색하는 데 있어 전 세계적으로 가장 널리 사용되고 있는 기술 중 하나가 바로 아파치 루씬(Apache Lucene)이다.
루씬 라이브러리를 실무에서 사용하기 위해 솔루션이 개발되고 있는데 가장 최근에 개발돼 선풍적인 인기를 끌고 있는 솔루션이 바로 엘라스틱서치다.&lt;/p&gt;

&lt;h4 id=&quot;엘라스틱서치-사용-사례&quot;&gt;엘라스틱서치 사용 사례&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;위키피디아(Wikipedia)는 엘라스틱서치를 이용해 전문검색(Full Text Search)을 수행하고 실시간 타이핑 검색, 추천 검색어 기능 등에 활용 중이다.&lt;/li&gt;
  &lt;li&gt;더 가디안(The Guadian)지는 방문객의 로그 분석을 통한 소셜 데이터를 생성해 실시간 응대와 기사에 대한 반응 분석 등에 엘라스틱서치를 사용하고 있다.&lt;/li&gt;
  &lt;li&gt;스택오버플로우(StackOverflow)에서는 검색 내용과 결과를 통합해 유사한 질문과 해답을 연결하는 데 엘라스틱서치를 사용 중이다.&lt;/li&gt;
  &lt;li&gt;깃허브(Github)에서는 1,300억 줄이 넘는 소스 코드를 검색하는 데 엘라스틱서치를 사용 중이다.&lt;/li&gt;
  &lt;li&gt;골드만 삭스(Goldman Sachs)에서는 매일 5TB가 넘는 데이터를 저장하고 있으며, 엘라스틱서치를 이용해 이 데이터를 주식 시장의 변동을 분석하는 데 사용한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;데이터-처리&quot;&gt;데이터 처리&lt;/h4&gt;
&lt;h5 id=&quot;put&quot;&gt;PUT&lt;/h5&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PUT books/book/1
{
  &quot;title&quot; : &quot;Elasticsearch Guide&quot;,
  &quot;author&quot; : &quot;Park&quot;,
  &quot;date&quot; : &quot;2018-12-25&quot;,
  &quot;pages&quot; : 250
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;get&quot;&gt;GET&lt;/h5&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET books/book/1
# 메타 정보를 제외한 데이터값만 조회
GET books/book/1/_source
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;delete&quot;&gt;DELETE&lt;/h5&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DELETE books/book/1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;update&quot;&gt;UPDATE&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;업데이트는 _update API의 두 개의 매개 변수인 doc와 script를 이용해서 데이터를 제어할 수 있다.&lt;/li&gt;
  &lt;li&gt;doc 매개 변수는 도규먼트에 새로운 필드를 추가하거나 기존 필드 값을 변경하는 데 사용한다.&lt;/li&gt;
  &lt;li&gt;script 매개 변수는 좀 더 복잡한 프로그래밍 기법을 사용해서 입력된 내용에 따라 필드의 값을 변경하는 등의 처리에 사용한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;POST books/book/1/_update
{
  &quot;doc&quot; : {
    &quot;category&quot; : &quot;ICT&quot;
  }
}
 
POST books/book/1/_update
{
  &quot;script&quot;: &quot;ctx._source.pages += 50&quot;
}

POST books/book/1/_update
{
  &quot;script&quot;: &quot;ctx._source.author.add(\&quot;Lee\&quot;)&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;검색&quot;&gt;검색&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;took : 검색 소요된 시간으로 밀리 초(1/1000초) 단위로 출력된다.&lt;/li&gt;
  &lt;li&gt;curl 명령 조회시 공백의 경우 url 인코딩 형식(%20)으로 입력해야함.&lt;/li&gt;
  &lt;li&gt;조건 명령어를 지정하지 않고 공백으로 질의어를 나누면 기본값인 OR로 인식한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;멀티-테넌시multi-tenancy&quot;&gt;멀티 테넌시(multi tenancy)&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;여러 인덱스를 동시에 검색하는 기능&lt;/li&gt;
  &lt;li&gt;사용 방법은 검색할 인덱스를 쉼표(,)로 구분해서 입력
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ curl 'localhost:9200/books, magazines/_search?q=time&amp;amp;pretty'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

        </description>
        <pubDate>Tue, 25 Dec 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/books/2018/12/25/GettingStartedWithElasticsearch/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/books/2018/12/25/GettingStartedWithElasticsearch/</guid>
        
        <category>book elasticsearch</category>
        
        
        <category>books</category>
        
      </item>
      
    
      
      <item>
        <title>Elasticsearch Advanced</title>
        <description>
          &lt;h1 id=&quot;jvm-heap-size&quot;&gt;JVM Heap Size&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;설정할 수 있는 최대 Heap 크기는 약 32GB
주의할 사항은 일래스틱서치 JVM에 총 메모리 기준 50% 이상을 할당하지 말하야 한다
아파치 루씬의 파일 시스템 캐시에 충분한 메모리가 필요하기 때문
궁극적으로 일래스틱서치 노드에 저장되는 모든 데이터는 아파치 루씬 인덱스로 관리되고, 해당 인덱스는 파일에 빠르게 접근하기 위해 메모리를 사용한다
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;스와핑-비활성화&quot;&gt;스와핑 비활성화&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;스와핑이 활성화되면 OS는 일반적으로 다른 프로그램에서 더 많은 메모리를 사용할 수 있도록 데이터를 디스크를 옮기는 작업, 
즉 스와핑을 사용해 애플리케이션에서 메모리를 회수하려고 한다.
일래스틱서치 노드에서는 OS가 일래스틱서치 Heap 메모리에 있는 데이터를 디스크로 옮겼다가 다시 메모리로 옮기는 작업을 수행한다.
이러한 과정은 작업 속도를 늦출 수 있기 때문에 일래스틱서치를 실행하는 노드에서는 스와핑을 비활성화해야 한다.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;인덱스-별칭-설정&quot;&gt;인덱스 별칭 설정&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;운영 환경에서는 특정 인덱스 데이터를 다른 인덱스로 옮기는 작업, 즉 색인을 다시 해야하는 상황이 발생한다.
하지만 인덱스는 JAVA, Python, .NET 등 다양한 프로그래밍 환경으로 구축한 애플리케이션에서 사용한다.
따라서 운영 환경에서 인덱스 이름을 변경하는 상황이 발생하면 애플리케이션도 마찬가지로 변경이 필요하다.
이러한 상황에서 별칭을 활용하면 문제를 쉽게 해결할 수 있다. 
별칭은 유연성이 뛰어나기에 운영 환경에서 사용하는 것을 추천한다.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;출처&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Learning Elastic Stack 6.0&lt;/li&gt;
&lt;/ul&gt;


        </description>
        <pubDate>Wed, 12 Dec 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/programming/2018/12/12/ElasticSearch-Advanced/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/programming/2018/12/12/ElasticSearch-Advanced/</guid>
        
        <category>elasticsearch engine setting</category>
        
        
        <category>programming</category>
        
      </item>
      
    
      
      <item>
        <title>ThePragmaticProgrammer</title>
        <description>
          &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;이 글의 내용은 인사이트 출판사의 실용주의 프로그래머 도서를
학습하며 정리한 내용입니다.   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;추천사&quot;&gt;추천사&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;그들은 무언가를 하는 동안 그 자체에 주의를 기울였고, 또 그러고 나서 그걸 좀 더 잘해보려고 노력했다는 것입니다.&lt;/li&gt;
  &lt;li&gt;두 번째 팁 ‘생각하면서 일하라’ 이기 때문입니다.&lt;/li&gt;
  &lt;li&gt;저자들은 소프트웨어 개발에 대한 어떤 이론을 주장하지 않기 위해 계속 조심했습니다.
매우 다행스러운 일인데, 만약 그렇게 했다면 자기 이론을 방어하기 위해 책 전체를 그 이론에 맞추는 방향으로 쓸 수밖에 없었을 것이기 때문입니다.
이런 맞춤은 예를 들어 자연과학 같은 데에서는 일종의 전통입니다.
자연과학에서는 이론이 결국 법칙이 되거나 아니면 소리 없이 버려지기 때문이죠. 
반면 프로그래밍에는 법칙이란 것이 아예 없거나 있더라도 아주 적습니다.
따라서 법칙이 되고 싶어 하는 이론에 맞추어 쓰여진 프로그래밍 조언은 글로 쓰기엔 좋아 보일지 몰라도 현실의 필요를 충족시키지 못합니다.
이것이 무수한 방법론 책들이 잘 되지 않은 이유입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;서문&quot;&gt;서문&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;프로그래밍은 기예(craft)이다. 
가장 간단하게 생각해보면 프로그래밍이란 컴퓨터에게 여러분이 시키고 싶은 일을 하게끔 만드는 (또는 여러분의 고객인 사용자가 시키고 싶은 일을 하게 만드는) 것이다.
프로그래머는 어떤 면으로는 들어주는 사람이고, 어떤 면으로는 조언하는 사람이며, 어떤 면으로는 통역하는 사람이기도 하고, 어떤 면으로는 명령을 내리는 사람이기도 하다.
프로그래머는 애매모호한 요구사항을 포착해서 단순한 기계까지도 그것을 잘 수행할 수 있도록 요구사항을 표현하는 방법을 찾으려 노력한다.
프로그래머는 다른 사람도 이해할 수 있도록 자신의 작업을 문서로 만들려고 노력하고, 다른 사람들이 자신이 한 것을 바탕으로 또 다른 것을 만들 수 있도록 자신의 작업을 설계하려고 노력한다.
이뿐이 아니라, 프로그래머는 쉬지 않고 똑딱대는 프로젝트 일정 시계의 초침에 굴하지 않고도 이 모든 일들을 해내기 위해 노력한다.
프로그래머는 매일매일 작은 기적을 만드는 것이다.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;무엇이 실용주의 프로그래머를 만드는가?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;얼리어답터 성향/새로운 것에 빨리 적응하는 성향.&lt;/em&gt;
이런 사람은 기술과 기법에 대한 본능적인 감각이 있으며, 새로운 것을 시도해보는 것을 좋아한다.
이런 사람은 새로운 것이 주어지면 그것을 쉽게 파악해서 자기의 지식에 통합해 넣는다.
이런 사람의 자신감은 경험에서 우러나오는 것이다.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;캐묻기 좋아한다.&lt;/em&gt;
이런 사람은 질문을 많이 한다.
“멋진데. 어떻게 한거지? 그 라이브러리에 무슨 문제 있어? BeOS라는 이름을 들었는데 그게 뭐야? 심볼릭 링크는 어떤 방식으로 구현되는 거야?”
이런 사람은 자잘한 지식들을 머리 속에 쌓아두며, 그 가운데 어떤 것들이 몇 년 후의 결정에 영향을 주기도 한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;비판적인 사고의 소유자.&lt;/em&gt;
이런 사람은 사실 관계를 확인하지 않고서는 어떤 것도 들은 대로 믿는 일이 드물다.
직장 동료가 “지금까지 그런 방식으로 해 왔으니까”라고 말하거나, 벤더가 이것이 모든 문제의 해결책이라고 약속하면 도전 욕구가 솟아오르는 사람이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;현실적이다.&lt;/em&gt;
이런 사람은 자신이 맞닥드리는 모든 문제의 근본적인 성격을 이해라려고 노력한다.
이러한 현실주의는 이런 사람에게 이일이 얼마나 어려운 일인지, 이일에 시간이 얼마나 걸릴지 판단하는 좋은 감각을 길러준다.
어떤 과정이 어려울 수밖에 없다는 것을 이해하거나 어떤 과정을 끝내는 데 상당한 시간이 걸릴 것이다 라는 것을 이해하면 끈기있게 그 일을 해나갈 지구력이 생긴다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;다방면의 기술에 익숙하다.&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;실용주의-프로그래머-tip&quot;&gt;실용주의 프로그래머 Tip&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;자신의 기술(craft)에 관심과 애정을 가져라.&lt;/p&gt;

    &lt;p&gt;여러분이 소프트웨어 개발을 잘하려는 관심과 애정이 없다면, 그 일을 하는 것에 아무 의미가 없다고 생각한다&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;자신의 일에 대해 생각하면서 일하라!&lt;/p&gt;

    &lt;p&gt;실용주의 프로그래머가 되고 싶다면, 어떤 일을 하면서 자기가 무엇을 하고 있는지 생각하라고 말하고 싶다.
모든 개발 과정에서, 매일, 여러분이 내리는 모든 결정을 지속적이고 비판적으로 평가해보는 것이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;어설픈 변명을 만들지 말고 대안을 제시하라.&lt;/p&gt;

    &lt;p&gt;안 된다고 하지 말고 상황을 개선하기 위해 무엇을 할 수 있는지 설명하라.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;깨진 창문을 내버려두지 말라.&lt;/p&gt;

    &lt;p&gt;오랜 기간 수리하지 않고 방치된 창문 하나가 거주자들에게 버려진 느낌을 스며들게 한다.
그래서 다른 창문이 하나 더 깨진다. 사람들은 이제 어지르기 시작한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;변화의 촉매가 되라.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;큰 그림을 기억하라.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;


        </description>
        <pubDate>Sat, 06 Oct 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/books/2018/10/06/ThePragmaticProgrammer/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/books/2018/10/06/ThePragmaticProgrammer/</guid>
        
        <category>book pragamtic</category>
        
        
        <category>books</category>
        
      </item>
      
    
      
      <item>
        <title>충성의 딜레마</title>
        <description>
          &lt;h3 id=&quot;아리스토텔레스&quot;&gt;아리스토텔레스&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;이상적인 헌법은 최선의 삶을 알아야한다&lt;/li&gt;
  &lt;li&gt;
    &lt;정치학&gt; 법의 요지, 폴리스의 목적은 시민의 성품을 형성하고 시민의 미덕을 배양하며 시민의 탁월함을 주입하고 좋은 삶을 실현하는 것
&lt;/정치학&gt;
  &lt;/li&gt;
  &lt;li&gt;‘자유로운 인간’이란 잠재력을 실현할 능력이 있다는 뜻&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;칸트&quot;&gt;칸트&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;공정한 권리를 보장하는 기틀을 마련해 각자가 원하는 좋은 삶을 사는 자유를 보장&lt;/li&gt;
  &lt;li&gt;특정한 삶의 방식을 구현, 단정, 장려하면 자유와 충돌한다&lt;/li&gt;
  &lt;li&gt;법의 목적, 헌법의 요지는 미덕을 주입하고 장려하는 것이 아니다&lt;/li&gt;
  &lt;li&gt;자유는 자율적으로 행동하는 능력이다&lt;/li&gt;
  &lt;li&gt;자유란 스스로 부과한 법에 따르는 행동이다 자율로서의 자유&lt;/li&gt;
  &lt;li&gt;인간을 자유롭고 독립된 자아로 본다&lt;/li&gt;
&lt;/ul&gt;


        </description>
        <pubDate>Thu, 22 Mar 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/philosophy/2018/03/22/MichaelSandel-Chapter11/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/philosophy/2018/03/22/MichaelSandel-Chapter11/</guid>
        
        <category>philosophy</category>
        
        <category>study</category>
        
        
        <category>philosophy</category>
        
      </item>
      
    
      
      <item>
        <title>벤담의 공리주의</title>
        <description>
          &lt;h3 id=&quot;몇가지-사례를-이용한-도덕적-판단&quot;&gt;몇가지 사례를 이용한 도덕적 판단&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;기관사로써 차로를 변경하여 5명의 죽음 or 1명의 죽음 둘 중 어떤 것을 선택할지?&lt;/li&gt;
  &lt;li&gt;뚱뚱한 사람을 밀쳐 5명의 목숨을 구할 것인지?&lt;/li&gt;
  &lt;li&gt;중환자 1명과 경상환자 5명 중 시간의 제약에 따라 선택지가 주어졌을 때 어떤 판단을 할 것인지?&lt;/li&gt;
  &lt;li&gt;5명의 장기별 이상이 있는 환자가 있을 때 건강한 1사람을 희생시켜 5명을 살릴 것인지?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;도덕추론&quot;&gt;도덕추론&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;결과론적 : 행동의 결과에 따라 도덕성을 판단&lt;/li&gt;
  &lt;li&gt;정언적 : 의무와 권리에 따라 도덕성을 판단&lt;/li&gt;
  &lt;li&gt;우리는 종종 행동의 결과에서 도덕성을 찾으려 한다 그 행동이 만들어낼 세상의 모습에서 도덕성을 찾는 것 -&amp;gt; 결과론적 도덕 추론&lt;/li&gt;
  &lt;li&gt;어떤 경우에는 행동의 결과가 우리를 동요시키지 않는다 결과뿐만 아니라 행동 본질이나 특징도 도덕성 판단에 중요하다 -&amp;gt; 정언적 도덕 추론&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;도덕적-고민을-하는-이유&quot;&gt;도덕적 고민을 하는 이유&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;이치를 따지는건 불가능해 -&amp;gt; 회피이고 회의주의&lt;/li&gt;
  &lt;li&gt;비록 해결은 불가능하지만 이 문제들을 피할 수도 없다는걸 보여주는건 아닐까?&lt;/li&gt;
  &lt;li&gt;우리의 일상이 이 문제들에 대한 답이 될 수 있기 때문&lt;/li&gt;
  &lt;li&gt;도덕적 고민을 포기하는 회의주의는 해결책이 아니다&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;임마누엘-칸트&quot;&gt;임마누엘 칸트&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;회의주의는 인간 이성의 쉼터다&lt;/li&gt;
  &lt;li&gt;그곳에서 이성은 이념적 방황에 대해 성찰할 수 있지만 그곳에 영구적으로 정착해 살 수는 없다&lt;/li&gt;
  &lt;li&gt;회의주의에 굴복한다면 이성의 동요를 절대 극복할 수 없다&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;강좌의-목적&quot;&gt;강좌의 목적&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;이성을 일깨워 방황하게 만들고 그것이 무엇을 이끌어내는지를 보는 것&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;공리주의&quot;&gt;공리주의&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;결과론적 도덕 추론 방식&lt;/li&gt;
  &lt;li&gt;제러미 벤담 18세기 영국 정치철학자&lt;/li&gt;
  &lt;li&gt;공리주의 도덕 이론을 처음으로 명확하고 체계적으로 설명&lt;/li&gt;
  &lt;li&gt;단순하면서도 도덕적 직관에 강하게 호소&lt;/li&gt;
  &lt;li&gt;정당한 행동은 공리를 극대화하는 것이라는 주장&lt;/li&gt;
  &lt;li&gt;벤담이 말한 공리는 고통을 상쇄하고 남은 쾌락(행복)&lt;/li&gt;
  &lt;li&gt;고통과 쾌락이라는 두 통치권자에게 지배받는 존재라는 깨달음&lt;/li&gt;
  &lt;li&gt;전체의 행복을 극대화하는 행동이냐 아니냐가 되어야 한다는 것&lt;/li&gt;
  &lt;li&gt;최대 다수의 최대 행복&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;반론&quot;&gt;반론&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;다수의 행복을 위해 살인이 정당화 될 수 있는가?(3명이 살기위해 배고픔을 1명을 살인 후 해결하여 살아남은 실제 사건 예시)&lt;/li&gt;
&lt;/ul&gt;

        </description>
        <pubDate>Sat, 10 Mar 2018 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/philosophy/2018/03/10/MichaelSandel-Chapter1/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/philosophy/2018/03/10/MichaelSandel-Chapter1/</guid>
        
        <category>philosophy</category>
        
        <category>study</category>
        
        
        <category>philosophy</category>
        
      </item>
      
    
      
      <item>
        <title>Elasticsearch</title>
        <description>
          &lt;h2 id=&quot;basic-concepts&quot;&gt;Basic Concepts&lt;/h2&gt;
&lt;h3 id=&quot;near-realtimenrt&quot;&gt;Near Realtime(NRT)&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Elasticsearch is a near real time search platform. What this means is there is a slight latency (normally one second) from the time you index a document until the time it becomes searchable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;cluster&quot;&gt;Cluster&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;A cluster is a collection of one or more nodes (servers) that together holds your entire data and provides federated indexing and search capabilities across all nodes.&lt;/li&gt;
  &lt;li&gt;Make sure that you don’t reuse the same cluster names in different environments, otherwise you might end up with nodes joining the wrong cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;node&quot;&gt;Node&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;A node is a single server that is part of your cluster, stores your data, and participates in the cluster’s indexing and search capabilities.&lt;/li&gt;
  &lt;li&gt;ust like a cluster, a node is identified by a name which by default is a random Universally Unique IDentifier (UUID) that is assigned to the node at startup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;index&quot;&gt;Index&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;An index is a collection of documents that have somewhat similar characteristics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;type&quot;&gt;&lt;del&gt;Type&lt;/del&gt;&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Deprecated in 6.0.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;document&quot;&gt;Document&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;A document is a basic unit of information that can be indexed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;shards--replicas&quot;&gt;Shards &amp;amp; Replicas&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;An index can potentially store a large amount of data that can exceed the hardware limits of a single node. For example, a single index of a billion documents taking up 1TB of disk space may not fit on the disk of a single node or may be too slow to serve search requests from a single node alone.
To solve this problem, Elasticsearch provides the ability to subdivide your index into multiple pieces called shards. When you create an index, you can simply define the number of shards that you want. Each shard is in itself a fully-functional and independent “index” that can be hosted on any node in the cluster.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Sharding is important for two primary reasons:
    &lt;ul&gt;
      &lt;li&gt;It allows you to horizontally split/scale your content volume&lt;/li&gt;
      &lt;li&gt;It allows you to distribute and parallelize operations across shards (potentially on multiple nodes) thus increasing performance/throughput&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;To summarize, each index can be split into multiple shards. An index can also be replicated zero (meaning no replicas) or more times. Once replicated, each index will have primary shards (the original shards that were replicated from) and replica shards (the copies of the primary shards). The number of shards and replicas can be defined per index at the time the index is created. After the index is created, you may change the number of replicas dynamically anytime but you cannot change the number of shards after-the-fact.&lt;/li&gt;
  &lt;li&gt;By default, each index in Elasticsearch is allocated 5 primary shards and 1 replica which means that if you have at least two nodes in your cluster, your index will have 5 primary shards and another 5 replica shards (1 complete replica) for a total of 10 shards per index.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Each Elasticsearch shard is a Lucene index. There is a maximum number of documents you can have in a single Lucene index. As of LUCENE-5843, the limit is 2,147,483,519 (= Integer.MAX_VALUE - 128) documents. You can monitor shard sizes using the _cat/shards API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;create-index&quot;&gt;Create Index&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Default for number_of_shards is 5&lt;/li&gt;
  &lt;li&gt;Default for number_of_replicas is 1 (ie one replica for each primary shard)
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -XPUT 'localhost:9200/twitter?pretty' -H 'Content-Type: application/json' -d'
{
  &quot;settings&quot; : {
      &quot;index&quot; : {
          &quot;number_of_shards&quot; : 3, 
          &quot;number_of_replicas&quot; : 2 
      }
  }
}
'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;GET /_cat/health?v&lt;/li&gt;
  &lt;li&gt;GET /_cat/indices?v&lt;/li&gt;
  &lt;li&gt;PUT /customer?pretty : PUT 동사를 사용하여 “customer”라는 이름의 색인을 만듭니다 PUT 동사를 사용하여 “customer”라는 이름의 색인을 만듭니다. 단, 호출의 끝에 &lt;code class=&quot;highlighter-rouge&quot;&gt;pretty&lt;/code&gt;를 추가하여 JSON 응답이 있다면 pretty-print를 수행하게 합니다.&lt;/li&gt;
&lt;/ul&gt;


        </description>
        <pubDate>Wed, 27 Dec 2017 00:00:00 +0900</pubDate>
        <link>https://parksanghun.github.io/programming/2017/12/27/ElasticSearch/</link>
        <guid isPermaLink="true">https://parksanghun.github.io/programming/2017/12/27/ElasticSearch/</guid>
        
        <category>elasticsearch engine</category>
        
        
        <category>programming</category>
        
      </item>
      
    
  </channel>
</rss>