<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Brain to Blog</title>
    <link>https://antop.tistory.com/</link>
    <description>뇌에서 블로그로... antop@naver.com</description>
    <language>ko</language>
    <pubDate>Sat, 23 May 2026 06:10:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Antop</managingEditor>
    <image>
      <title>Brain to Blog</title>
      <url>https://t1.daumcdn.net/cfile/tistory/1271B0104A399FAB89</url>
      <link>https://antop.tistory.com</link>
    </image>
    <item>
      <title>Mockito.thenThrow() 주의사항!</title>
      <link>https://antop.tistory.com/entry/MockitothenThrow-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;예외를 던지도록하는 테스트를 할 때 Exception 안에 메시지를 활용할 경우 Exception.class 를 사용하지말 고 new Exception()을 사용하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 예외 클래스를 보자&lt;/p&gt;
&lt;pre id=&quot;code_1632507451351&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * 이미 종료된 대회일 때 예외
 *
 * @author jammini
 */
public class AlreadyContestEndException extends BadRequestException {
    public AlreadyContestEndException() {
        super(&quot;이미 종료된 대회입니다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스를 모킹해서 예외를 던지도록 할 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1632507516561&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@WebMvcTest(ContestInfoApi.class)
class ContestInfoApiTest extends WebMvcBase {
    @MockBean
    private ContestService contestService;
    
    @Test
    void alreadyContestEnd() throws Exception {
        // when
        // AlreadyContestEndException.class
        when(contestService.modify(anyLong(), any())).thenThrow(AlreadyContestEndException.class);
        
        // ...
    }
    
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@ControllerAdvice 를 이용해 예외 클래스 안의 message 속성을 사용할 경우!&lt;/p&gt;
&lt;pre id=&quot;code_1632507606146&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * 웹 예외 핸들러&amp;lt;br&amp;gt;
 * 시스템상에 발생하는 예외를 잡아서 공통으로 처리한다.
 *
 * @author antop
 */
@Slf4j
@RestControllerAdvice
public class ErrorAdvisor {

    /**
     * 400 Bad Request 예외 처리
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(BadRequestException.class)
    ErrorMessage badRequest(Exception e) {
        log.debug(&quot;message = {}&quot;, e.getMessage());
        return ErrorMessage.badRequest(e.getMessage());
    }
    
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;message는 null이 출력되게 된다. thenThrow() 인자로 new Exception() 을 사용하자.&lt;/p&gt;
&lt;pre id=&quot;code_1632507734803&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;when(contestService.modify(anyLong(), any())).thenThrow(new AlreadyContestEndException());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Framework/Spring</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/192</guid>
      <comments>https://antop.tistory.com/entry/MockitothenThrow-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD#entry192comment</comments>
      <pubDate>Sat, 25 Sep 2021 03:23:37 +0900</pubDate>
    </item>
    <item>
      <title>Spring + @Lazy</title>
      <link>https://antop.tistory.com/entry/Spring-Lazy</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://github.com/antop-dev/spring-lazy&quot;&gt;https://github.com/antop-dev/spring-lazy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;요즘 MSA를 공부하면서 아래와 같은 문구를 보았다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;마이크로서비스에서는 완전 자동화를 달성하기 위해 초소한의 시동/종료 시간을 갖도록 애플리케이션의 크기를 가능한 한 작게 유지하는 것이 극단적으로 아주 중요하다.&lt;br /&gt;이를 위해 마이크로서비스에서는 객체와 데이터의 지연 로딩&lt;code&gt;lazy loading&lt;/code&gt;에 대해서도 고려해봐야 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 때 떠오른 단어는 &lt;code&gt;Spring&lt;/code&gt;과 &lt;code&gt;@Lazy&lt;/code&gt;이다.&lt;/p&gt;
&lt;p&gt;스프링 빈 설정시 &lt;code&gt;@Lazy&lt;/code&gt; 애노테이션만 달아주면 이 빈을 가져오는 시점에 생성하기 때문에 모든 빈을 처음 초기화시에 만들지 않는다.&lt;/p&gt;
&lt;p&gt;그런데 약간의 의문사항이 있어서 테스트 해봤다... 구글링을 대충 해도 나오는 자료이지만 직접 해봤다.&lt;/p&gt;
&lt;h2&gt;등장 클래스&lt;/h2&gt;
&lt;p&gt;아래와 같이 3개의 클래스를 빈으로 등록했다. 패턴은 다 같고 &lt;code&gt;First&lt;/code&gt;, &lt;code&gt;Second&lt;/code&gt;, &lt;code&gt;Third&lt;/code&gt; 만 바뀐다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Component
public class First {
    @Autowired
    private Second second;

    public First() {
        System.out.println(&quot;first class constructor&quot;);
    }

    public void go() {
        System.out.println(&quot;Hello first!&quot;);
        second.go();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;테스트 코드는 아래와 같다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class LazyApplicationTests {
    @Test
    public void lazy() {
        ApplicationContext context = new AnnotationConfigApplicationContext(LazyApplication.class);
        System.out.println(&quot;call first.go()&quot;);
        First first = context.getBean(First.class);
        first.go();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;일반적인 빈 설정&lt;/h2&gt;
&lt;p&gt;먼저 위와 같이 &lt;code&gt;@Lazy&lt;/code&gt;를 사용하지 않는 일반 적인 설정이다. 후에 스프링 컨텍스트에서 &lt;code&gt;First&lt;/code&gt; 인스턴스를 꺼내서 &lt;code&gt;go()&lt;/code&gt; 메서드를 수행할 것이다.&lt;/p&gt;
&lt;p&gt;예상한 대로 빈이 전부 생성 된 후(①) FIrst.go() 이후의 작업이 수행된다(②).&lt;/p&gt;
&lt;pre class=&quot;delphi&quot;&gt;&lt;code&gt;first class constructor
second class constructor
third class constructor
Spring context loaded call
first.go()
Hello first!
Hello second
Hello third!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;하지만 좀 이상한 점이 있는데 예상은 &lt;code&gt;Thrid&lt;/code&gt; &amp;rarr; &lt;code&gt;Second&lt;/code&gt; &amp;rarr; &lt;code&gt;First&lt;/code&gt; 순으로 생성될 줄 알았지만 반대로 생성된다. 생성자를 사용하지 않고 &lt;code&gt;@Autowired&lt;/code&gt;나 세터&lt;code&gt;setter&lt;/code&gt;를 사용하면 스프링이 이 클래스를 까서(?) 적용을 하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@Autowired&lt;/code&gt;를 사용하지 않고 생성자&lt;code&gt;constructor&lt;/code&gt;를 사용하면 예상한 순서대로 빈이 만들어진다.&lt;/p&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;@Component
public class First {
    private final Second second;

    public First(Second second) {
        this.second = second;
        System.out.println(&quot;first class constructor&quot;);
    }

    public void go() {
        System.out.println(&quot;Hello first!&quot;);
        second.go();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;delphi&quot;&gt;&lt;code&gt;third class constructor second class constructor first class constructor Spring context loaded call first.go() Hello first! Hello second Hello third!&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;@Lazy 적용&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cq6zVX/btqxeKMe9qN/sENXjoz3feabx2BkEBGxl0/%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC?attach=1&amp;amp;knm=img.png&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;첨부파일&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Thrid&lt;/code&gt;, &lt;code&gt;Second&lt;/code&gt;, &lt;code&gt;Fourth&lt;/code&gt; 는 스프링 초기화시 생성되고 &lt;code&gt;First&lt;/code&gt;는 지연 로딩이 적용된다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;third class constructor
second class constructor
fourth class constructor
Spring context loaded
call first.go()
first class constructor
Hello first!
Hello second
Hello third!&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;동시성 &lt;code&gt;concurrency&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;First&lt;/code&gt; 빈이 생성 되는데 3초가 걸린다고 가정해보자.&lt;/p&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;@Component
@Lazy
public class First {
    private final Second second;

    public First(Second second) {
        this.second = second;
        // 인스턴스를 생성하는데 3초가 걸린다.
        System.out.println(&quot;It takes 3 seconds to create an instance&quot;);
        try {
            for (int i = 0; i &amp;lt; 3; i++) {
                System.out.println((3 - i) + &quot;..&quot;);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println(e.getMessage());
        }
        System.out.println(&quot;first class constructor&quot;);
    }

    public void go() {
        System.out.println(&quot;Hello first!&quot;);
        second.go();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;First&lt;/code&gt; 인스턴스를 사용하는 다른 인스턴스에서 동시에(거의 동시에?) 요청이 들어온다면?&lt;/p&gt;
&lt;p&gt;테스트 코드는 아래와 같다.&lt;/p&gt;
&lt;pre class=&quot;livescript&quot;&gt;&lt;code&gt;@Test
    public void concurrency() throws Exception {
        ApplicationContext context = new AnnotationConfigApplicationContext(LazyApplication.class);
        System.out.println(&quot;Spring context loaded&quot;);

        for (int i = 0; i &amp;lt; 3; i++) {
            Thread thread = new Thread(() -&amp;gt; {
                System.out.println(&quot;call first.go()&quot;);
                First first = context.getBean(First.class);
                first.go();
            });

            thread.start();
            System.out.println(thread.getName() + &quot; started.&quot;);
            Thread.sleep(100);
        }

        // 결과를 보기 위해 5초 대기
        Thread.sleep(5000);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;걱정과는 다르게 매우 잘 작동한다! 스프링 구욷!&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;third class constructor
second class constructor
fourth class constructor
Spring context loaded
Thread-2 started.
Thread-2 call first.go()
It takes 3 seconds to create an instance
3..
Thread-3 started.
Thread-3 call first.go()
Thread-4 started.
Thread-4 call first.go()
2..
1..
first class constructor
Thread-2 Hello first!
Thread-4 Hello first!
Thread-2 Hello second
Thread-4 Hello second
Thread-4 Hello third!
Thread-3 Hello first!
Thread-3 Hello second
Thread-3 Hello third!
Thread-2 Hello third!&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Framework/Spring</category>
      <category>lazy</category>
      <category>Spring</category>
      <category>Spring Boot</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/189</guid>
      <comments>https://antop.tistory.com/entry/Spring-Lazy#entry189comment</comments>
      <pubDate>Mon, 5 Aug 2019 00:46:06 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin + Spring] Maven configuration</title>
      <link>https://antop.tistory.com/entry/Kotlin-Spring-Maven-configuration</link>
      <description>&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;Kotlin 1.3 이상을 사용하면서 스프링 부트 메인 클래스는 &lt;code&gt;open&lt;/code&gt; 키워드를 넣어줘야 하는 가벼운(?) 이슈가 있었었다...&lt;/p&gt;
&lt;p&gt;이번에는 &lt;code&gt;spring-data&lt;/code&gt; + &lt;code&gt;Mongodb&lt;/code&gt;를 공부하면서 다시 이 이슈가 등장하였다.&lt;/p&gt;
&lt;p&gt;Kotlin + Spring 하면서 코틀린의 class 가 final로 되는 부분과 스프링에서 빈을 처리하기위해 클래스를 까발리는(?) 부분에서 문제가 생긴다. &lt;code&gt;final class&lt;/code&gt; 는 조작이 안되기 때문에!?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;&amp;gt; mvn spring-boot:run

[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------&amp;lt; com.microservices:chapter5 &amp;gt;---------------------
[INFO] Building chapter5 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] &amp;gt;&amp;gt;&amp;gt; spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) &amp;gt; test-compile @ chapter5 &amp;gt;&amp;gt;&amp;gt;
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ chapter5 ---
[INFO] Using &amp;#39;UTF-8&amp;#39; encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ chapter5 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- kotlin-maven-plugin:1.3.31:compile (compile) @ chapter5 ---
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (compile) @ chapter5 ---
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ chapter5 ---
[INFO] Using &amp;#39;UTF-8&amp;#39; encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\dev\projects\kotlin-micro-service\chapter5\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ chapter5 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\dev\projects\kotlin-micro-service\chapter5\target\test-classes
[INFO]
[INFO] --- kotlin-maven-plugin:1.3.31:test-compile (test-compile) @ chapter5 ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (testCompile) @ chapter5 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\dev\projects\kotlin-micro-service\chapter5\target\test-classes
[INFO]
[INFO] &amp;lt;&amp;lt;&amp;lt; spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) &amp;lt; test-compile @ chapter5 &amp;lt;&amp;lt;&amp;lt;
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) @ chapter5 ---

  .   ____          _            __ _ _
 /\\ / ___&amp;#39;_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | &amp;#39;_ | &amp;#39;_| | &amp;#39;_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  &amp;#39;  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.5.RELEASE)

0000-00-00 00:00:46.552  INFO 5708 --- [           main] c.m.chapter5.Chapter5ApplicationKt       : Starting Chapter5ApplicationKt on ANTOP-GRAM with PID 5708 (D:\dev\projects\kotlin-micro-service\chapter5\target\classes started by antop in D:\dev\projects\kotlin-m
icro-service\chapter5)
0000-00-00 00:00:46.556  INFO 5708 --- [           main] c.m.chapter5.Chapter5ApplicationKt       : No active profile set, falling back to default profiles: default
0000-00-00 00:00:46.739  WARN 5708 --- [kground-preinit] o.s.h.c.j.Jackson2ObjectMapperBuilder    : For Jackson Kotlin classes support please add &amp;quot;com.fasterxml.jackson.module:jackson-module-kotlin&amp;quot; to the classpath
0000-00-00 00:00:47.090  INFO 5708 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
0000-00-00 00:00:47.126  INFO 5708 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 29ms. Found 0 repository interfaces.
0000-00-00 00:00:47.132  INFO 5708 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
0000-00-00 00:00:47.137  INFO 5708 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4ms. Found 0 repository interfaces.
0000-00-00 00:00:48.799  INFO 5708 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout=&amp;#39;30000 ms&amp;#39;, maxWaitQueueSize=500}
0000-00-00 00:00:49.003  INFO 5708 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout=&amp;#39;30000 ms&amp;#39;, maxWaitQueueSize=500}
0000-00-00 00:00:49.056  INFO 5708 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:16}] to localhost:27017
0000-00-00 00:00:49.063  INFO 5708 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=Server
Version{versionList=[4, 0, 9]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=4861938}
0000-00-00 00:00:49.491  INFO 5708 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:17}] to localhost:27017
0000-00-00 00:00:49.493  INFO 5708 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=Server
Version{versionList=[4, 0, 9]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=2452559}
0000-00-00 00:00:49.643  INFO 5708 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:18}] to localhost:27017
0000-00-00 00:00:49.643  INFO 5708 --- [ntLoopGroup-2-3] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:4, serverValue:19}] to localhost:27017
0000-00-00 00:00:49.645  INFO 5708 --- [ntLoopGroup-2-4] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:5, serverValue:20}] to localhost:27017
0000-00-00 00:00:49.652  WARN 5708 --- [           main] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating be
an with name &amp;#39;customerHandler&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerHandler.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework
.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean
 with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigExcepti
on: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class com.m
icroservices.chapter5.CustomerRepository
0000-00-00 00:00:49.665  WARN 5708 --- [ntLoopGroup-2-3] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:4, serverValue:19}] to localhost:27017. All connections to localhost:27017 will be closed.
0000-00-00 00:00:49.665  WARN 5708 --- [ntLoopGroup-2-4] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:5, serverValue:20}] to localhost:27017. All connections to localhost:27017 will be closed.
0000-00-00 00:00:49.665  WARN 5708 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:3, serverValue:18}] to localhost:27017. All connections to localhost:27017 will be closed.
0000-00-00 00:00:49.672 ERROR 5708 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Callback onResult call produced an error

java.lang.IllegalStateException: state should be: open
        at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.invalidate(DefaultServer.java:125) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.handleThrowable(DefaultServer.java:163) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.access$600(DefaultServer.java:45) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:223) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:83) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:461) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:111) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:361) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:356) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:603) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:593) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$5.failed(InternalStreamConnection.java:500) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:232) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:266) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.access$600(NettyStream.java:66) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:153) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:150) [mongodb-driver-core-3.8.2.jar:na]
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:502) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:476) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:415) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:540) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:529) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:101) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1183) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:769) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:745) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:616) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.closeAll(NioEventLoop.java:730) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:509) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191-1-ojdkbuild]

0000-00-00 00:00:49.672 ERROR 5708 --- [ntLoopGroup-2-3] org.mongodb.driver.connection            : Callback onResult call produced an error

java.lang.IllegalStateException: state should be: open
        at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.invalidate(DefaultServer.java:125) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.handleThrowable(DefaultServer.java:163) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.access$600(DefaultServer.java:45) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:223) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:83) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:461) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:111) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:361) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:356) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:603) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:593) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$5.failed(InternalStreamConnection.java:500) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:232) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:266) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.access$600(NettyStream.java:66) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:153) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:150) [mongodb-driver-core-3.8.2.jar:na]
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:502) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:476) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:415) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:540) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:529) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:101) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1183) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:769) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:745) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:616) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.closeAll(NioEventLoop.java:730) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:509) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191-1-ojdkbuild]

0000-00-00 00:00:49.672 ERROR 5708 --- [ntLoopGroup-2-4] org.mongodb.driver.connection            : Callback onResult call produced an error

java.lang.IllegalStateException: state should be: open
        at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.invalidate(DefaultServer.java:125) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.handleThrowable(DefaultServer.java:163) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer.access$600(DefaultServer.java:45) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:223) ~[mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:83) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:461) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:111) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:361) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:356) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:603) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:593) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$5.failed(InternalStreamConnection.java:500) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:232) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:266) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream.access$600(NettyStream.java:66) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:153) [mongodb-driver-core-3.8.2.jar:na]
        at com.mongodb.connection.netty.NettyStream$2$1.operationComplete(NettyStream.java:150) [mongodb-driver-core-3.8.2.jar:na]
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:502) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:476) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:415) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:540) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:529) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:101) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1183) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:769) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:745) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:616) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.closeAll(NioEventLoop.java:730) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:509) [netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.36.Final.jar:4.1.36.Final]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191-1-ojdkbuild]

0000-00-00 00:00:51.886  INFO 5708 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with &amp;#39;debug&amp;#39; enabled.
0000-00-00 00:00:51.892 ERROR 5708 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerHandler&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerHandler.class]: Unsatisfied dependency
 expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; nested except
ion is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization of
bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested
 exception is java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1341) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:843) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:67) ~[spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at com.microservices.chapter5.Chapter5ApplicationKt.main(Chapter5Application.kt:12) [classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191-1-ojdkbuild]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191-1-ojdkbuild]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191-1-ojdkbuild]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191-1-ojdkbuild]
        at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:558) [spring-boot-maven-plugin-2.1.5.RELEASE.jar:2.1.5.RELEASE]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191-1-ojdkbuild]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; nested exception is org.springframework.beans.factory.BeanCreation
Exception: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization of bean failed; nested exception is org.springframework.
aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Can
not subclass final class com.microservices.chapter5.CustomerRepository
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1411) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1248) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1168) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        ... 25 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization
 of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; ne
sted exception is java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1248) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1168) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        ... 39 common frames omitted
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lan
g.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
        at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:208) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor.postProcessAfterInitialization(AbstractAdvisingBeanPostProcessor.java:92) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:429) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        ... 48 common frames omitted
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
        at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:657) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$ClassLoaderAwareUndeclaredThrowableStrategy.generate(CglibAopProxy.java:1007) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:358) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:582) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_191-1-ojdkbuild]
        at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:569) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:416) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        ... 53 common frames omitted

[WARNING]
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerHandler&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerHandler.class]: Unsatisfied
 dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; ne
sted exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initial
ization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible cl
ass; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:769)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1187)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:843)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549)
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh (ReactiveWebServerApplicationContext.java:67)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1248)
    at com.microservices.chapter5.Chapter5ApplicationKt.main (Chapter5Application.kt:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; nested exception is org.springframework.beans.factory.BeanCreation
Exception: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization of bean failed; nested exception is org.springframework.
aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Can
not subclass final class com.microservices.chapter5.CustomerRepository
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:596)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1411)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:760)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1187)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:843)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549)
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh (ReactiveWebServerApplicationContext.java:67)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1248)
    at com.microservices.chapter5.Chapter5ApplicationKt.main (Chapter5Application.kt:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in file [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization
 of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; ne
sted exception is java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:601)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:593)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1411)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:760)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1187)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:843)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549)
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh (ReactiveWebServerApplicationContext.java:67)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1248)
    at com.microservices.chapter5.Chapter5ApplicationKt.main (Chapter5Application.kt:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lan
g.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
    at org.springframework.aop.framework.CglibAopProxy.getProxy (CglibAopProxy.java:208)
    at org.springframework.aop.framework.ProxyFactory.getProxy (ProxyFactory.java:110)
    at org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor.postProcessAfterInitialization (AbstractAdvisingBeanPostProcessor.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization (AbstractAutowireCapableBeanFactory.java:429)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1782)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:593)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1411)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:760)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1187)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:843)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549)
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh (ReactiveWebServerApplicationContext.java:67)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1248)
    at com.microservices.chapter5.Chapter5ApplicationKt.main (Chapter5Application.kt:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository
    at org.springframework.cglib.proxy.Enhancer.generateClass (Enhancer.java:657)
    at org.springframework.cglib.transform.TransformingClassGenerator.generateClass (TransformingClassGenerator.java:33)
    at org.springframework.cglib.core.DefaultGeneratorStrategy.generate (DefaultGeneratorStrategy.java:25)
    at org.springframework.aop.framework.CglibAopProxy$ClassLoaderAwareUndeclaredThrowableStrategy.generate (CglibAopProxy.java:1007)
    at org.springframework.cglib.core.AbstractClassGenerator.generate (AbstractClassGenerator.java:358)
    at org.springframework.cglib.proxy.Enhancer.generate (Enhancer.java:582)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply (AbstractClassGenerator.java:110)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply (AbstractClassGenerator.java:108)
    at org.springframework.cglib.core.internal.LoadingCache$2.call (LoadingCache.java:54)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at org.springframework.cglib.core.internal.LoadingCache.createEntry (LoadingCache.java:61)
    at org.springframework.cglib.core.internal.LoadingCache.get (LoadingCache.java:34)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get (AbstractClassGenerator.java:134)
    at org.springframework.cglib.core.AbstractClassGenerator.create (AbstractClassGenerator.java:319)
    at org.springframework.cglib.proxy.Enhancer.createHelper (Enhancer.java:569)
    at org.springframework.cglib.proxy.Enhancer.createClass (Enhancer.java:416)
    at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance (ObjenesisCglibAopProxy.java:57)
    at org.springframework.aop.framework.CglibAopProxy.getProxy (CglibAopProxy.java:205)
    at org.springframework.aop.framework.ProxyFactory.getProxy (ProxyFactory.java:110)
    at org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor.postProcessAfterInitialization (AbstractAdvisingBeanPostProcessor.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization (AbstractAutowireCapableBeanFactory.java:429)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1782)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:593)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1411)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1248)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1168)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:760)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1187)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:843)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549)
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh (ReactiveWebServerApplicationContext.java:67)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1248)
    at com.microservices.chapter5.Chapter5ApplicationKt.main (Chapter5Application.kt:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:558)
    at java.lang.Thread.run (Thread.java:748)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17.050 s
[INFO] Finished at: 2019-05-26T11:40:53+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) on project chapter5: An exception occurred while running. null: InvocationTargetException: Error creating bean with name &amp;#39;customerHandler&amp;#39; defined in fi
le [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerHandler.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyExceptio
n: Error creating bean with name &amp;#39;customerServiceImpl&amp;#39;: Unsatisfied dependency expressed through field &amp;#39;customerRepository&amp;#39;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;customerRepository&amp;#39; defined in f
ile [D:\dev\projects\kotlin-micro-service\chapter5\target\classes\com\microservices\chapter5\CustomerRepository.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of cla
ss com.microservices.chapter5.CustomerRepository: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class com.microservices.chapter5.CustomerRepository -&amp;gt;
[Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이런다고 &lt;code&gt;CustomerRepositroy&lt;/code&gt; 클리스에 &lt;code&gt;open&lt;/code&gt; 을 달아주면?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;@Repository
open class CustomerRepository(private val template: ReactiveMongoTemplate) {

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;런타임에 아래와 같이 &lt;code&gt;NullPointException&lt;/code&gt;이 발생하게 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;java.lang.NullPointerException: null
        at com.microservices.chapter5.CustomerRepository.findCustomer(CustomerRepository.kt:48) ~[classes/:na]
        at com.microservices.chapter5.CustomerServiceImpl.searchCustomers(CustomerServiceImpl.kt:21) ~[classes/:na]
        at com.microservices.chapter5.CustomerHandler.search(CustomerHandler.kt:32) ~[classes/:na]
        at com.microservices.chapter5.CustomerRouter$customerRoutes$1$2$1.invoke(CustomerRouter.kt:17) ~[classes/:na]
        at com.microservices.chapter5.CustomerRouter$customerRoutes$1$2$1.invoke(CustomerRouter.kt:8) ~[classes/:na]
        at org.springframework.web.reactive.function.server.RouterFunctionDsl$GET$1.handle(RouterFunctionDsl.kt:158) ~[spring-webflux-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.web.reactive.function.server.support.HandlerFunctionAdapter.handle(HandlerFunctionAdapter.java:61) ~[spring-webflux-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.web.reactive.DispatcherHandler.invokeHandler(DispatcherHandler.java:166) ~[spring-webflux-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at org.springframework.web.reactive.DispatcherHandler.lambda$handle$1(DispatcherHandler.java:151) ~[spring-webflux-5.1.7.RELEASE.jar:5.1.7.RELEASE]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2066) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:138) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1874) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1748) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onSubscribe(FluxPeekFuseable.java:172) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Mono.subscribe(Mono.java:3710) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Operators.complete(Operators.java:131) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:45) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Mono.subscribe(Mono.java:3710) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.Mono.subscribe(Mono.java:3710) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.9.RELEASE.jar:3.2.9.RELEASE]
        at reactor.netty.http.server.HttpServerHandle.onStateChange(HttpServerHandle.java:64) ~[reactor-netty-0.8.8.RELEASE.jar:0.8.8.RELEASE]
        at reactor.netty.tcp.TcpServerBind$ChildObserver.onStateChange(TcpServerBind.java:226) ~[reactor-netty-0.8.8.RELEASE.jar:0.8.8.RELEASE]
        at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:442) ~[reactor-netty-0.8.8.RELEASE.jar:0.8.8.RELEASE]
        at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:91) ~[reactor-netty-0.8.8.RELEASE.jar:0.8.8.RELEASE]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:161) ~[reactor-netty-0.8.8.RELEASE.jar:0.8.8.RELEASE]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323) ~[netty-codec-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297) ~[netty-codec-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) ~[netty-transport-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) ~[netty-common-4.1.36.Final.jar:4.1.36.Final]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.36.Final.jar:4.1.36.Final]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_191-1-ojdkbuild]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;kotlin-mavn-plugin&lt;/code&gt;의 &lt;code&gt;configuration&lt;/code&gt; 부분부터 아래와 같이 추가&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.jetbrains.kotlin&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;kotlin-maven-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;${kotlin.version}&amp;lt;/version&amp;gt;
                &amp;lt;executions&amp;gt;
                    ...
                &amp;lt;/executions&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;jvmTarget&amp;gt;1.8&amp;lt;/jvmTarget&amp;gt;
                    &amp;lt;!-- https://stackoverflow.com/questions/52599769/spring-kotlin-bean-fields-are-null-at-runtime-despite-being-injected-during-in --&amp;gt;
                    &amp;lt;!-- https://dzone.com/articles/open-your-classes-and-methods-in-kotlin --&amp;gt;
                    &amp;lt;!-- https://blog.frankel.ch/open-your-classes-and-methods-in-kotlin/ --&amp;gt;
                    &amp;lt;compilerPlugins&amp;gt;
                        &amp;lt;plugin&amp;gt;spring&amp;lt;/plugin&amp;gt;
                    &amp;lt;/compilerPlugins&amp;gt;
                &amp;lt;/configuration&amp;gt;
                &amp;lt;dependencies&amp;gt;
                    &amp;lt;!-- https://www.baeldung.com/kotlin-allopen-spring --&amp;gt;
                    &amp;lt;dependency&amp;gt;
                        &amp;lt;groupId&amp;gt;org.jetbrains.kotlin&amp;lt;/groupId&amp;gt;
                        &amp;lt;artifactId&amp;gt;kotlin-maven-allopen&amp;lt;/artifactId&amp;gt;
                        &amp;lt;version&amp;gt;${kotlin.version}&amp;lt;/version&amp;gt;
                    &amp;lt;/dependency&amp;gt;
                &amp;lt;/dependencies&amp;gt;
            &amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;mvn clean spring-boot:run&lt;/code&gt; 으로 실행했을 때 아래와 같은 로그가 나와야 한다..&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;[INFO] --- kotlin-maven-plugin:1.3.31:compile (compile) @ chapter5 ---
[INFO] Applied plugin: &amp;#39;spring&amp;#39;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.microservices:chapter5:jar:0.0.1-SNAPSHOT
[WARNING] &amp;#39;dependencies.dependency.(groupId:artifactId:type:classifier)&amp;#39; must be unique: org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar -&amp;gt; duplicate declaration of version ${kotlin.version} @ line 58, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ---------------------&amp;lt; com.microservices:chapter5 &amp;gt;---------------------
[INFO] Building chapter5 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] &amp;gt;&amp;gt;&amp;gt; spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) &amp;gt; test-compile @ chapter5 &amp;gt;&amp;gt;&amp;gt;
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ chapter5 ---
[INFO] Using &amp;#39;UTF-8&amp;#39; encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- kotlin-maven-plugin:1.3.31:compile (compile) @ chapter5 ---
[INFO] Applied plugin: &amp;#39;spring&amp;#39;
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (compile) @ chapter5 ---
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ chapter5 ---
[INFO] Using &amp;#39;UTF-8&amp;#39; encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\dev\projects\kotlin-micro-service\chapter5\src\test\resources
[INFO]
[INFO] --- kotlin-maven-plugin:1.3.31:test-compile (test-compile) @ chapter5 ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (testCompile) @ chapter5 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\dev\projects\kotlin-micro-service\chapter5\target\test-classes
[INFO]
[INFO] &amp;lt;&amp;lt;&amp;lt; spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) &amp;lt; test-compile @ chapter5 &amp;lt;&amp;lt;&amp;lt;
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.5.RELEASE:run (default-cli) @ chapter5 ---

  .   ____          _            __ _ _
 /\\ / ___&amp;#39;_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | &amp;#39;_ | &amp;#39;_| | &amp;#39;_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  &amp;#39;  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.5.RELEASE)

0000-00-00 00:00:48.664  INFO 18644 --- [           main] c.m.chapter5.Chapter5ApplicationKt       : Starting Chapter5ApplicationKt on ANTOP-GRAM with PID 18644 (D:\dev\projects\kotlin-micro-service\chapter5\target\classes started by antop in D:\dev\projects\kotlin
-micro-service\chapter5)
0000-00-00 00:00:48.669  INFO 18644 --- [           main] c.m.chapter5.Chapter5ApplicationKt       : No active profile set, falling back to default profiles: default
0000-00-00 00:00:48.863  WARN 18644 --- [kground-preinit] o.s.h.c.j.Jackson2ObjectMapperBuilder    : For Jackson Kotlin classes support please add &amp;quot;com.fasterxml.jackson.module:jackson-module-kotlin&amp;quot; to the classpath
0000-00-00 00:00:49.187  INFO 18644 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
0000-00-00 00:00:49.217  INFO 18644 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 25ms. Found 0 repository interfaces.
0000-00-00 00:00:49.222  INFO 18644 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
0000-00-00 00:00:49.225  INFO 18644 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3ms. Found 0 repository interfaces.
0000-00-00 00:00:50.869  INFO 18644 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout=&amp;#39;30000 ms&amp;#39;, maxWaitQueueSize=500}
0000-00-00 00:00:51.073  INFO 18644 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout=&amp;#39;30000 ms&amp;#39;, maxWaitQueueSize=500}
0000-00-00 00:00:51.118  INFO 18644 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:1}] to localhost:27017
0000-00-00 00:00:51.124  INFO 18644 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=Serve
rVersion{versionList=[4, 0, 9]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=3995240}
0000-00-00 00:00:51.538  INFO 18644 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:2}] to localhost:27017
0000-00-00 00:00:51.545  INFO 18644 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=Serve
rVersion{versionList=[4, 0, 9]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=5762049}
0000-00-00 00:00:51.657  INFO 18644 --- [ntLoopGroup-2-4] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:5, serverValue:5}] to localhost:27017
0000-00-00 00:00:51.657  INFO 18644 --- [ntLoopGroup-2-3] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:4, serverValue:4}] to localhost:27017
0000-00-00 00:00:51.657  INFO 18644 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:3}] to localhost:27017
0000-00-00 00:00:52.261  INFO 18644 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
0000-00-00 00:00:52.265  INFO 18644 --- [           main] c.m.chapter5.Chapter5ApplicationKt       : Started Chapter5ApplicationKt in 4.106 seconds (JVM running for 14.602)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java+/Trouble Shooting</category>
      <category>Kotlin</category>
      <category>Open</category>
      <category>Spring</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/188</guid>
      <comments>https://antop.tistory.com/entry/Kotlin-Spring-Maven-configuration#entry188comment</comments>
      <pubDate>Sun, 26 May 2019 11:55:48 +0900</pubDate>
    </item>
    <item>
      <title>Installation Vue.js (Eclipse)</title>
      <link>https://antop.tistory.com/entry/Installation-Vuejs-Eclipse</link>
      <description>&lt;p&gt;&lt;b style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;Eclipse 에서 Vue.js 개발 환경을 구축해보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; font-size: 16px; text-align: justify;&quot;&gt;Preparation&lt;/b&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify; &quot;&gt;&lt;font color=&quot;#222222&quot; face=&quot;NanumGothic, 나눔고딕, Malgun Gothic, 맑은 고딕, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, Trebuchet MS&quot;&gt;이클립스는 JavaScript and Web Developers 패키지로 받았다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9988C9505B06A33F0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9988C9505B06A33F0E&quot; width=&quot;750&quot; height=&quot;350&quot; filename=&quot;sshot-2018-05-23-[16-55-02].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 535px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991313505B06A3401A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991313505B06A3401A&quot; width=&quot;535&quot; height=&quot;471&quot; filename=&quot;sshot-2018-05-23-[17-28-00].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;npm을 어디서든사용할 수 있도록 nodejs를 받아서 Path 환경 변수에 등록하자.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 34, 34); font-family: NanumGothic, 나눔고딕, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, Dotum, 돋움, Gulim, 굴림, Verdana, Arial, &amp;quot;Trebuchet MS&amp;quot;; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 527px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997B33495B06A3EE04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997B33495B06A3EE04&quot; width=&quot;527&quot; height=&quot;416&quot; filename=&quot;sshot-2018-05-23-[17-20-06].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Install CodeMix Plugin&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Eclipse Marketplace(Help - Eclipse Marketplace...)에서 vue를 검색하면 플러그인이 나온다. (하나만 있는듯? -_-)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;With CodeMix, unlock a wide array of technologies from Visual Studio Code and add-on extensions built for Code OSS directly inside your Eclipse IDE.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- First class JavaScript coding &amp;amp; debugging&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- Vastly improved HTML and CSS editing&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- New languages including TypeScript, PHP and Python&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- New frameworks from React and Vue.js to Angular&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- New UX patterns like the Quick Open shortcuts&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;- As-you-type content assist&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 512px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AD70465B06A52612&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AD70465B06A52612&quot; width=&quot;512&quot; height=&quot;332&quot; filename=&quot;sshot-2018-05-23-[17-54-50].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;라이선스.. 네네...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 512px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951AC465B06A52733&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951AC465B06A52733&quot; width=&quot;512&quot; height=&quot;429&quot; filename=&quot;sshot-2018-05-23-[18-08-26].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치 후 재시작 해준다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 518px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995CDF465B06A5271A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995CDF465B06A5271A&quot; width=&quot;518&quot; height=&quot;141&quot; filename=&quot;sshot-2018-05-23-[18-09-37].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;재시작 하면 CodeMix 에 대한 설명+설정이 나온다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E0E9465B06A52723&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E0E9465B06A52723&quot; width=&quot;750&quot; height=&quot;445&quot; filename=&quot;sshot-2018-05-23-[18-20-11].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996C88465B06A52831&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996C88465B06A52831&quot; width=&quot;750&quot; height=&quot;445&quot; filename=&quot;sshot-2018-05-23-[18-20-14].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D42E465B06A5280E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D42E465B06A5280E&quot; width=&quot;750&quot; height=&quot;445&quot; filename=&quot;sshot-2018-05-23-[18-20-18].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Create Vue project&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;File - New - Project&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 511px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ECED3E5B06A72311&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ECED3E5B06A72311&quot; width=&quot;511&quot; height=&quot;493&quot; filename=&quot;sshot-2018-05-23-[18-20-59].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프로젝트 이름 입력 후 Finish&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 511px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E44F4F5B06A6DD34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E44F4F5B06A6DD34&quot; width=&quot;511&quot; height=&quot;493&quot; filename=&quot;sshot-2018-05-23-[18-21-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래와 같은 구조로 프로젝트가 만들어진다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 314px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CD703B5B06AD6F3A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CD703B5B06AD6F3A&quot; width=&quot;314&quot; height=&quot;177&quot; filename=&quot;sshot-2018-05-24-[21-02-18].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;프로젝트에서 마우스 오른쪽 버튼 - Run As - npm Install 클릭.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 406px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992D2C3B5B06AD6F34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992D2C3B5B06AD6F34&quot; width=&quot;406&quot; height=&quot;155&quot; filename=&quot;sshot-2018-05-24-[21-02-42].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프로젝트에 필요한 모듈들을 설치하게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt;Microsoft Windows [Version 10.0.16299.309]
(c) 2017 Microsoft Corporation. All rights reserved.

D:\dev\workspace\vue.js&amp;gt;npm install

&amp;gt; node-sass@4.9.0 install D:\dev\workspace\vue.js\node_modules\node-sass
&amp;gt; node scripts/install.js

Cached binary found at C:\Users\Antop\AppData\Roaming\npm-cache\node-sass\4.9.0\win32-x64-57_binding.node

&amp;gt; uglifyjs-webpack-plugin@0.4.6 postinstall D:\dev\workspace\vue.js\node_modules\uglifyjs-webpack-plugin
&amp;gt; node lib/post_install.js


&amp;gt; node-sass@4.9.0 postinstall D:\dev\workspace\vue.js\node_modules\node-sass
&amp;gt; node scripts/build.js

Binary found at D:\dev\workspace\vue.js\node_modules\node-sass\vendor\win32-x64-57\binding.node
Testing binary
Binary is fine
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;win32&quot;,&quot;arch&quot;:&quot;x64&quot;})

added 891 packages in 151.496s

D:\dev\workspace\vue.js&amp;gt;exit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;node_modules 라는 디렉터리가 생성되고 하위에 필요한 모듈들이 들어있다. (이 디렉터리는 VCS에 포함시키지 말자!)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 314px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995537505B06AEBE16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995537505B06AEBE16&quot; width=&quot;314&quot; height=&quot;201&quot; filename=&quot;sshot-2018-05-24-[21-22-04].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;package.json - dev 에서 마우스 오른쪽 버튼. Run As - npm Script&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 432px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99949E4E5B06AFFE22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99949E4E5B06AFFE22&quot; width=&quot;432&quot; height=&quot;225&quot; filename=&quot;sshot-2018-05-24-[21-25-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래와 같이 Console이 나오게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt;Microsoft Windows [Version 10.0.16299.309]
(c) 2017 Microsoft Corporation. All rights reserved.

D:\dev\workspace\vue.js&amp;gt;npm run-script dev

&amp;gt; vue-hello-world@1.0.0 dev D:\dev\workspace\vue.js
&amp;gt; cross-env NODE_ENV=development webpack-dev-server --open --hot

Project is running at  [1m [34mhttp://localhost:8080/ [39m [22m
webpack output is served from  [1m [34m/dist/ [39m [22m
404s will fallback to  [1m [34m/index.html [39m [22m&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;브라우저가 자동으로 실행되고 아래와 같이 나온다면 성공!&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C8364E5B06AFFE03&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C8364E5B06AFFE03&quot; width=&quot;750&quot; height=&quot;482&quot; filename=&quot;sshot-2018-05-24-[21-25-36].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Study/Vue.js</category>
      <category>codemix</category>
      <category>Eclipse</category>
      <category>Vue.js</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/187</guid>
      <comments>https://antop.tistory.com/entry/Installation-Vuejs-Eclipse#entry187comment</comments>
      <pubDate>Thu, 24 May 2018 21:32:24 +0900</pubDate>
    </item>
    <item>
      <title>Installation Vue.js (WebStorm + Vue CLI)</title>
      <link>https://antop.tistory.com/entry/Installation-Vuejs-WebStorm-Vue-CLI</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.jetbrains.com/webstorm/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;WebStorm&lt;/a&gt; + &lt;a href=&quot;https://vuejs.org/v2/guide/installation.html#CLI&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Vue CLI&lt;/a&gt;를 이용해서 Vue.js 개발 환경을 구축해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;Vue.js는 단일 페이지 응용 프로그램을 빠르게 스캐폴딩하기 위한 &lt;a href=&quot;https://github.com/vuejs/vue-cli&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;공식 CLI&lt;/a&gt;를 제공합니다. 현대적인 프론트엔드 워크플로우를 위해 잘 구성된 빌드 설정을 제공합니다. 핫 리로드, lint-on-save 및 프로덕션 준비가 된 빌드로 시작하고 실행하는데 몇 분 밖에 걸리지 않습니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;처음 CLI 를 접하기 전에 사전 지식을 필요로 하니 당장 Vue.js 만 공부하려면 순수 HTML, CSS, Javascript 로 구성해서 학습하는 것도 괜찮을 것 같다. (난 사전 지식 없는데 왜 이걸로 하고 있지... ㅠㅠ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory warn&quot;&gt;&lt;p&gt;CLI는 Node.js 및 관련 빌드 도구에 대한 사전 지식을 필요로 합니다. Vue 또는 프런트엔드 빌드 도구를 처음 사용하는 경우 CLI를 사용하기 전에 빌드 도구없이 &lt;a href=&quot;https://kr.vuejs.org/v2/guide/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;가이드&lt;/a&gt;를 읽어 보시기 바랍니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;Preparation&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://nodejs.org/ko/download/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Node.js&lt;/a&gt;가 필요하다. 다운로드 받은 후 환경변수 PATH 등록 해두자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 527px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B4D3415B022F8E07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B4D3415B022F8E07&quot; width=&quot;527&quot; height=&quot;276&quot; filename=&quot;sshot-2018-05-21-[10-42-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;vue-cli 를 설치한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt;D:\&amp;gt;npm install --global vue-cli
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to &quot;coffeescript&quot; (no hyphen)
D:\develoment\tools\node-v8.11.2-win-x64\vue-list -&amp;gt; D:\develoment\tools\node-v8.11.2-win-x64\node_modules\vue-cli\bin\vue-list
D:\develoment\tools\node-v8.11.2-win-x64\vue -&amp;gt; D:\develoment\tools\node-v8.11.2-win-x64\node_modules\vue-cli\bin\vue
D:\develoment\tools\node-v8.11.2-win-x64\vue-init -&amp;gt; D:\develoment\tools\node-v8.11.2-win-x64\node_modules\vue-cli\bin\vue-init
+ vue-cli@2.9.3
added 258 packages in 27.115s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Create Vue.js &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Project&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;WebStorm 실행 후 프로젝트를 새로 생성한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997EDA4B5B0224B116&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997EDA4B5B0224B116&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[10-40-38].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Location: 프로젝트의 디렉터리&lt;/p&gt;&lt;p&gt;Node interpreter : node.exe 파일의 위치&lt;/p&gt;&lt;p&gt;vue-cli or @vue/cli: vue-cli 모듈의 위치. 위에서 vue-cli 를 설치 했으면 자동으로 인식 된다.&lt;/p&gt;&lt;p&gt;Project template: 만들어질 프로젝트 기본 템플릿 6가지&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/browserify&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;browserify&lt;/a&gt;&amp;nbsp;: hot-reload, linting 및 단위 테스팅 등 대부분의 기능을 갖춘 Browserify + vueify 설정.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/browserify-simple&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;browserify-simple&lt;/a&gt;&amp;nbsp;: 단순히 Browserify와 vueify만 포함. 빠르게 프로토타입을 만들 때 사용한다.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/pwa&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;pwa&lt;/a&gt;&amp;nbsp;: ot-reload, linting, 테스트 및 CSS 추출 기능을 갖춘 대부분의 기능을 갖추고 있는 Webpack + &lt;a href=&quot;https://developers.google.com/web/progressive-web-apps/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;PWA&lt;/a&gt; 템플릿.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/simple&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;simple&lt;/a&gt;&amp;nbsp;: 가장 단순하게 한 HTML 파일에 Vue 설정을 담고 있다.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/webpack&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;webpack&lt;/a&gt;&amp;nbsp;: hot-reload, linting, 테스트 및 CSS 추출 기능을 갖춘 대부분의 기능을 갖추고 있는 Webpack + vue-loader 설정.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/vuejs-templates/webpack-simple&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;webpack-simple&lt;/a&gt;&amp;nbsp;: 단순히 Webpack과 vue-loader만 포함한다.&amp;nbsp;빠르게 프로토타입을 만들 때 사용한다.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992416465B02327C13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992416465B02327C13&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-43-20].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;프로젝트 이름...&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991432465B02327C14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991432465B02327C14&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-43-47].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프로젝트 설명...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993C6F345B02337707&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993C6F345B02337707&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-48-04].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;작성자 이름...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993A64475B0233C71D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993A64475B0233C71D&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-49-29].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Vue build&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Runtime + Compiler : 일반 적인 대부분 사용자에게 권한다.&lt;/li&gt;&lt;li&gt;Runtime-only : 약 6KB 안되는 용량. 하지만 템플릿(.vue)만 사용할 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;tx-quote-tistory warn&quot;&gt;&lt;p&gt;개발 중에는 최소화 버전을 사용하지 마십시오. 일반적인 실수에 대한 모든 훌륭한 경고를 놓치게됩니다!&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;현재는 개발(공부) 용도이기 때문에 Runtime + Compiler 선택...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99077B4D5B0234DA14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99077B4D5B0234DA14&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-53-40].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해시(#) URL이나 HTML5 History 등을 이용하여 SPA에서 페이지 네비게이션 기능을 vue.js에서 사용하고 싶을 때 쓰는 &lt;a href=&quot;https://router.vuejs.org/kr/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;vue-router&lt;/a&gt;&amp;nbsp;모듈을&amp;nbsp;설치할 것인지 여부이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FAAA375B0235F22D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FAAA375B0235F22D&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-58-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;자바스크립트 코딩 스타일과 에러를 체크하는 &lt;a href=&quot;https://eslint.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;ESLint&lt;/a&gt;를 사용할 지 여부.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991F4C4E5B02372928&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991F4C4E5B02372928&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[11-58-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ESLint 를 사용한다면 어떤 코딩 스타일&amp;nbsp;세팅(preset)을 사용할지 선택하는 단계이다.&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;Standard :&amp;nbsp;&lt;a href=&quot;https://github.com/standard/standard&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/standard/standard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Airbnb :&amp;nbsp;&lt;a href=&quot;https://github.com/airbnb/javascript&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/airbnb/javascript&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BA84445B0237B105&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BA84445B0237B105&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[12-04-59].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;단위 테스트를 사용할 지 여부.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E0D23B5B023A0030&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E0D23B5B023A0030&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[12-15-39].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;어떤 테스트기(test runner)를 사용할 지 선택한다.&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://facebook.github.io/jest/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Jest&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://karma-runner.github.io/2.0/index.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Karma&lt;/a&gt; and &lt;a href=&quot;https://mochajs.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Mocha&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E0103B5B023A0111&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E0103B5B023A0111&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[12-15-44].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://nightwatchjs.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Nightwatch&lt;/a&gt;를 이용하여 e2e(End-to-End)&amp;nbsp;테스트를 할 수 있도록 설정할 것인지 여부.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951363D5B023BFB38&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951363D5B023BFB38&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[12-22-45].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;프로젝트가 생성된 후에 NPM 을 사용할 것인지 물어본다...&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 668px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9973FD3D5B023BFB26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9973FD3D5B023BFB26&quot; width=&quot;668&quot; height=&quot;487&quot; filename=&quot;sshot-2018-05-21-[12-23-22].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 프로젝트가 만들어졌다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;IDE 우측 하단의 알람을 보면 종속 모듈을 설치해야 한다고 한다. Run 'npm install' 을 클릭 하거나 Terminal 에서 직접 커맨드를 입력해서 설치하면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 388px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999A25385B02400004&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999A25385B02400004&quot; width=&quot;388&quot; height=&quot;147&quot; filename=&quot;sshot-2018-05-21-[12-23-52].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Terminal 에서 직접 npm install 했을 때 내용은 대충... 아래와 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt;&amp;gt;npm install
npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0
npm WARN notice [SECURITY] mime has 1 moderate vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=mime&amp;amp;version=1.3.6 - Run `npm i npm@latest -g` to upgrade your npm version, and then `
npm audit` to get more info.
npm WARN notice [SECURITY] https-proxy-agent has 1 high vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=https-proxy-agent&amp;amp;version=1.0.0 - Run `npm i npm@latest -g` to upgrade your n
pm version, and then `npm audit` to get more info.
npm WARN notice [SECURITY] http-proxy-agent has 1 high vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=http-proxy-agent&amp;amp;version=1.0.0 - Run `npm i npm@latest -g` to upgrade your npm
 version, and then `npm audit` to get more info.
npm WARN notice [SECURITY] debug has 1 low vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=debug&amp;amp;version=2.2.0 - Run `npm i npm@latest -g` to upgrade your npm version, and then `npm
 audit` to get more info.
npm WARN notice [SECURITY] macaddress has 1 critical vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=macaddress&amp;amp;version=0.2.8 - Run `npm i npm@latest -g` to upgrade your npm version
, and then `npm audit` to get more info.
npm WARN notice [SECURITY] growl has 1 critical vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=growl&amp;amp;version=1.9.2 - Run `npm i npm@latest -g` to upgrade your npm version, and then
 `npm audit` to get more info.

&amp;gt; chromedriver@2.38.3 install D:\dev\projects\vue\node_modules\chromedriver
&amp;gt; node install.js

Downloading https://chromedriver.storage.googleapis.com/2.38/chromedriver_win32.zip
Saving to C:\Users\Antop\AppData\Local\Temp\chromedriver\chromedriver_win32.zip
Received 781K...
Received 1568K...
Received 2352K...
Received 3136K...
Received 3299K total.
Extracting zip contents
Copying to target path D:\dev\projects\vue\node_modules\chromedriver\lib\chromedriver
Done. ChromeDriver binary available at D:\dev\projects\vue\node_modules\chromedriver\lib\chromedriver\chromedriver.exe

&amp;gt; uglifyjs-webpack-plugin@0.4.6 postinstall D:\dev\projects\vue\node_modules\webpack\node_modules\uglifyjs-webpack-plugin
&amp;gt; node lib/post_install.js

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;win32&quot;,&quot;arch&quot;:&quot;x64&quot;})

added 1555 packages in 321.2s&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Run Server&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Terminal 에서 &lt;b&gt;&lt;u&gt;npm run dev&lt;/u&gt;&lt;/b&gt; 명령어 입력.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt;D:\develoment\projects\vue.js&amp;gt;npm run dev

&amp;gt; vue.js@1.0.0 dev D:\develoment\projects\vue.js
&amp;gt; webpack-dev-server --inline --progress --config build/webpack.dev.conf.js

 90% chunk assets processing&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;% 진행 되다가 아래와 같이 나오면 성공!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;cmd&quot;&gt; DONE  Compiled successfully in 15419ms                                                                                                                                                                            12:50:43

 I  Your application is running here: http://localhost:8080&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;브라우저로 접속 시 화면이 나온다면 성공!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B50A485B0242F636&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B50A485B0242F636&quot; width=&quot;750&quot; height=&quot;461&quot; filename=&quot;sshot-2018-05-21-[12-51-48].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Reference&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://kr.vuejs.org/v2/guide/installation.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.jetbrains.com/help/webstorm/vue-js.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.jetbrains.com/help/webstorm/vue-js.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/vuejs-kr/vue-cli&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/vuejs-kr/vue-cli&lt;/a&gt;&lt;/p&gt;</description>
      <category>Study/Vue.js</category>
      <category>Vue.js</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/186</guid>
      <comments>https://antop.tistory.com/entry/Installation-Vuejs-WebStorm-Vue-CLI#entry186comment</comments>
      <pubDate>Mon, 21 May 2018 13:22:30 +0900</pubDate>
    </item>
    <item>
      <title>Install VMware Tools in CentOS 7</title>
      <link>https://antop.tistory.com/entry/Install-VMware-Tools-in-CentOS-7</link>
      <description>&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;yum install -y perl
yum install -y open-vm-tools
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
tar xzvf /mnt/cdrom/VMwareTools-9.4.10-2092844.tar.gz -C /tmp
/tmp/vmware-tools-distrib/vmware-install.pl -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://partnerweb.vmware.com/GOSIG/CentOS_7.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://partnerweb.vmware.com/GOSIG/CentOS_7.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>VMware</category>
      <category>VSphere</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/185</guid>
      <comments>https://antop.tistory.com/entry/Install-VMware-Tools-in-CentOS-7#entry185comment</comments>
      <pubDate>Sun, 25 Mar 2018 09:28:00 +0900</pubDate>
    </item>
    <item>
      <title>Find class in jar files</title>
      <link>https://antop.tistory.com/entry/Find-class-in-jar-files</link>
      <description>&lt;p&gt;linux 에서&lt;/p&gt;&lt;p&gt;- jar 파일 안에 들어있는 class 를 찾는 명령어이다.&lt;/p&gt;&lt;p&gt;- 원하는 class 가 들어있는 jar 파일을 찾는 명령어이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;$ find foo/ -name &quot;*.jar&quot; | xargs grep Hello.class&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.google.co.kr/search?q=linux+find+class+in+jar&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.google.co.kr/search?q=linux+find+class+in+jar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14373788/linux-cmd-to-search-for-a-class-file-among-jars-irrespective-of-jar-path&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://stackoverflow.com/questions/14373788/linux-cmd-to-search-for-a-class-file-among-jars-irrespective-of-jar-path&lt;/a&gt;&lt;/p&gt;</description>
      <category>Java+</category>
      <category>class</category>
      <category>find</category>
      <category>JAR</category>
      <category>Java</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/184</guid>
      <comments>https://antop.tistory.com/entry/Find-class-in-jar-files#entry184comment</comments>
      <pubDate>Mon, 19 Feb 2018 09:32:24 +0900</pubDate>
    </item>
    <item>
      <title>Disable automatic updates kernel on Ubuntu</title>
      <link>https://antop.tistory.com/entry/Disable-automatic-updates-kernel-on-Ubuntu</link>
      <description>&lt;p&gt;우분투 설치 후 가만히 냅두면 자동으로 커널이 업그레이드 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;우분투 SSH 로그인 했을 때 아래와 같이 재부팅 하라는 메세지가 나오면 커널이 업그레이드 되었을 확률이 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;Using username &quot;root&quot;.
root@192.168.20.13's password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-45-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

78 packages can be updated.
0 updates are security updates.


*** System restart required ***
Last login: ..... from .....
# _&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제는 이것이 계속 업그레이드 되먼서 이전 커널 파일이 /boot 에 쌓인다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;계속 쌓이다가 /boot 가 100%가 되어버리면 문제가 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;주기적으로 관리를 해줘야 하지만 그것도 싫다고 하면... 커널 자동 업그레이드를 비활성화 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;# apt-mark hold linux-image-generic linux-headers-generic
linux-image-generic set on hold.
linux-headers-generic set on hold.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;출처: &lt;a href=&quot;https://askubuntu.com/questions/678630/how-can-i-avoid-kernel-updates&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://askubuntu.com/questions/678630/how-can-i-avoid-kernel-updates&lt;/a&gt;&lt;/p&gt;</description>
      <category>Server/Ubuntu</category>
      <category>apt</category>
      <category>Kernel</category>
      <category>ubuntu</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/183</guid>
      <comments>https://antop.tistory.com/entry/Disable-automatic-updates-kernel-on-Ubuntu#entry183comment</comments>
      <pubDate>Wed, 20 Dec 2017 11:40:30 +0900</pubDate>
    </item>
    <item>
      <title>Mybatis Interceptor + RowBounds 를 이용한 페이징 처리</title>
      <link>https://antop.tistory.com/entry/Mybatis-Interceptor-RowBounds-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%B2%98%EB%A6%AC</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;https://github.com/antop-dev/example/tree/master/mybatis-rowbounds-example&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/antop-dev/example/tree/master/mybatis-rowbounds-example&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://www.mybatis.org/mybatis-3/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Mybatis&lt;/a&gt;에&amp;nbsp;&lt;a class=&quot;tx-link&quot; href=&quot;http://www.mybatis.org/mybatis-3/apidocs/org/apache/ibatis/session/RowBounds.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RowBounds&lt;/a&gt; 클래스를 이용해서 페이징 처리를 할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package org.antop.mybatis.mapper;
import org.antop.mybatis.model.Employee;
import org.apache.ibatis.session.RowBounds;
import java.util.List;

public interface EmployeeMapper {
	List&amp;lt;Employee&amp;gt; select(RowBounds rowBounds);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;
&amp;lt;mapper namespace=&quot;org.antop.mybatis.mapper.EmployeeMapper&quot;&amp;gt;
	&amp;lt;resultMap id=&quot;BaseResultMap&quot; type=&quot;org.antop.mybatis.model.Employee&quot;&amp;gt;
    	&amp;lt;id property=&quot;no&quot; column=&quot;emp_no&quot; /&amp;gt;
        &amp;lt;result property=&quot;gender&quot; column=&quot;gender&quot; typeHandler=&quot;org.antop.mybatis.handler.GenderTypeHandler&quot; /&amp;gt;
        &amp;lt;association property=&quot;name&quot; javaType=&quot;org.antop.mybatis.model.Name&quot;&amp;gt;
        	&amp;lt;result property=&quot;first&quot; column=&quot;first_name&quot; /&amp;gt;
            &amp;lt;result property=&quot;last&quot; column=&quot;last_name&quot; /&amp;gt;
		&amp;lt;/association&amp;gt;
	&amp;lt;/resultMap&amp;gt;
    
    &amp;lt;select id=&quot;select&quot; resultMap=&quot;BaseResultMap&quot;&amp;gt;
    	select
        	*
		from
        	employees
		order by
        	emp_no asc
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 맵퍼와 XML 이 있다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;RowBounds rowBounds = new RowBounds(5, 10);
// 15건을 가져와서 앞에 5건 건너띔
List select = mapper.select(rowBounds);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 10건이 나왔지만 어떻게 동작할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기저기 찾아보고 소스도 대충(?) 보면 offset + limit 만큼 가져와서 offset 만큼 건너띤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이징이 뒤로 갈 수록 느려지게 된다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;RowBounds rowBounds = new RowBounds(29990, 10);
// 30000건을 가져와서 앞에 29990건 건너띔
List select = mapper.select(rowBounds);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 양이 적다면 쿼리에서 페이징을 하지 않고 RowBouns를 이용하면 빠르게 개발할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하긴 요즘 수천만건의 데이터를 페이징에서 마지막 페이지를 볼 일이 많을까? -_-/&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;XML 쿼리문에 페이징을 넣지 않고 RowBounds 클래스를 사용하면 자동으로 페이징 쿼리가&amp;nbsp;실행되게 할 수 없을까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법이 있다! Mybatis &lt;a class=&quot;tx-link&quot; href=&quot;http://www.mybatis.org/mybatis-3/apidocs/org/apache/ibatis/plugin/Interceptor.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Intercepter&lt;/a&gt;를 이용하면 된다. (인터셉터의 자세한 사용법은 다루지 않겠다 ㅠㅠ)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Mybatis에서 쿼리를 날리기 전에 가로챈다.&lt;/li&gt;
&lt;li&gt;RowBounds가 있으면 쿼리에 페이징 문장를 적용한다.&lt;/li&gt;
&lt;li&gt;RowBounds를 제거하여 Mybatis에서 페이징 처리를 하지 않도록 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 소스는 쿼리에 MySQL용으로 limit 문을 붙여준다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package org.antop.mybatis.intercepter;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.ReflectorFactory;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.util.Properties;

@Intercepts({@Signature(type = StatementHandler.class, method = &quot;prepare&quot;, args = {Connection.class, Integer.class})})
public class MysqlRowBoundsInterceptor implements Interceptor {
	private static final Logger logger = LoggerFactory.getLogger(MysqlRowBoundsInterceptor.class);
    private static final ObjectFactory DEFAULT_OBJECT_FACTORY = new DefaultObjectFactory();
    private static final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();
    private static final ReflectorFactory DEFAULT_REFLECTOR_FACTORY = new DefaultReflectorFactory();
    
    public Object intercept(Invocation invocation) throws Throwable {
    	StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
        MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY);
        String originalSql = (String) metaStatementHandler.getValue(&quot;delegate.boundSql.sql&quot;);
        RowBounds rb = (RowBounds) metaStatementHandler.getValue(&quot;delegate.rowBounds&quot;);
        logger.debug(&quot;originalSql = {}&quot;, originalSql);
        logger.debug(&quot;RowBounds = {}&quot;, rb);
        if (rb == null || rb == RowBounds.DEFAULT) { // RowBounds가 없으면 그냥 실행
        	return invocation.proceed();
		}
        
        // RowBounds가 있다!
        // 원래 쿼리에 limit 문을 붙여준다.
        StringBuffer sb = new StringBuffer();
        sb.append(originalSql);
        sb.append(&quot; limit &quot;);
        sb.append(rb.getOffset());
        sb.append(&quot;, &quot;);
        sb.append(rb.getLimit());
        
        logger.debug(&quot;sql = {}&quot;, sb.toString());
        // RowBounds 정보 제거
        metaStatementHandler.setValue(&quot;delegate.rowBounds.offset&quot;, RowBounds.NO_ROW_OFFSET);
        metaStatementHandler.setValue(&quot;delegate.rowBounds.limit&quot;, RowBounds.NO_ROW_LIMIT);
        // 변경된 쿼리로 바꿔치기
        metaStatementHandler.setValue(&quot;delegate.boundSql.sql&quot;, sb.toString());
        
        return invocation.proceed();
	}
    
    public Object plugin(Object target) {
    	return Plugin.wrap(target, this);
	}
    
    public void setProperties(Properties properties) {
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://www.mybatis.org/mybatis-3/apidocs/org/apache/ibatis/session/SqlSessionFactory.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SqlSessionFactory&lt;/a&gt; 설정하는 부분에 인터셉터를 적용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:mybatis=&quot;http://mybatis.org/schema/mybatis-spring&quot;
    xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd&quot;&amp;gt;
	
    &amp;lt;mybatis:scan base-package=&quot;org.antop.mybatis&quot;/&amp;gt;
    
    &amp;lt;bean id=&quot;sqlSessionFactory&quot; class=&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&amp;gt;
    	&amp;lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;/&amp;gt;
        &amp;lt;property name=&quot;mapperLocations&quot; value=&quot;classpath*:mybatis/*.xml&quot;/&amp;gt;
        &amp;lt;property name=&quot;plugins&quot;&amp;gt;
        	&amp;lt;list&amp;gt;
            	&amp;lt;!-- 인터셉터 설정 --&amp;gt;
                &amp;lt;bean class=&quot;org.antop.mybatis.intercepter.MysqlRowBoundsInterceptor&quot;/&amp;gt;
			&amp;lt;/list&amp;gt;
		&amp;lt;/property&amp;gt;
	&amp;lt;/bean&amp;gt;
    
    &amp;lt;bean id=&quot;dataSource&quot; ... /&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행시켜 보면 쿼리문에 페이징이 적용되서 쿼리가 날라가는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;select * from employees order by emp_no asc limit 29990, 10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://www.programering.com/a/MTM5gTNwATQ.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.programering.com/a/MTM5gTNwATQ.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://hjw1456.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://hjw1456.tistory.com/10&lt;/a&gt;&lt;/p&gt;</description>
      <category>Framework/Mybatis</category>
      <category>Interceptor</category>
      <category>Java</category>
      <category>mybatis</category>
      <category>MySQL</category>
      <category>pagination</category>
      <category>paging</category>
      <category>Spring</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/182</guid>
      <comments>https://antop.tistory.com/entry/Mybatis-Interceptor-RowBounds-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%B2%98%EB%A6%AC#entry182comment</comments>
      <pubDate>Tue, 12 Dec 2017 03:46:44 +0900</pubDate>
    </item>
    <item>
      <title>Eclipse JVM 경로 지정하기</title>
      <link>https://antop.tistory.com/entry/Eclipse-JVM-%EA%B2%BD%EB%A1%9C-%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;eclipse.ini 파일 수정&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;ini&quot;&gt;-startup
plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.400.v20160518-1444
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
# 여기
-vm
D:\develoment\jvm\jdk-8u101\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Tools/Eclipse</category>
      <category>Eclipse</category>
      <category>jdk</category>
      <category>JVM</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/181</guid>
      <comments>https://antop.tistory.com/entry/Eclipse-JVM-%EA%B2%BD%EB%A1%9C-%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0#entry181comment</comments>
      <pubDate>Tue, 13 Sep 2016 11:00:29 +0900</pubDate>
    </item>
    <item>
      <title>Install Ambari and Deploy HDP in CentOS</title>
      <link>https://antop.tistory.com/entry/Install-Ambari-and-Deploy-HDP-in-CentOS</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;소개&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;스터디를 위해서 Ambari를 이용하여 하둡 환경을 구성하면서 기록을 남긴다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;511&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; font-family: '맑은 고딕', sans-serif; font-size: 13px; width: 511px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border: 1px solid rgb(204, 204, 204); background-color: rgb(0, 0, 0);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;Ho&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;st&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(0, 0, 0);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;IP&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(0, 0, 0);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;CPU/RAM/HDD&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(0, 0, 0);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;Service&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-00&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.20.20&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;4vCPU / 4GB / 16GB&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Ambari&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-01&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.20.21&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;4vCPU / 4GB / 120GB&amp;nbsp;&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;NameNode&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-02&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.20.22&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;4vCPU / 4GB / 120GB&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Hive / DataNode&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-03&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.20.23&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;4vCPU / 4GB / 120GB&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;DataNode&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 79px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-04&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.20.24&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 144px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;4vCPU / 4GB / 120GB&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 194px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;DataNode&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;환경 준비&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 항목들은 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;모든 서버에 공통적으로 적용&lt;/b&gt;&lt;/span&gt;해야 할 것들이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;FQDN&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_180_1&quot; id=&quot;footnote_link_180_1&quot; onmouseover=&quot;tistoryFootnote.show(this, 180, 1)&quot; onmouseout=&quot;tistoryFootnote.hide(180, 1)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;1&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 및 호스트네임&amp;nbsp;설정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;호스트들 등록 x N&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;vi /etc/hosts&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 추가한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;192.168.20.20 &amp;nbsp; hadoop-00 hadoop-00.antop.org&lt;/p&gt;&lt;p&gt;192.168.20.21 &amp;nbsp; hadoop-01 hadoop-01.antop.org&lt;/p&gt;&lt;p&gt;192.168.20.22 &amp;nbsp; hadoop-02 hadoop-02.antop.org&lt;/p&gt;&lt;p&gt;192.168.20.23 &amp;nbsp; hadoop-03 hadoop-03.antop.org&lt;/p&gt;&lt;p&gt;192.168.20.24 &amp;nbsp; hadoop-04 hadoop-04.antop.org&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;호스트네임 설정값 변경&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;각각 서버에 맞는 번호로 이름 변경 x N&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;hostname &lt;b&gt;hadoop-00&lt;/b&gt;.antop.org&lt;/u&gt;&lt;/p&gt;&lt;p&gt;# &lt;u&gt;hostname -f&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;hadoop-00&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# &lt;u&gt;hostname&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;hadoop-00.antop.org&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;네트워크 설정 쪽에도 호스트네임이 들어가 있다. 이것도 변경 x N&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;vi /etc/sysconfig/network&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;NETWORKING=yes&lt;/p&gt;&lt;p&gt;HOSTNAME=&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-00.antop.org&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;GATEWAY=192.168.20.1&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Password-less SSH 설정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;비밀번호를 물어보지 않는&amp;nbsp;SSH를 사용할 수 있도록 설정&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ambari 쪽에서 다른 각각의 서버로만 뚫으면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;공개키/개인키 생성&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@&lt;b&gt;hadoop-00&lt;/b&gt; ~]# &lt;u&gt;ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Generating public/private dsa key pair.&lt;/p&gt;&lt;p&gt;Created directory '/root/.ssh'.&lt;/p&gt;&lt;p&gt;Your identification has been saved in /root/.ssh/id_dsa.&lt;/p&gt;&lt;p&gt;Your public key has been saved in /root/.ssh/id_dsa.pub.&lt;/p&gt;&lt;p&gt;The key fingerprint is:&lt;/p&gt;&lt;p&gt;de:3a:1a:9b:cb:5d:ee:b4:a1:b6:e3:8a:64:a9:d2:54 root@hadoop-00.antop.org&lt;/p&gt;&lt;p&gt;The key's randomart image is:&lt;/p&gt;&lt;p&gt;.. 중략 ..&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;인증 심어놓기(?)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 나 자신 서버에도 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;[root@&lt;b&gt;hadoop-00&lt;/b&gt;&amp;nbsp;~]#&amp;nbsp;ssh-copy-id -i ~/.ssh/id_dsa.pub root@&lt;b&gt;hadoop-00&lt;/b&gt;.antop.org&lt;/p&gt;&lt;p&gt;The authenticity of host 'hadoop-00.antop.org (192.168.20.20)' can't be established.&lt;/p&gt;&lt;p&gt;RSA key fingerprint is 93:02:94:19:21:aa:99:a8:94:87:75:36:06:08:3f:12.&lt;/p&gt;&lt;p&gt;Are you sure you want to continue connecting (yes/no)? &lt;u&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Warning: Permanently added 'hadoop-00.antop.org,192.168.20.20' (RSA) to the list of known hosts.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;root@hadoop-00.antop.org's password:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Now try logging into the machine, with &quot;ssh 'root@hadoop-00.antop.org'&quot;, and check in:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; .ssh/authorized_keys&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;to make sure we haven't added extra keys that you weren't expecting.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[root@hadoop-00 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@hadoop-0&lt;b&gt;1&lt;/b&gt;.antop.org&lt;/p&gt;&lt;p&gt;[root@hadoop-00 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@hadoop-0&lt;b&gt;2&lt;/b&gt;.antop.org&lt;/p&gt;&lt;p&gt;[root@hadoop-00 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@hadoop-0&lt;b&gt;3&lt;/b&gt;.antop.org&lt;/p&gt;&lt;p&gt;[root@hadoop-00 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@hadoop-0&lt;b&gt;4&lt;/b&gt;.antop.org&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ambari 쪽에서 다른 서버들로 SSH 접속시 비밀번호를 물어보지 않고 접속이 잘 되어야 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@hadoop-00 ~]# ssh root@hadoop-01.antop.org 'ls /'&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 비밀번호를 물어보지 않고 정상적으로 디렉터리 목록이 나와야함...&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;※ hadoop-00(Ambari)에 생성된 /root/.ssh/id_dsa 파일을 다운로드 받아놓자. Ambari Web UI에서 클러스터 생성시에 필요하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;NTP&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_180_2&quot; id=&quot;footnote_link_180_2&quot; onmouseover=&quot;tistoryFootnote.show(this, 180, 2)&quot; onmouseout=&quot;tistoryFootnote.hide(180, 2)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;2&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 서비스 설치 및&amp;nbsp;실행&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;NTP 가 안깔려 있으면 설치하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;#&amp;nbsp;yum -y install ntp&lt;/p&gt;&lt;p&gt;# service ntpd start&lt;/p&gt;&lt;p&gt;# chkconfig ntpd on&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;방화벽 해제&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하둡은 상당히 많은 포트를 사용한다. 철저하게 관리하면 좋겠지만..... 전부 해제!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;chkconfig iptables off&lt;/u&gt;&lt;/p&gt;&lt;p&gt;# &lt;u&gt;/etc/init.d/iptables stop&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;SELinux 비활성화&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;setenforce 0&lt;/u&gt;&lt;/p&gt;&lt;p&gt;#&amp;nbsp;&lt;u&gt;vi /etc/selinux/config&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# This file controls the state of SELinux on the system.&lt;/p&gt;&lt;p&gt;# SELINUX= can take one of these three values:&lt;/p&gt;&lt;p&gt;# &amp;nbsp; &amp;nbsp; enforcing - SELinux security policy is enforced.&lt;/p&gt;&lt;p&gt;# &amp;nbsp; &amp;nbsp; permissive - SELinux prints warnings instead of enforcing.&lt;/p&gt;&lt;p&gt;# &amp;nbsp; &amp;nbsp; disabled - No SELinux policy is loaded.&lt;/p&gt;&lt;p&gt;SELINUX=&lt;b&gt;disabled&lt;/b&gt;&lt;/p&gt;&lt;p&gt;# SELINUXTYPE= can take one of these two values:&lt;/p&gt;&lt;p&gt;# &amp;nbsp; &amp;nbsp; targeted - Targeted processes are protected,&lt;/p&gt;&lt;p&gt;# &amp;nbsp; &amp;nbsp; mls - Multi Level Security protection.&lt;/p&gt;&lt;p&gt;SELINUXTYPE=targeted&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;THP&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_180_3&quot; id=&quot;footnote_link_180_3&quot; onmouseover=&quot;tistoryFootnote.show(this, 180, 3)&quot; onmouseout=&quot;tistoryFootnote.hide(180, 3)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;3&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 비활성화&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CentOS에서 THP가 &amp;nbsp;활성화 되어있으면 성능 이슈가 발생할 수 있다고 경고가 나오게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;HDP 가 설치되는 호스트들에 적용한다. (hadoop-01 ~ hadoop-04)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@&lt;b&gt;hadoop-01&lt;/b&gt; ~]# &lt;u&gt;vi /etc/rc.local&lt;/u&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;#!/bin/sh&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# This script will be executed *after* all the other init scripts.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# You can put your own initialization stuff in here if you don't&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# want to do the full Sys V style init stuff.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;touch /var/lock/subsys/local&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 추가된 부분&lt;/span&gt;&lt;/div&gt;&lt;div&gt;if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;echo never &amp;gt; /sys/kernel/mm/redhat_transparent_hugepage/enabled; fi&lt;/div&gt;&lt;div&gt;if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;echo never &amp;gt; /sys/kernel/mm/redhat_transparent_hugepage/defrag; fi&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;재부팅 후 값 확인&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@&lt;b&gt;hadoop-01&lt;/b&gt;&amp;nbsp;~]#&amp;nbsp;&amp;nbsp;cat /sys/kernel/mm/transparent_hugepage/enabled&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;※ 이렇게 하는게 맞는지는 확실히 모르겠슴.. 어찌어찌 하다가 경고 없어짐... &lt;a href=&quot;http://docs.hortonworks.com/HDPDocuments/Ambari-2.1.0.0/bk_ambari_troubleshooting/content/_resolving_cluster_deployment_problems.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기&lt;/a&gt; 참조&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;unmask 값 변경&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;/etc/profile 파일을 열어서 umask 설정 로직 하단에 umask 값을 강제로 변경하는 부분을 추가해 주도록 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;# &lt;u&gt;vi /etc/profile&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 중략&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# By default, we want umask to get set. This sets it for login shell&lt;/p&gt;&lt;p&gt;# Current threshold for system reserved uid/gids is 200&lt;/p&gt;&lt;p&gt;# You could check uidgid reservation validity in&lt;/p&gt;&lt;p&gt;# /usr/share/doc/setup-*/uidgid file&lt;/p&gt;&lt;p&gt;if [ $UID -gt 199 ] &amp;amp;&amp;amp; [ &quot;`id -gn`&quot; = &quot;`id -un`&quot; ]; then&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; umask 002&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; umask 022&lt;/p&gt;&lt;p&gt;fi&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 추가&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;umask 022&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;JDK 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기선 1.7을 설치 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# wget 없다면 설치&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# yum install -y wget&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 다른 종류의 JDK 있으면 삭제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# yum remove -y java-1.6.0-openjdk&lt;/p&gt;&lt;p&gt;# yum remove -y java-1.7.0-openjdk&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# RPM 파일 다운로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# cd ~&lt;/p&gt;&lt;p&gt;# wget --no-cookies --no-check-certificate --header &quot;Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie&quot; &quot;http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64.rpm&quot;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 설치&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# yum localinstall -y jdk-7u80-linux-x64.rpm&lt;/p&gt;&lt;p&gt;# rm -f ~/jdk-7u80-linux-x64.rpm&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 환경 변수 설정&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# echo 'export JAVA_HOME=/usr/java/jdk1.7.0_80' &amp;gt;&amp;gt; /etc/profile&lt;/p&gt;&lt;p&gt;# echo 'export PATH=$PATH:$JAVA_HOME/bin' &amp;gt;&amp;gt; /etc/profile&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 설치 확인&lt;/span&gt;&lt;/p&gt;&lt;p&gt;# java -version&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Ambari Server 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Public Repositories&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_180_4&quot; id=&quot;footnote_link_180_4&quot; onmouseover=&quot;tistoryFootnote.show(this, 180, 4)&quot; onmouseout=&quot;tistoryFootnote.hide(180, 4)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;4&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 등록&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;yum 으로 설치될 수 있도록 저장소를 등록한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@hadoop-00 ~]# &lt;u&gt;cd /etc/yum.repos.d/&lt;/u&gt;&lt;/p&gt;&lt;p&gt;[root@hadoop-00 &lt;b&gt;yum.repos.d&lt;/b&gt;]# &lt;u&gt;wget http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.2.2.0/ambari.repo&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@hadoop-00 ~]# &lt;u&gt;yum install ambari-server&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;설정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@hadoop-00 ~]#&amp;nbsp;&lt;u&gt;ambari-server setup&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Using python &amp;nbsp;/usr/bin/python&lt;/p&gt;&lt;p&gt;Setup ambari-server&lt;/p&gt;&lt;p&gt;Checking SELinux...&lt;/p&gt;&lt;p&gt;SELinux status is 'disabled'&lt;/p&gt;&lt;p&gt;&lt;b&gt;Customize user account for ambari-server daemon [y/n] (n)?&amp;nbsp;&lt;u&gt;n&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Adjusting ambari-server permissions and ownership...&lt;/p&gt;&lt;p&gt;Checking firewall status...&lt;/p&gt;&lt;p&gt;Checking JDK...&lt;/p&gt;&lt;p&gt;[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8&lt;/p&gt;&lt;p&gt;[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7&lt;/p&gt;&lt;p&gt;[3] Custom JDK&lt;/p&gt;&lt;p&gt;==============================================================================&lt;/p&gt;&lt;p&gt;&lt;b&gt;Enter choice (1):&amp;nbsp;&lt;u&gt;3&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.&lt;/p&gt;&lt;p&gt;WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Path to JAVA_HOME:&amp;nbsp;&lt;u&gt;/usr/java/jdk1.7.0_80&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Validating JDK on Ambari Server...done.&lt;/p&gt;&lt;p&gt;Completing setup...&lt;/p&gt;&lt;p&gt;Configuring database...&lt;/p&gt;&lt;p&gt;&lt;b&gt;Enter advanced database configuration [y/n] (n)?&amp;nbsp;&lt;u&gt;n&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Configuring database...&lt;/p&gt;&lt;p&gt;Default properties detected. Using built-in database.&lt;/p&gt;&lt;p&gt;Configuring ambari database...&lt;/p&gt;&lt;p&gt;Checking PostgreSQL...&lt;/p&gt;&lt;p&gt;Running initdb: This may take upto a minute.&lt;/p&gt;&lt;p&gt;Initializing database: [ &amp;nbsp;OK &amp;nbsp;]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;About to start PostgreSQL&lt;/p&gt;&lt;p&gt;Configuring local database...&lt;/p&gt;&lt;p&gt;Connecting to local database...done.&lt;/p&gt;&lt;p&gt;Configuring PostgreSQL...&lt;/p&gt;&lt;p&gt;Restarting PostgreSQL&lt;/p&gt;&lt;p&gt;Extracting system views...&lt;/p&gt;&lt;p&gt;.....ambari-admin-2.2.2.0.460.jar&lt;/p&gt;&lt;p&gt;.&lt;/p&gt;&lt;p&gt;Adjusting ambari-server permissions and ownership...&lt;/p&gt;&lt;p&gt;Ambari Server 'setup' completed successfully.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;시작&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;[root@hadoop-00 ~]# &lt;u&gt;ambari-server start&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Using python &amp;nbsp;/usr/bin/python&lt;/p&gt;&lt;p&gt;Starting ambari-server&lt;/p&gt;&lt;p&gt;Ambari Server running with administrator privileges.&lt;/p&gt;&lt;p&gt;Organizing resource files at /var/lib/ambari-server/resources...&lt;/p&gt;&lt;p&gt;Server PID at: /var/run/ambari-server/ambari-server.pid&lt;/p&gt;&lt;p&gt;Server out at: /var/log/ambari-server/ambari-server.out&lt;/p&gt;&lt;p&gt;Server log at: /var/log/ambari-server/ambari-server.log&lt;/p&gt;&lt;p&gt;Waiting for server start....................&lt;/p&gt;&lt;p&gt;Ambari Server 'start' completed successfully.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Deploy CLuster using Ambari Web UI&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;브라우저로 http://&amp;lt;hostname&amp;gt;:8080 에 접속하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;최초 로그인 아이디는 admin/admin&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/215961345753764932&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F215961345753764932&quot; width=&quot;1000&quot; height=&quot;760&quot; filename=&quot;sshot-2016-06-05-[09-45-00].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;중앙 Create a Cluster 항목의 Launch Install Wizard 버튼 클릭!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2606FB3F5753795A31&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2606FB3F5753795A31&quot; width=&quot;600&quot; height=&quot;230&quot; filename=&quot;sshot-2016-06-05-[09-47-11].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;클러스터 이름을 설정한다. 나는 &lt;u&gt;MicroscopeHadoop&lt;/u&gt; 으로 하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 893px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2530B44057537A4A28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2530B44057537A4A28&quot; width=&quot;893&quot; height=&quot;276&quot; filename=&quot;sshot-2016-06-05-[09-48-09].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;서비스 스택 버전을 선택한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;최신 버전인 2.4 해도 되고, 나의 경우 Toad for Hadoop 1.5.0 버전에서 HDP 2.3 을 지원 한다고 하여 2.3 으로 설치한다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/253B7B4357537AD708&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F253B7B4357537AD708&quot; width=&quot;891&quot; height=&quot;370&quot; filename=&quot;sshot-2016-06-05-[09-48-48].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치할 호스트를 지정한다. FQDN을 줄줄이 써주면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위에서 다운로드 받아놓은 id_dsa 파일을 여기서 첨부 파일로 넣어준다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2603C44357537B9031&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2603C44357537B9031&quot; width=&quot;891&quot; height=&quot;623&quot; filename=&quot;sshot-2016-06-05-[09-51-17].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;각 호스트에 Ambari Agent 설치 및 이것저것 검사를 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;※ 위에 THP 처리를 안하면 아래와 같이 경고가 나오게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2256C94657537C8831&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2256C94657537C8831&quot; width=&quot;891&quot; height=&quot;583&quot; filename=&quot;sshot-2016-06-05-[09-54-45].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;서비스를 선택한다. (항목이 너무 많아서 스크린샷을 편집함...)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나는 Hive 만을 사용하기 위한 최소 항목만 선택 하였다. 나중에 추가 설치 가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/265C124A57537F6234&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F265C124A57537F6234&quot; width=&quot;891&quot; height=&quot;603&quot; filename=&quot;sshot-2016-06-05-[10-13-49].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;어느 호스트에 무엇을 설치할 것인지 설정한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 부분은 경험과 노하우가 필요하겠다...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나의 경우 서버가 4대라서... 1번에 다 몰고... 2번에 하이브.. 2,3,4 를 데이터 노드로 사용하려고 하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2427954657537FE806&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2427954657537FE806&quot; width=&quot;891&quot; height=&quot;862&quot; filename=&quot;sshot-2016-06-05-[10-16-32].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;DataNode 로 쓸 호스트를 선택하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/231AC6355753809412&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F231AC6355753809412&quot; width=&quot;891&quot; height=&quot;533&quot; filename=&quot;sshot-2016-06-05-[10-27-51].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설정값을 조정하는 부분이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;특별히 변경 할 건 없는거 같고... -_-/... 아래 처럼 탭 부분에 빨간색 숫자 뜨는 부분 찾아가서 채워 주자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2533A24C5753822737&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2533A24C5753822737&quot; width=&quot;891&quot; height=&quot;217&quot; filename=&quot;sshot-2016-06-05-[10-29-28].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치(Deploy) 전 마지막 확인!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2633014A5753829703&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2633014A5753829703&quot; width=&quot;891&quot; height=&quot;692&quot; filename=&quot;sshot-2016-06-05-[10-37-14].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치 시작 그리고&amp;nbsp;테스트&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치 완료!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/277B5C3C57538E1C01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F277B5C3C57538E1C01&quot; width=&quot;891&quot; height=&quot;571&quot; filename=&quot;sshot-2016-06-05-[11-25-47].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치 완료 요약&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 891px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2351E73957538E9F13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2351E73957538E9F13&quot; width=&quot;891&quot; height=&quot;482&quot; filename=&quot;sshot-2016-06-05-[11-28-19].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;완료... 된 것인가 ㅠ_ㅠ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27254C3757538EFF0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27254C3757538EFF0F&quot; width=&quot;1000&quot; height=&quot;747&quot; filename=&quot;sshot-2016-06-05-[11-30-54].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;추가로 HTTP 포트 변경하기&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ambari.apache.org/1.2.3/installing-hadoop-using-ambari/content/ambari-chap2-2a.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://ambari.apache.org/1.2.3/installing-hadoop-using-ambari/content/ambari-chap2-2a.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참조&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ambari.apache.org/1.2.2/installing-hadoop-using-ambari&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://ambari.apache.org/1.2.2/installing-hadoop-using-ambari&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://guruble.com/?p=147&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://guruble.com/?p=147&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol class=&quot;footnotes&quot;&gt;
    &lt;li id=&quot;footnote_180_1&quot;&gt;https://wiki.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/fqdn.html &lt;a href=&quot;#footnote_link_180_1&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_180_2&quot;&gt;http://www.terms.co.kr/NTP.htm &lt;a href=&quot;#footnote_link_180_2&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_180_3&quot;&gt;Transparent Huge Pages &lt;a href=&quot;#footnote_link_180_3&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_180_4&quot;&gt;https://cwiki.apache.org/confluence/display/AMBARI/Install+Ambari+2.2.2+from+Public+Repositories &lt;a href=&quot;#footnote_link_180_4&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</description>
      <category>Study/Hadoop</category>
      <category>ambari</category>
      <category>CentOS</category>
      <category>hadoop</category>
      <category>hdp</category>
      <category>Hive</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/180</guid>
      <comments>https://antop.tistory.com/entry/Install-Ambari-and-Deploy-HDP-in-CentOS#entry180comment</comments>
      <pubDate>Sun, 5 Jun 2016 11:41:15 +0900</pubDate>
    </item>
    <item>
      <title>Install VMware Tools in CentOS</title>
      <link>https://antop.tistory.com/entry/Install-VMware-Tools-in-CentOS</link>
      <description>&lt;p&gt;최소 버전의 CentOS는 perl도 없다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;# yum install -y perl&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 순서대로 실행한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
# tar xzvf /mnt/cdrom/VMwareTools-9.4.10-2092844.tar.gz -C /tmp
# /tmp/vmware-tools-distrib/vmware-install.pl -d&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;추후 부전에 따라 gz 파일의 이름이 다를 수도 있다.&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>CentOS</category>
      <category>esxi</category>
      <category>VMware</category>
      <category>vmware tools</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/179</guid>
      <comments>https://antop.tistory.com/entry/Install-VMware-Tools-in-CentOS#entry179comment</comments>
      <pubDate>Sun, 5 Jun 2016 06:07:03 +0900</pubDate>
    </item>
    <item>
      <title>Installing Hive(Hadoop 1) + MySQL on CentOS 6.7</title>
      <link>https://antop.tistory.com/entry/Installing-HiveHadoop-1-MySQL-on-CentOS-67</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 575px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/234B1B3556857D542C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F234B1B3556857D542C&quot; width=&quot;575&quot; height=&quot;446&quot; filename=&quot;hiveserver1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;Hive 를 공부해보기 MySQL을 메타 스토어로 사용하는&amp;nbsp;최소한의 설치를&amp;nbsp;설치해보자..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Requirements&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기서 MySQL 설치에 대해서 다루지 않겠다... 데이터베이스와 유저까지 만들자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Host: mysqldb&lt;/p&gt;&lt;p&gt;Database: hive&lt;/p&gt;&lt;p&gt;Username: hive&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5; color: rgb(255, 0, 0);&quot;&gt;※ MySQL 을 사용 하지 않을 경우를 위해서 생략 가능한 절차를 코맨트 하겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하둡은 이미 설치되어 있어야 한다.&amp;nbsp;&lt;span style=&quot;line-height: 1.5;&quot;&gt;설치된 환경은 아래와 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;$ rpm -qa *-release&lt;/p&gt;&lt;p&gt;&lt;b&gt;centos-release-6-7&lt;/b&gt;.el6.centos.12.3.x86_64&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;$ java -version&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;java version &quot;1.7.0_80&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Java(TM) SE Runtime Environment (build 1.7.0_80-b15)&lt;/p&gt;&lt;p&gt;Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;$ whoami&lt;/p&gt;&lt;p&gt;&lt;b&gt;hadoop&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;$ pwd&lt;/p&gt;&lt;p&gt;&lt;b&gt;/opt/hadoop&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;$ hadoop version&lt;/p&gt;&lt;p&gt;&lt;b&gt;Hadoop 1.2.1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152&lt;/p&gt;&lt;p&gt;Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013&lt;/p&gt;&lt;p&gt;From source with checksum 6923c86528809c4e7e6f493b6b413a9a&lt;/p&gt;&lt;p&gt;This command was run using&amp;nbsp;&lt;b&gt;/opt/hadoop/hadoop-1.2.1&lt;/b&gt;/hadoop-core-1.2.1.jar&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하이브가 설치될 환경을 미리 잡아주자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;$&amp;nbsp;cat ~/.bashrc&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# .bashrc&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 생략&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5; color: rgb(47, 157, 39);&quot;&gt;# User specific aliases and functions&lt;/span&gt;&lt;/p&gt;&lt;p&gt;export HADOOP_HOME=/opt/hadoop/hadoop-1.2.1&lt;/p&gt;&lt;p&gt;export HIVE_HOME=&lt;b&gt;/opt/hadoop/hive-1.2.1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;export PATH=$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Download Hive&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;하이브 최신&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;(1.2.1)&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&amp;nbsp;파일을 다운로드 받아 설치하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 파일 다운로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ wget http://mirror.apache-kr.org/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 압축 해제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ tar -xzvf apache-hive-1.2.1-bin.tar.gz&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 이름 변경&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ mv apache-hive-1.2.1-bin &lt;b&gt;hive-1.2.1&lt;/b&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Install MySQL&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;Connector/J&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;※ MySQL 을 사용하지 않을 거라면 패스&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하이브에서 메타스토어를 다른 데이터베이스로 사용할 시에 해당 JDBC 라이브러리를 넣어줘야한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/connector/j/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;MySQL&lt;/a&gt;을 사용할 것이기 때문에 이에 맞는 라이브러리를 찾아 넣어주자.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 파일 다운로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ &lt;u&gt;wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 압축 해제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ &lt;u&gt;tar -xzvf mysql-connector-java-5.1.38.tar.gz&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# jar 파일 복사&lt;/span&gt;&lt;/p&gt;&lt;p&gt;$ &lt;u&gt;cp mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar &lt;b&gt;/opt/hadoop/hadoop-1.2.1/lib&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;MySQL 스키마 파일은 하이브에 포함되어 있다. 어떤 방법을 쓰든.... 실행하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;$HIVE_HOME/scripts/metastore/upgrade/mysql/hive-schema-1.2.0.mysql.sql&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나는 mysql client 를 이용해서 넣었다..&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;$ mysql --host=mysqldb --database=hive --user=hive --password=**** &amp;lt; $HIVE_HOME/scripts/metastore/upgrade/mysql/hive-schema-1.2.0.mysql.sql&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;Setting&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하이브에서 사용하게 될 영역을 HDFS 내에 만들자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp&lt;/p&gt;&lt;p&gt;$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse&lt;/p&gt;&lt;p&gt;$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp&lt;/p&gt;&lt;p&gt;$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설정 파일을 만들자. (이 파일이 처음에는 없을 것이다)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;$ &lt;u&gt;vi $HIVE_HOME/conf/hive-site.xml&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;fs.default.name&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;hdfs://hadoop-01:9000&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;!-- MySQL 사용 안할 거라면 이 아래는 패스 --&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;javax.jdo.option.ConnectionURL&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;jdbc:mysql://mysqldb:3306/hive&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;javax.jdo.option.ConnectionDriverName&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;com.mysql.jdbc.Driver&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;javax.jdo.option.ConnectionUserName&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;hive&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;javax.jdo.option.ConnectionPassword&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;****&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 하이브를 한번 실행 해보자. 아래와 같이 CLI 커맨드가 나오면 OK!&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;$ hive

Logging initialized using configuration in jar:file:/opt/hadoop/hive-1.2.1/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive&amp;gt; _&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Study/Hadoop</category>
      <category>hadoop</category>
      <category>Hive</category>
      <category>MySQL</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/178</guid>
      <comments>https://antop.tistory.com/entry/Installing-HiveHadoop-1-MySQL-on-CentOS-67#entry178comment</comments>
      <pubDate>Tue, 5 Jan 2016 22:04:41 +0900</pubDate>
    </item>
    <item>
      <title>Installing Hadoop 1 on Ubuntu 14.04</title>
      <link>https://antop.tistory.com/entry/Installing-Hadoop-1-on-Ubuntu-1404</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;table class=&quot;tt-plugin-interpark&quot; width=&quot;100%&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; style=&quot;background: #fff; border: 1px solid #e0e0e0; width: 408px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;70&quot; style=&quot;vertical-align: top; padding: 10px 0 10px 10px;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=232520375&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://bimage.interpark.com/goods_image/0/3/7/5/232520375h.jpg&quot; width=&quot;66&quot; height=&quot;90&quot; style=&quot;border: 0 none;&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: top; padding: 10px 10px 10px 15px;&quot;&gt;&lt;dl style=&quot;margin: 0; padding: 2px 0 0 0; list-style: none; font: 11px dotum, sans-serif; letter-spacing: -1px; color: #777;&quot;&gt;&lt;dt style=&quot;padding: 0; margin: 0;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=232520375&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot; style=&quot;font-size: 12px; color: #444 !important; font-weight: bold; text-decoration: none !important;&quot;&gt;시작하세요! 하둡 프로그래밍&lt;/a&gt;&lt;/dt&gt;&lt;dd style=&quot;padding: 7px 0 0 0; margin: 0; color: #a0a0a0;&quot;&gt;국내도서&lt;/dd&gt;&lt;dd style=&quot;padding: 17px 0 0 0; margin: 0;&quot;&gt;저자 : 정재화&lt;/dd&gt;&lt;dd style=&quot;padding: 4px 0 0 0; margin: 0;&quot;&gt;출판 : 위키북스 &lt;span style=&quot;letter-spacing: normal&quot;&gt;2014.12.31&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=232520375&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot; style=&quot;float: right; width: 44px; height: 11px; background: url(http://i1.daumcdn.net/cfs.tistory/static/images/icon_ipark_detail.gif) no-repeat; overflow: hidden; display: block; text-indent: -1000em;&quot;&gt;상세보기&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;table class=&quot;tt-plugin-interpark&quot; width=&quot;100%&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; style=&quot;background: #fff; border: 1px solid #e0e0e0; width: 408px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;70&quot; style=&quot;vertical-align: top; padding: 10px 0 10px 10px;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=210716524&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://bimage.interpark.com/goods_image/6/5/2/4/210716524h.jpg&quot; width=&quot;66&quot; height=&quot;90&quot; style=&quot;border: 0 none;&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: top; padding: 10px 10px 10px 15px;&quot;&gt;&lt;dl style=&quot;margin: 0; padding: 2px 0 0 0; list-style: none; font: 11px dotum, sans-serif; letter-spacing: -1px; color: #777;&quot;&gt;&lt;dt style=&quot;padding: 0; margin: 0;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=210716524&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot; style=&quot;font-size: 12px; color: #444 !important; font-weight: bold; text-decoration: none !important;&quot;&gt;거침없이 배우는 하둡&lt;/a&gt;&lt;/dt&gt;&lt;dd style=&quot;padding: 7px 0 0 0; margin: 0; color: #a0a0a0;&quot;&gt;국내도서&lt;/dd&gt;&lt;dd style=&quot;padding: 17px 0 0 0; margin: 0;&quot;&gt;저자 : 척 램(Chuck Lam) / 강택현,이현남역&lt;/dd&gt;&lt;dd style=&quot;padding: 4px 0 0 0; margin: 0;&quot;&gt;출판 : 지앤선(지&amp;amp;선) &lt;span style=&quot;letter-spacing: normal&quot;&gt;2012.07.17&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=210716524&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&amp;amp;key=2BDAF9302515B8BDFC388BC87330E85E78808790A36FA930858E35DE8E3CE485&quot; target=&quot;_blank&quot; style=&quot;float: right; width: 44px; height: 11px; background: url(http://i1.daumcdn.net/cfs.tistory/static/images/icon_ipark_detail.gif) no-repeat; overflow: hidden; display: block; text-indent: -1000em;&quot;&gt;상세보기&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;하둡을 공부하기 위하여 설치해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;연습을 실전 같이! 완전분산(Fully distributed) 모드로 설치한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;714&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:돋움;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 103px; height: 24px; border: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;호스트&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 128px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;아이피&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 294px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;역할&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 187px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;코어/메모리&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 103px; height: 24px; border: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-01&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;192.168.153.10&lt;/td&gt;&lt;td style=&quot;width: 294px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;NameNode&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 187px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;1 코어 / 1 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 103px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-02&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 128px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.153.11&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 294px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Secondary NameNode / DataNooe&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 187px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;1 코어 / 1 GB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 103px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;hadoop-03&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;192.168.153.12&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 294px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;DataNode&lt;/td&gt;&lt;td style=&quot;width: 187px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;1 코어 / 1 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 103px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;hadoop-04&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;192.168.153.xxx&lt;/td&gt;&lt;td style=&quot;width: 294px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;DataNode&lt;/td&gt;&lt;td style=&quot;width: 187px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;1 코어 / 1 GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하둡 실행 계정 생성&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;하둡 실행 계정은 하둡 클러스터를 구성하는 모든 서버에 동일하게 생성해야 한단다. (정말? 실화야?)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&quot;hadoop&quot; 계정을 사용하도록하겠다. 각 서버에 생성하자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;root@hadoop-01:~#&amp;nbsp;&lt;/span&gt;&lt;u&gt;adduser hadoop&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;root@hadoop-02:~#&amp;nbsp;&lt;/span&gt;&lt;u&gt;adduser hadoop&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;root@hadoop-03:~#&amp;nbsp;&lt;/span&gt;&lt;u&gt;adduser hadoop&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;호스트 파일 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;IP를 직접 사용해도 되지만 호스트명을 사용하자.&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;각 서버에서 /etc/hosts 파일을 아래와 같이 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;※ 물론 이 작업을 수행하는 나의 컴퓨터에도 호스트 파일 수정 작업이 되어 있어야 한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;root@hadoop-01:~#&amp;nbsp;&lt;u&gt;vi /etc/hosts&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;127.0.0.1 &amp;nbsp; &amp;nbsp; &amp;nbsp; localhost&lt;/p&gt;
&lt;p&gt;192.168.153.10 &amp;nbsp;hadoop-01&lt;/p&gt;
&lt;p&gt;192.168.153.11 &amp;nbsp;hadoop-02&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;192.168.153.12 &amp;nbsp;hadoop-03&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;root@hadoop-02:~#&amp;nbsp;&lt;u&gt;vi /etc/hosts&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;root@hadoop-03:~#&amp;nbsp;&lt;u&gt;vi /etc/hosts&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;인코딩 방식 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;하둡은 인코딩 방식으로 UTF-8을 사용한단다... 다행이 우분투는 기본적으로 UTF-8 사용해서 천만 다행 -_-/&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;방화벽 해제&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;어차피 내부통신에다 연습용이니 다 해제!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;root@hadoop-01:~# ufw disable&lt;/p&gt;
&lt;p&gt;root@hadoop-02:~# ufw disable&lt;/p&gt;
&lt;p&gt;root@hadoop-03:~# ufw disable&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;자바 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Oracle JDK 1.7 을 설치 하도록 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ubuntuhandbook.org/index.php/2014/02/install-oracle-java-6-7-or-8-ubuntu-14-04/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://ubuntuhandbook.org/index.php/2014/02/install-oracle-java-6-7-or-8-ubuntu-14-04/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Oracle JDK 7 을 설치 했을 시에 설치되는 위치는 &quot;&lt;b&gt;/usr/lib/jvm/java-7-oracle&lt;/b&gt;&quot; 이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하둡 클러스터를 위한 SSH 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;마스터 노드는 클러스터에 위치한 다른 모든 노드들에 접근할 수 있어야 한다.&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;하둡은 이러한 접근을 위해 SSH를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;마스터 노드(hadoop-01)&lt;/b&gt;에서 쌍으로 이루어진 SSH 키를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$ &lt;u&gt;pwd&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;/home/hadoop&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;u&gt;ssh-keygen -t rsa&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;Generating public/private rsa key pair.&lt;/div&gt;&lt;div&gt;Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): &lt;u&gt;[Enter]&lt;/u&gt;&lt;/div&gt;&lt;div&gt;Created directory '/home/hadoop/.ssh'.&lt;/div&gt;&lt;div&gt;Enter passphrase (empty for no passphrase):&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;u&gt;[Enter]&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Enter same passphrase again:&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;u&gt;[Enter]&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Your identification has been saved in /home/hadoop/.ssh/id_rsa.&lt;/div&gt;&lt;div&gt;Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.&lt;/div&gt;&lt;div&gt;The key fingerprint is:&lt;/div&gt;&lt;div&gt;c5:f5:5b:3a:83:13:1b:9b:07:2c:dc:11:34:3d:a9:41 hadoop@hadoop-01&lt;/div&gt;&lt;div&gt;The key's randomart image is:&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;생성된 공개키를 다른 서버에 복사한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;ssh-copy-id -i [복사할 공개키 경로] [대상 서버 계정]@[대상 서버]&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$ &lt;u&gt;ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@hadoop-02&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;The authenticity of host 'hadoop-02 (192.168.153.11)' can't be established.&lt;/p&gt;
&lt;p&gt;ECDSA key fingerprint is 28:1a:ab:fa:2d:a8:e0:c8:5b:ef:f7:ff:74:69:45:96.&lt;/p&gt;
&lt;p&gt;Are you sure you want to continue connecting (yes/no)? &lt;u&gt;yes&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed&lt;/p&gt;
&lt;p&gt;/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-02's password: &lt;u&gt;[SSH 비밀번호 입력]&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Number of key(s) added: 1&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Now try logging into the machine, with: &amp;nbsp; &quot;ssh 'hadoop@hadoop-02'&quot;&lt;/p&gt;
&lt;p&gt;and check to make sure that only the key(s) you wanted were added.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$ &lt;u&gt;ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@hadoop-03&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$ &lt;u&gt;ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@hadoop-01&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하둡 다운&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;로드 및 압축 해제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 최신 버전은 1.2.1 이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~$ &lt;u&gt;pwd&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;/home/hadoop&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-01:~$ &lt;u&gt;wget https://archive.apache.org/dist/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;압축 해제!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;hadoop@hadoop-01:~$ &lt;u&gt;tar xvfz hadoop-1.2.1.tar.gz&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;hadoop-env 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이것 저것....&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$ &lt;u&gt;pwd&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;/home/hadoop/hadoop-1.2.1/conf&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$&amp;nbsp;&lt;u&gt;vi hadoop-env.sh&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# The java implementation to use. &amp;nbsp;Required.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# 현재 우분투 14에 Oracle JDK 7을 설치하면 아래와 같은 경로에 설치된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;export JAVA_HOME=/usr/lib/jvm/java-7-oracle&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# The maximum amount of heap to use, in MB. Default is 1000.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;export HADOOP_HEAPSIZE=768&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# The directory where pid files are stored. /tmp by default.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# NOTE: this should be set to a directory that can only be written to by&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; the users that are going to run the hadoop daemons. &amp;nbsp;Otherwise there is&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; the potential for a symlink attack.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;export HADOOP_PID_DIR=/home/hadoop/hadoop-1.2.1/pids&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;masters 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;masters 파일에는 &lt;b&gt;보조네임 노드&lt;/b&gt;를 실행할 서버를 설정한다. (여러개 가능)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1&lt;u&gt;/conf$ vi masters&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop-02&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;slaves 수정&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;slaves 파일에는 &lt;b&gt;데이터 노드&lt;/b&gt;를 실행할 서버를 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$ &lt;u&gt;vi slaves&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop-02&lt;/p&gt;
&lt;p&gt;hadoop-03&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;core-site.xml 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이것 저것... ㅠㅠ&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$ &lt;u&gt;vi core-site.xml&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;&amp;lt;!-- Put site-specific property overrides in this file. --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;fs.default.name&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;hdfs://hadoop-01:9000&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;hadoop.tmp.dir&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;/home/hadoop/hadoop-data&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;hdfs-site.xml 수정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$ &lt;u&gt;vi hdfs-site.xml&lt;/u&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;&amp;lt;!-- Put site-specific property overrides in this file. --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;3&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;dfs.http.address&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;hadoop-01:50070&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;dfs.secondary.http.address&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;hadoop-02:50090&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;mapred-site.xml 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;..&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~/hadoop-1.2.1/conf$ &lt;u&gt;vi mapred-site.xml&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;&amp;lt;!-- Put site-specific property overrides in this file. --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;mapred.job.tracker&amp;lt;/name&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;hadoop-01:9001&amp;lt;/value&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하둡 환경설정 복사&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;네임노드에서 모든 수정 작업이 완료되면 다른 데이터노드 서버로 파일을 복사한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:~$ &lt;u&gt;cd ~&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-01:&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;~&lt;/span&gt;$ &lt;u&gt;tar zcvf hadoop.tar.gz hadoop-1.2.1&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-01:~$ &lt;u&gt;scp hadoop.tar.gz hadoop@hadoop-02:/home/hadoop&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;hadoop@hadoop-01:~$ &lt;u&gt;scp hadoop.tar.gz hadoop@hadoop-03:/home/hadoop&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;각각 서버로 전송된 파일 압축 해제&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-02:~&lt;/span&gt;$ &lt;u&gt;tar xvfz hadoop.tar.gz&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-03:~&lt;/span&gt;$ &lt;u&gt;tar xvfz hadoop.tar.gz&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하둡 실행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;네임노드를 초기화한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;~/hadoop-1.2.1/bin&lt;/span&gt;$ &lt;u&gt;./hadoop namenode -format&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;ace-editor&quot; ace-mode=&quot;plain_text&quot; ace-theme=&quot;terminal&quot;&gt;INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = hadoop-01/192.168.153.10
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on ...
STARTUP_MSG:   java = 1.7.0_80
************************************************************/
INFO util.GSet: Computing capacity for map BlocksMap
INFO util.GSet: VM type       = 64-bit
INFO util.GSet: 2.0% max memory = 778502144
INFO util.GSet: capacity      = 2^21 = 2097152 entries
INFO util.GSet: recommended=2097152, actual=2097152
INFO namenode.FSNamesystem: fsOwner=hadoop
INFO namenode.FSNamesystem: supergroup=supergroup
INFO namenode.FSNamesystem: isPermissionEnabled=true
INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
INFO namenode.NameNode: Caching file names occuring more than 10 times
INFO common.Storage: Image file /home/hadoop/hadoop-data/dfs/name/current/fsimage of size 112 bytes saved in 0 seconds.
INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/hadoop/hadoop-data/dfs/name/current/edits
INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/hadoop/hadoop-data/dfs/name/current/edits
INFO common.Storage: Storage directory /home/hadoop/hadoop-data/dfs/name has been successfully formatted.
INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-01/192.168.153.10
************************************************************/&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;전부 실행&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@hadoop-01:&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;~/hadoop-1.2.1/bin&lt;/span&gt;$ &lt;u&gt;./start-all.sh&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;ace-editor&quot; ace-mode=&quot;plain_text&quot; ace-theme=&quot;terminal&quot;&gt;starting namenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-namenode-hadoop-01.out
hadoop-03: starting datanode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-datanode-hadoop-03.out
hadoop-02: starting datanode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-datanode-hadoop-02.out
hadoop-01: starting secondarynamenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-secondarynamenode-hadoop-01.out
starting jobtracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-jobtracker-hadoop-01.out
hadoop-03: starting tasktracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-tasktracker-hadoop-03.out
hadoop-02: starting tasktracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-tasktracker-hadoop-02.out&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;제대로 올라갔는지 확인하자&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot;&gt;&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-01&lt;/span&gt;:~$ &lt;u&gt;jps&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;3050 JobTracker&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;2730 NameNode&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-02&lt;/span&gt;:~$ &lt;u&gt;jps&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;3067 SecondaryNameNode&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2951 DataNode&lt;/p&gt;
&lt;p&gt;3190 TaskTracker&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;hadoop@&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;hadoop-03&lt;/span&gt;:~$ &lt;u&gt;jps&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;3087 TaskTracker&lt;/p&gt;
&lt;p&gt;2949 DataNode&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;http://hadoop-01:50070&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22113E495643895010&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22113E495643895010&quot; width=&quot;750&quot; height=&quot;694&quot; filename=&quot;sshot-01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Study/Hadoop</category>
      <category>hadoop</category>
      <category>Java</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/176</guid>
      <comments>https://antop.tistory.com/entry/Installing-Hadoop-1-on-Ubuntu-1404#entry176comment</comments>
      <pubDate>Thu, 12 Nov 2015 03:37:54 +0900</pubDate>
    </item>
    <item>
      <title>JSP EL(Expression Language) 사용이 안될 때...</title>
      <link>https://antop.tistory.com/entry/JSP-ELExpression-Language-%EC%82%AC%EC%9A%A9%EC%9D%B4-%EC%95%88%EB%90%A0-%EB%95%8C</link>
      <description>&lt;p&gt;후 이런 사소한거 가지고 반나절을 날려 먹었네... 기억해두자..&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;GWT 로 프로젝트 진행 중 jsp에 EL 태그를 사용할 일이 있어서 썻더니 그대로 나온다. ㄷㄷ;;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;뭐 여러 가지 원인이 있겠지만 나의 경우는 아래와 같이 해결했다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;GWT 개발 모드시 내부적으로 Jetty 를 사용 하는데 WAS 타는듯? -_-/&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;jsp 파일의 상단에 아래와 같이 추가해주자..&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;jsp&quot;&gt;&lt;%@ page isELIgnored=&quot;false&quot; %&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java+/Trouble Shooting</category>
      <category>EL</category>
      <category>JSP</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/175</guid>
      <comments>https://antop.tistory.com/entry/JSP-ELExpression-Language-%EC%82%AC%EC%9A%A9%EC%9D%B4-%EC%95%88%EB%90%A0-%EB%95%8C#entry175comment</comments>
      <pubDate>Mon, 20 Apr 2015 23:33:48 +0900</pubDate>
    </item>
    <item>
      <title>GWT with Maven</title>
      <link>https://antop.tistory.com/entry/GWT-with-Maven</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Installed the Java SDK&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you don’t have a recent version of the Java SDK installed, download and install &lt;a href=&quot;http://java.sun.com/javase/downloads/index.jsp&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Sun Java Standard Edition SDK&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;적어도 이 문서를 찾아보는 이라면 자바&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;는 이미 깔려 있을 것이라고 굳게 믿는다... -_-/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Installed Eclipse or your favorite Java IDE&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In these tutorials, we use Eclipse because it is open source. However, GWT does not tie you to &lt;a href=&quot;http://www.eclipse.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Eclipse&lt;/a&gt;. You can use &lt;a href=&quot;http://www.jetbrains.com/idea/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;IntelliJ&lt;/a&gt;, &lt;a href=&quot;http://www.netbeans.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;NetBeans&lt;/a&gt; or any Java IDE you prefer. If you use a Java IDE other than Eclipse, the screenshots and some of the specific instructions in the tutorial will be different, but the basic GWT concepts will be the same.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If your Java IDE does not include Apache &lt;a href=&quot;http://ant.apache.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Ant&lt;/a&gt; support, you can download and unzip Ant to easily compile and run GWT applications.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;이클립스를 기준으로 한다. 현재 최신 버전인 Luna 로 하겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22342B455501D6B40D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22342B455501D6B40D&quot; width=&quot;750&quot; height=&quot;94&quot; filename=&quot;sshot-2015-03-13-[02-58-26].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Installed the Google Plugin for Eclipse&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://developers.google.com/appengine/docs/java/tools/eclipse&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Google Plugin for Eclipse&lt;/a&gt; adds functionality to Eclipse for creating and developing GWT applications.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;구글 플러그인을 깔자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Help - Install New Software...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 328px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26073A3C5501DCF714&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26073A3C5501DCF714&quot; width=&quot;328&quot; height=&quot;276&quot; filename=&quot;sshot-2015-03-13-[03-18-03].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Work with: &lt;u&gt;https://dl.google.com/eclipse/plugin/4.4&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;항목중에 Google Plugin for Eclise 4.4 를 체크 - Next 버튼 클릭.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214236335501DD0D17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214236335501DD0D17&quot; width=&quot;750&quot; height=&quot;658&quot; filename=&quot;sshot-2015-03-13-[03-19-07].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Using the Archetype&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://mojo.codehaus.org/gwt-maven-plugin/user-guide/archetype.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://mojo.codehaus.org/gwt-maven-plugin/user-guide/archetype.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;메이븐 archetype 를 업데이트 해줘야 한다. (현재 최신 버전은 2.7.0 이다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;File - New - Other...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Maven Project 선택.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 616px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23755B4255051BE517&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23755B4255051BE517&quot; width=&quot;616&quot; height=&quot;552&quot; filename=&quot;sshot-2015-03-15-[14-42-41].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;gwt-maven 으로 필터링을 하게 되면 하나가 나오는데 버전이 &lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;2.5.0&lt;/span&gt;&lt;/b&gt; 일 것이다. (아래처럼 2.7.0 이라면 패스)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Add Archetype 버튼 클릭.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 616px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217B464F55051CB509&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217B464F55051CB509&quot; width=&quot;616&quot; height=&quot;549&quot; filename=&quot;sshot-2015-03-15-[14-43-41].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Archetype Group Id: &lt;u&gt;org.codehaus.mojo&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Archetype Artifact Id: &lt;u&gt;gwt-maven-plugin&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Archetype Version: &lt;u&gt;2.7.0&lt;/u&gt; (현재의 최신 버전)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 535px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/247BC24955051CFA05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F247BC24955051CFA05&quot; width=&quot;535&quot; height=&quot;291&quot; filename=&quot;sshot-2015-03-15-[14-46-58].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;OK 버튼 클릭하면 archetype 을 다운로드해서 업데이트 한다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;아직 프로젝트는 안만들 것이니 Canel 버튼 클릭.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Creating the StockWatcher application (using Eclipse)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;File - New &amp;nbsp;- Other... - Maven Project&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Group Id:&amp;nbsp;&lt;u&gt;com.google.gwt.sample&lt;/u&gt;&amp;nbsp;(아무거나 -_-)&lt;/p&gt;&lt;p&gt;Artifact Id:&amp;nbsp;&lt;u&gt;StockWatcher&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Package:&amp;nbsp;&lt;u&gt;com.google.gwt.sample.stockwatcher&lt;/u&gt;&lt;/p&gt;&lt;p&gt;module:&amp;nbsp;&lt;u&gt;StockWatcher&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;※ 여기서 모듈명은&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;GWT 튜토리얼에 있는 StockWatcher 로 하겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 616px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/210DB33A55085AED2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F210DB33A55085AED2C&quot; width=&quot;616&quot; height=&quot;319&quot; filename=&quot;sshot-2015-03-15-[14-54-36].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;Finish 버튼 클릭.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;border-color: black; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: solid none none; height: 1px;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&lt;b&gt;Using the Google Eclipse Plugin&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://mojo.codehaus.org/gwt-maven-plugin/eclipse/google_plugin.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://mojo.codehaus.org/gwt-maven-plugin/eclipse/google_plugin.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;메이븐을 이용해서 만들었는데 이클립스의 개발자 모드로 해보려면 추가 작업이 필요하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;resources 쪽에 있는 gwt.xml 파일을 java 쪽으로 옮겨야한다.&lt;/p&gt;&lt;p&gt;구글 플러그인에서 resources 에 있는 gwt.xml 을 인식하지 못하는 것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;src/main/resources/&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;com/google/gwt/sample/stockwatcher&lt;/span&gt;&amp;nbsp;아래에 있는 StockWatcher.gwt.xml 파일을&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;com.google.gwt.sample.stockwatcher&lt;/span&gt;&amp;nbsp;패키지로 이동시킨다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 346px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22677A3455085AD803&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22677A3455085AD803&quot; width=&quot;346&quot; height=&quot;405&quot; filename=&quot;sshot-2015-03-15-[15-00-12].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;이동 결과&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 318px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/271C513C55085B6E22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F271C513C55085B6E22&quot; width=&quot;318&quot; height=&quot;270&quot; filename=&quot;sshot-2015-03-15-[15-00-19].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음은 Google 플러그인 연결(?) 작업이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StockWatcher 프로젝트에서 오른쪽 버튼 클릭 - Properties&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 465px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2707133555085B8827&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2707133555085B8827&quot; width=&quot;465&quot; height=&quot;172&quot; filename=&quot;sshot-2015-03-15-[15-09-08].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;Google - Web Application&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This project has a War directory 체크&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 679px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/221EFC395509C88824&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F221EFC395509C88824&quot; width=&quot;679&quot; height=&quot;209&quot; filename=&quot;sshot-2015-03-15-[15-09-21].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;Google - Web Toolkit&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Use Google Web Toolkit 체크&lt;/p&gt;&lt;p&gt;Entry Point Modules 에 StockWatcher 가 등록되어 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 679px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2175393655085BA333&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2175393655085BA333&quot; width=&quot;679&quot; height=&quot;278&quot; filename=&quot;sshot-2015-03-15-[15-09-29].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OK 버튼 클릭&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;※ OK 버튼 클릭 시 NullPointException 에러가 나면 취소 후 위 작업을 다시 해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;border-color: black; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: solid none none; height: 1px;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Testing the default project components&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StockWatcher&amp;nbsp;프로젝트에서 오른쪽 버튼 클릭 - Run As - Web Application (GWT Super Dev Mode)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 662px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2125D73655085BB606&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2125D73655085BB606&quot; width=&quot;662&quot; height=&quot;297&quot; filename=&quot;sshot-2015-03-15-[15-18-42].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;WAR 디렉토리를 선택하라고 최초에 한번 나올 것이다. src/main/&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;webapp(기본) 를 선택하자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;앞으로 여기에 모든 파일들이 적용 된다. 라이브러리, 컴파일 되는 자바스크립트 파일 등등..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 383px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24329A355534E52203&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24329A355534E52203&quot; width=&quot;383&quot; height=&quot;379&quot; filename=&quot;sshot-2015-04-20-[20-37-28].png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;Console 창에 로그 출력 되다가 Development Mode 창에 아래와 같이 주소가 나오면 성공!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 647px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2630303B55085BC819&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2630303B55085BC819&quot; width=&quot;647&quot; height=&quot;281&quot; filename=&quot;sshot-2015-03-15-[15-21-22].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;더블클릭 해서 브라우저를 띄워보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25767B3955085C2505&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25767B3955085C2505&quot; width=&quot;750&quot; height=&quot;611&quot; filename=&quot;sshot-2015-03-15-[15-26-57].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 GWT 로 &quot;Hello World&quot; 찍었다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Framework</category>
      <category>GWT</category>
      <category>maven</category>
      <category>Tutorial</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/171</guid>
      <comments>https://antop.tistory.com/entry/GWT-with-Maven#entry171comment</comments>
      <pubDate>Wed, 18 Mar 2015 02:31:37 +0900</pubDate>
    </item>
    <item>
      <title>UEFI BIOS using USB Boot</title>
      <link>https://antop.tistory.com/entry/UEFI-BIOS-using-USB-Boot</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduce&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데스크탑에 VMware ESXi 를 설치하겠다는 도전을 시작해서 드디어&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;드라이버 다 잡아서 설치를 했더니... 부팅이 안된다... ㅜㅜ&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;No Bootable Device ....&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;눈에 불을 키고 열심히 구글링을 한 결과 해결법이 있었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;EFI/MBR 같은 부트섹터 관련된 내용이라 걍 따라했다;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;간단한 작업이기도 하고&amp;nbsp;아래 참조 링크에 설명이 너무 잘 나와 있어서 여기선 대충 설명 하겠다 -_-;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;처음 CD/USB 를 이용하여 설치할 때 처음 나오는 화면이다 여기서 5초 안에 &lt;u&gt;&lt;b&gt;Shift + O&lt;/b&gt;&lt;/u&gt;&amp;nbsp;를 누른다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;(Edit boot options)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/236E264D545840A340&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F236E264D545840A340&quot; width=&quot;750&quot; height=&quot;563&quot; filename=&quot;Other 64-bit-2014-11-04-11-55-08.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;그러면 맨 아래에 커맨드를 입력할 수 있게 나오는데 여기서 &lt;u&gt;&lt;b&gt;runweasel formatwithmbr&lt;/b&gt;&lt;/u&gt; 을 입력하고 엔터!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 750px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/246B3E485458418323&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F246B3E485458418323&quot; width=&quot;750&quot; height=&quot;563&quot; filename=&quot;Other 64-bit-2014-11-04-11-55-57.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 설치를 완료 하면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Reference&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.virt-infrastructure.com/?p=375&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;http://www.virt-infrastructure.com/?p=375&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.syntecsystems.co.uk/solved-cannot-find-boot-device-following-successful-installation-vmware-esxi-5-0-5-1/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.syntecsystems.co.uk/solved-cannot-find-boot-device-following-successful-installation-vmware-esxi-5-0-5-1/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://sparrowangelstechnology.blogspot.kr/2012/11/no-bootable-device-after-successful.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://sparrowangelstechnology.blogspot.kr/2012/11/no-bootable-device-after-successful.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>boot</category>
      <category>esxi</category>
      <category>MBR</category>
      <category>UEFI</category>
      <category>VMware</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/168</guid>
      <comments>https://antop.tistory.com/entry/UEFI-BIOS-using-USB-Boot#entry168comment</comments>
      <pubDate>Tue, 4 Nov 2014 22:30:00 +0900</pubDate>
    </item>
    <item>
      <title>Install Driver for VMware ESXi Installer</title>
      <link>https://antop.tistory.com/entry/Install-Driver-for-VMware-ESXi-Installer</link>
      <description>&lt;P&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;Introduce&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;집에 서버급이 아닌 약간 좋은 데스크탑에 VMware ESXi(이하 ESXi) 를 설치하여 혼자 놀려고 하였다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;하지만 서버/워크스테이션이 아닌 일반 데스크탑 하드웨어에 ESXi 를 설치하는 일은 쉽지가 않다...&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;크게 문제는 두가지가 있었는데.. 하나씩 해결해보자&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;나의 경우는 아래와 같이 랜카드와 AHCI 가 주된 문제였지만... 혹시나 다른 비슷한 문제로 고통받는 이들을 위해 남긴다.. ㅠㅠ&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;ASRock Z97 Extreme4&lt;/P&gt;
&lt;P&gt;&amp;nbsp;-&amp;nbsp;Giga PHY Intel® I218V&lt;/P&gt;
&lt;P&gt;&amp;nbsp;- ICH9 / AHCI&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;HR style=&quot;BORDER-TOP: black 1px solid; HEIGHT: 1px; BORDER-RIGHT: black 0px; BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block&quot;&gt;

&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;소프트웨어 레이드를 지원하지 않는다&lt;/SPAN&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;메인보드에서 제공하는 레이드는&amp;nbsp;&lt;B&gt;소프트웨어 레이드&lt;/B&gt;이다.&amp;nbsp;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;ESXi 는 소프트웨어 레이드를 지원하지 않는다고 한다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;레이드 구성을 하지 않고 ESXi 안에서 HDD 여러개를 하나의 데이터스토어로 사용할 수는 있는데 이러다가 HDD 하나 뻑나면? ㄷㄷ&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;해결법으로 하드웨어 레이드 컨트롤러(&lt;A class=tx-link href=&quot;http://www.adaptec.com/en-us/products/series/6e/&quot; target=_blank&gt;Adaptec RAID 6805E&lt;/A&gt;)를 구매하였다. 내 돈.. ㅠㅠ&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P style=&quot;FLOAT: none; TEXT-ALIGN: left; CLEAR: none&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 280px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2212BF3A545845680E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2212BF3A545845680E&quot; width=&quot;280&quot; height=&quot;220&quot; filename=&quot;6805e_280x220.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;HR style=&quot;BORDER-TOP: black 1px solid; HEIGHT: 1px; BORDER-RIGHT: black 0px; BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block&quot;&gt;

&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;드라이버(랜카드/AHCI 등등)를 수동으로 추가해야 한다.&lt;/SPAN&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;이 놈이 문제다... 나의 경우는 &lt;B&gt;랜카드 드라이버&lt;/B&gt;와 레이드 컨트롤러를 구매하기 전에 &lt;B&gt;AHCI 드라이버&lt;/B&gt;가 문제였다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;랜카드 드라이버를 적용하지 않고 설치를 하면 아래와 같은 메세지와 함께 설치가 안된다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P style=&quot;FLOAT: none; TEXT-ALIGN: left; CLEAR: none&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/230FC34A5458474F33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F230FC34A5458474F33&quot; width=&quot;640&quot; height=&quot;272&quot; filename=&quot;no_nic.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;겨우겨우 랜카드 드라이버는 적용해서 다음으로 넘어갔는데 AHCI 드라이버가 안잡혀 있어서 HDD 목록이 안나온다.. ㅜㅜ&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P style=&quot;FLOAT: none; TEXT-ALIGN: left; CLEAR: none&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 592px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/273B4741545847A705&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F273B4741545847A705&quot; width=&quot;592&quot; height=&quot;297&quot; filename=&quot;no_hdd.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;해결 방법은 ESXi 설치 이미지에 해당 드라이버를 넣어서 설치해야 한다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;http://www.vmware.com/resources/compatibility/search.php&quot; target=_blank&gt;VMware Compatibility Guide&lt;/A&gt; 사이트에서 제공해주는 드라이버가 있다면 OK!&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;파일 확장자가 &lt;B&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;vib&lt;/SPAN&gt;&lt;/B&gt;(vSphere Installation Bundle)인 드라이버 파일을&amp;nbsp;구해야 한다. 나의 경우 아래 3개의 드라이버를 찾아냈다! -_-/&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;http://vibsdepot.v-front.de/wiki/index.php/Net-e1000e&quot; target=_blank&gt;Intel I218V&lt;/A&gt; / &lt;A class=tx-link href=&quot;http://vibsdepot.v-front.de/wiki/index.php/Sata-xahci&quot; target=_blank&gt;SATA-XAHCI&lt;/A&gt;&amp;nbsp;/ &lt;A class=tx-link href=&quot;http://www.adaptec.com/en-us/downloads/vmware/vmware_esxi_5/productid=sas-6805e&amp;amp;dn=adaptec+raid+6805e.html&quot; target=_blank&gt;Adaptec RAID 6805E&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;만약 ESXi 용 드라이버를 구할 수 없다면 직접 리눅스 깔고 드라이버 잡아서 vib 파일을 만들어야 할 것이다. ㅠㅠ&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;드라이버를&amp;nbsp;구했으면 설치 이미지에 넣어야 한다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot; href=&quot;http://www.v-front.de/p/esxi-customizer-ps.html&quot; target=_blank&gt;ESXi-Customizer-PS&lt;/A&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 1.5&quot;&gt; 를 다운로드 받자.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;https://my.vmware.com/kr/web/vmware/details?productId=352&amp;amp;downloadGroup=PCLI550&quot; target=_blank&gt;VMware vSphere PowerCLI&lt;/A&gt; 에서 아래와 같이 명령을 실행하면 자동으로 ISO 이미지 파일을 만들어 준다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-TOP: rgb(203,203,203) 1px solid; BORDER-RIGHT: rgb(203,203,203) 1px solid; BORDER-BOTTOM: rgb(203,203,203) 1px solid; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; PADDING-LEFT: 10px; BORDER-LEFT: rgb(203,203,203) 1px solid; PADDING-RIGHT: 10px; BACKGROUND-COLOR: rgb(255,255,255)&quot;&gt;
&lt;P&gt;PowerCLI &lt;U&gt;D:\ESXi&lt;/U&gt;&amp;gt; &lt;U&gt;.\ESXi-Customizer-PS-v2.3.ps1 -pkgDir D:\ESXi\vibs&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Script to build a customized ESXi installation ISO or Offline bundle using the VMware PowerCLI ImageBuilder snapin&lt;/P&gt;
&lt;P&gt;(Call with -help for instructions)&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Logging to C:\Users\Antop\AppData\Local\Temp\ESXi-Customizer-PS.log ...&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Running with PowerShell version 4.0 and VMware vSphere PowerCLI 5.5 Release 1 build 1295336&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Connecting the VMware ESXi base depot ... [OK]&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Getting ImageProfiles, please wait ... [OK]&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Using ImageProfile ESXi-5.5.0-20141004001-standard ...&lt;/P&gt;
&lt;P&gt;(dated 09/19/2014 01:44:42, AcceptanceLevel: PartnerSupported,&lt;/P&gt;
&lt;P&gt;For more information, see http://kb.vmware.com/kb/2087364.)&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;Loading Offline bundles and VIB files from D:\ESXi\vibs ...&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;Loading D:\ESXi\vibs\Adaptec_Inc_bootbank_scsi-aacraid_5.5.5.2.1.40301-1OEM.550.0.0.1331820.vib ... [OK]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;Add VIB scsi-aacraid 5.5.5.2.1.40301-1OEM.550.0.0.1331820 [OK, replaced 1.1.5.1-9vmw.550.0.0.1331820]&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;Loading D:\ESXi\vibs\e1000e-3.1.0.2-glr.vib ... [OK]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;Add VIB net-e1000e 3.1.0.2-glr [New AcceptanceLevel: CommunitySupported] [OK, replaced 1.1.2-4vmw.550.1.15.1623387&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; COLOR: rgb(255,0,0); LINE-HEIGHT: 1.5&quot;&gt;]&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;Loading D:\ESXi\vibs\sata-xahci-1.24-1.x86_64.vib ... [OK]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;Add VIB sata-xahci 1.24-1 [OK, added]&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;Exporting the ImageProfile to 'D:\ESXi\ESXi-5.5.0-20141004001-standard-customized.iso'.&lt;/SPAN&gt; Please be patient ...&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;All done.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;PowerCLI D:\ESXi&amp;gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;ISO 파일이 만들어졌다... 이걸로 설치 하자. ㅠㅠ&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P style=&quot;FLOAT: none; TEXT-ALIGN: left; CLEAR: none&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 413px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24409E4F54584C440B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24409E4F54584C440B&quot; width=&quot;413&quot; height=&quot;24&quot; filename=&quot;sshot-2014-11-04-[12-46-22].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-TOP: black 1px solid; HEIGHT: 1px; BORDER-RIGHT: black 0px; BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block&quot;&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;Reference&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;http://www.vmware.com/resources/compatibility/search.php&quot; target=_blank&gt;http://www.vmware.com/resources/compatibility/search.php&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;http://www.v-front.de/&quot; target=_blank&gt;http://www.v-front.de/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class=tx-link href=&quot;http://vibsdepot.v-front.de/wiki&quot; target=_blank&gt;http://vibsdepot.v-front.de/wiki&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;
&lt;HR style=&quot;BORDER-TOP: black 1px solid; HEIGHT: 1px; BORDER-RIGHT: black 0px; BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block&quot;&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;File&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/2430D03C54CDF33307&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;aacraid-1.2.1.40301-offline_bundle-1440192.zip&lt;/a&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/270F3B3C54CDF33635&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;net-e1000e-3.1.0.2-glr-offline_bundle.zip&lt;/a&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/211CC53C54CDF3392A&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;sata-xahci-1.24-1-offline_bundle.zip&lt;/a&gt;&lt;/span&gt;&lt;/P&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;P&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/272D463354CDF5E725&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;ESXi-Customizer-PS-v2.3.ps1&lt;/a&gt;&lt;/span&gt;&lt;/P&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>AHCI</category>
      <category>esxi</category>
      <category>i218</category>
      <category>Lan</category>
      <category>raid</category>
      <category>SATA</category>
      <category>VMware</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/169</guid>
      <comments>https://antop.tistory.com/entry/Install-Driver-for-VMware-ESXi-Installer#entry169comment</comments>
      <pubDate>Tue, 4 Nov 2014 21:30:00 +0900</pubDate>
    </item>
    <item>
      <title>Install VMware Tools in Ubuntu</title>
      <link>https://antop.tistory.com/entry/Install-VMware-Tools-in-Ubuntu</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduce&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;VMware ESXi 에다가 Ubuntu 설치 했는데 VMware Tools 깔아야 될 거 같아서 해보도록 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 330px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25449F4F5457501B2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25449F4F5457501B2D&quot; width=&quot;330&quot; height=&quot;196&quot; filename=&quot;sshot-2014-11-03-[18-03-36].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아마 다른 리눅스/유닉스 계열도 거의 같은 방법일 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 환경에서 하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;VMware ESXi 5.5&lt;/p&gt;&lt;p&gt;VMware vSphere Client 5.5.0&lt;/p&gt;&lt;p&gt;Ubuntu Server 14.04.1 LTS&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼서 VM 생성 후 우분투를 설치한 후 부팅(로그인) 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;콘솔 창의 메뉴에서 &lt;u&gt;VM - 게스트 - VMware Tools 설치/업그레이드&lt;/u&gt; 선택.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/237129465457525E23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F237129465457525E23&quot; width=&quot;640&quot; height=&quot;295&quot; filename=&quot;sshot-2014-11-03-[18-55-28].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;안내 창이 나오면 &lt;u&gt;확인 버튼 클릭&lt;/u&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 546px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217B90465457525E11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217B90465457525E11&quot; width=&quot;546&quot; height=&quot;203&quot; filename=&quot;sshot-2014-11-03-[18-55-36].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 우분투 내에서 아래의 순서대로 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;마운트 대상이 될 디렉토리 하나 생성 해놓자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;$ &lt;u&gt;sudo mkdir /mnt/cdrom&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위의 메뉴에서 Tools 설치를 선택 했으면 자동으로 시디를 넣은 것 처럼 되어 있다. 마운트 하자&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;$ &lt;u&gt;sudo mount /dev/cdrom /mnt/cdrom&lt;/u&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;거기에 있는 gz 파일을 /tmp 쪽에 압축 해제하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;$ &lt;u&gt;sudo tar xzvf /mnt/cdrom/VMwareTools-9.4.10-2092844.tar.gz -C /tmp&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실행!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p&gt;$ &lt;u&gt;sudo /tmp/vmware-tools-distrib/vmware-install.pl&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;open-vm-tools are available from the OS vendor and VMware recommends using&lt;/p&gt;&lt;p&gt;open-vm-tools. See http://kb.vmware.com/kb/2073803 for more information.&lt;/p&gt;&lt;p&gt;Do you still want to proceed with this legacy installer? [no] &lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;y&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(34, 116, 28);&quot;&gt;.. 나머지는 그냥 다 엔터 치거나 적절히 선택 하자 -_-;;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 다시 확인 해보면 설치가 된 것으로 나온다~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 364px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2442443454575E0403&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2442443454575E0403&quot; width=&quot;364&quot; height=&quot;299&quot; filename=&quot;sshot-2014-11-03-[19-49-35].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Reference&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=cpQcP_MPqeI&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.youtube.com/watch?v=cpQcP_MPqeI&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>esxi</category>
      <category>Linux</category>
      <category>Tools</category>
      <category>ubuntu</category>
      <category>VMware</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/167</guid>
      <comments>https://antop.tistory.com/entry/Install-VMware-Tools-in-Ubuntu#entry167comment</comments>
      <pubDate>Mon, 3 Nov 2014 23:30:00 +0900</pubDate>
    </item>
    <item>
      <title>Create a VMware ESXi Bootable Flash Drive (USB)</title>
      <link>https://antop.tistory.com/entry/Create-a-VMware-ESXi-Bootable-Flash-Drive-USB</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Introduce&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;요즘 윈도우나 리눅스 같은 OS 설치 시 CD/DVD 가 아닌 USB 에 설치 파일을 넣어서 설치를 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;마찬가지로 ESXi도&amp;nbsp;USB로 설치할 수 있도록 세팅해보자. ㅎㅎ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;선택할 수 있을만 한 방법은 두가지가 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;※ 먼저 USB를 FAT&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;32 로 포멧 해놓자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 308px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2120A5355455069024&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2120A5355455069024&quot; width=&quot;308&quot; height=&quot;211&quot; filename=&quot;sshot-2014-11-01-[23-35-41].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Using UltraISO&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 &lt;a href=&quot;https://mirror.enha.kr/wiki/ISO%209660&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;ISO&lt;/a&gt; 파일을 그냥 불러오자.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 462px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2212A0355455069038&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2212A0355455069038&quot; width=&quot;462&quot; height=&quot;201&quot; filename=&quot;sshot-2014-11-01-[23-36-33].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;VMware ESXi 설치 이미지 파일을 선택한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 339px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/243896355455069106&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F243896355455069106&quot; width=&quot;339&quot; height=&quot;24&quot; filename=&quot;sshot-2014-11-01-[23-36-49].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&quot;부팅 가능&quot;을 확인하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 403px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/233D33355455069102&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F233D33355455069102&quot; width=&quot;403&quot; height=&quot;214&quot; filename=&quot;sshot-2014-11-01-[23-37-10].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;부팅&lt;/u&gt; - &lt;u&gt;디스크 이미지 기록&lt;/u&gt;&amp;nbsp;메뉴를 선택한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 419px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21111A355455069235&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21111A355455069235&quot; width=&quot;419&quot; height=&quot;300&quot; filename=&quot;sshot-2014-11-01-[23-37-17].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;디스크 드라이브: &lt;u&gt;USB 드라이브 선택&lt;/u&gt;하고 쓰기 버튼 클릭.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 559px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/261AE135545506922C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F261AE135545506922C&quot; width=&quot;559&quot; height=&quot;279&quot; filename=&quot;sshot-2014-11-01-[23-37-27].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;경고 뜬다. &lt;u&gt;예(Y) 버튼&lt;/u&gt; 클릭.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 494px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2727EE35545506921A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2727EE35545506921A&quot; width=&quot;494&quot; height=&quot;200&quot; filename=&quot;sshot-2014-11-01-[23-37-35].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;성공적으로 굽기 완료!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 559px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/271E5A355455069328&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F271E5A355455069328&quot; width=&quot;559&quot; height=&quot;248&quot; filename=&quot;sshot-2014-11-01-[23-42-30].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;부팅을 해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 679px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25436B3A54550BFF34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25436B3A54550BFF34&quot; width=&quot;679&quot; height=&quot;349&quot; filename=&quot;Other 64-bit-2014-11-02-00-58-23.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Using UNetbootin&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ISO 이미지를 USB 로 가능하게 만들어주는 프로그램으로 &lt;a href=&quot;http://unetbootin.sourceforge.net/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;UNetbootin&lt;/a&gt; 이라는 것이 있드라. -_-&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;실행 후 &lt;u&gt;ISO 파일을 선택&lt;/u&gt;하고 만들 &lt;u&gt;USB 드라이브&lt;/u&gt;를 선택한다.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 540px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/236E1C3F545512CE19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F236E1C3F545512CE19&quot; width=&quot;540&quot; height=&quot;255&quot; filename=&quot;sshot-2014-11-02-[01-43-27].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;진행 중...&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 540px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/225A553F545512CE30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F225A553F545512CE30&quot; width=&quot;540&quot; height=&quot;399&quot; filename=&quot;sshot-2014-11-02-[01-43-29].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;3. Installing Bootloader 단계에서 아래와 같이 물어보면 그냥 &lt;u&gt;Yes to All 버튼 클릭&lt;/u&gt;.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 516px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25697F3F545512CE1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25697F3F545512CE1E&quot; width=&quot;516&quot; height=&quot;156&quot; filename=&quot;sshot-2014-11-02-[01-44-50].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;완료.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 540px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2464253F545512CE24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2464253F545512CE24&quot; width=&quot;540&quot; height=&quot;249&quot; filename=&quot;sshot-2014-11-02-[01-45-51].png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;이제 USB 부팅 하면 된다.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</description>
      <category>Server/VMware ESXi</category>
      <category>esxi</category>
      <category>USB</category>
      <category>VMware</category>
      <author>Antop</author>
      <guid isPermaLink="true">https://antop.tistory.com/166</guid>
      <comments>https://antop.tistory.com/entry/Create-a-VMware-ESXi-Bootable-Flash-Drive-USB#entry166comment</comments>
      <pubDate>Sun, 2 Nov 2014 02:08:04 +0900</pubDate>
    </item>
  </channel>
</rss>