<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Specialist</title>
    <link>https://hotte.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 27 Jul 2026 23:02:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>tyha</managingEditor>
    <image>
      <title>Specialist</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2413733957A07C3E1B</url>
      <link>https://hotte.tistory.com</link>
    </image>
    <item>
      <title>Spring Stereotype 정리(@Component,@Repository,@Service,@Controller,@RestController)</title>
      <link>https://hotte.tistory.com/9</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h1&gt;
&lt;a id=&quot;user-content-spring-stereotype-정리&quot; class=&quot;anchor&quot; href=&quot;#spring-stereotype-%EC%A0%95%EB%A6%AC&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Spring Stereotype 정리&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Component&lt;/code&gt; (Since. Spring 2.5)&lt;/p&gt;

&lt;p&gt;스프링이 관리하는 컴포넌트를 나타내는 일반적인 스테레오 타입이다.  MVC 아키텍쳐 기반에서 계층이 분명한 컴포넌트는
아래 스테레오 타입을 사용해 성격을 구체화 하는 것 이 명확하며 이는 AOP 의 PointCut 에 대한 적절한 Target 으로 활용 될 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Repository&lt;/code&gt; (Since. Spring 2.0)&lt;/p&gt;

&lt;p&gt;Persistence Layer, 영속성을 가지는 계층 (데이터 접근 계층) 의 컴포넌트에 대해 선언한다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Service&lt;/code&gt; (Since. Spring 2.5)&lt;/p&gt;

&lt;p&gt;Business(Service) Layer, 비지니스 로직을 구현하는 컴포넌트에 대해 선언한다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Controller&lt;/code&gt; (Since. Spring 2.5)&lt;/p&gt;

&lt;p&gt;Presentation Layer 의 컴포넌트에서 선언한다. View 를 위해서는 @ResponseBody 에 대한 적절한 구현이 필요하다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@RestController&lt;/code&gt; (Since. Spring 4.0)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@Controller&lt;/code&gt; 와의 차이는 View 가 필요 없는 API 서비스와 같은 Rest 형태의 Controller 일 경우 사용한다는 점이다. @ResponseBody 가 포함된다.
(과거 @Controller + @ResponseBody 를 대신해준다. )&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;</description>
      <category>Spring/SpringCore</category>
      <category>component</category>
      <category>Controller</category>
      <category>repository</category>
      <category>restcontroller</category>
      <category>service</category>
      <category>spring</category>
      <category>stereotype</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/9</guid>
      <comments>https://hotte.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 23 Nov 2016 19:22:50 +0900</pubDate>
    </item>
    <item>
      <title>티스토리(Tistory) 에 마크다운(Markdown) 적용하기</title>
      <link>https://hotte.tistory.com/8</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h2&gt;
&lt;a id=&quot;user-content-티스토리tistory-에-마크다운markdown-적용하기&quot; class=&quot;anchor&quot; href=&quot;#%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%ACtistory-%EC%97%90-%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4markdown-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;티스토리(Tistory) 에 마크다운(Markdown) 적용하기&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tistory 환경설정&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sindresorhus/github-markdown-css&quot;&gt;github-markdown.css&lt;/a&gt; 다운로드&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tistory 관리자 페이지&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[파일업로드] 탭에 다운받은- &lt;code&gt;github-markdown.css&lt;/code&gt; 파일을 업로드&lt;/li&gt;
&lt;li&gt;[HTML] 탭에 &lt;code&gt;&amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt;&lt;/code&gt; 안에 stylesheet 적용 구문을 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-js&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;span class=&quot;pl-k&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;&amp;lt;&lt;/span&gt;link rel&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; href&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;./images/github-markdown.css&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;/&lt;/span&gt;head&lt;span class=&quot;pl-k&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;문서편집기 (Sublime Text)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt; 설치&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://packagecontrol.io/installation&quot;&gt;Package Control&lt;/a&gt; 설치&lt;/li&gt;
&lt;li&gt;Sublime Text 에서 &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;p&lt;/code&gt; 단축키 누름 (패키지 선택창)&lt;/li&gt;
&lt;li&gt;Markdown Preview Package 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;문서작성&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown 형식으로 문서 작성&lt;/li&gt;
&lt;li&gt;Sublime Text 에서 &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;p&lt;/code&gt; 단축키 누름 (패키지 선택창)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Markdown Preview: Export HTML in Sublime Text&lt;/code&gt; 선택 -&amp;gt; &lt;code&gt;github&lt;/code&gt; 선택&lt;/li&gt;
&lt;li&gt;Markdown 문서를 Github 스타일의 HTML 로 변환한 문서가 새 창에 생김&lt;/li&gt;
&lt;li&gt;문서에서 &lt;code&gt;&amp;lt;article&amp;gt;...&amp;lt;/article&amp;gt;&lt;/code&gt; 태그 영역만 COPY&lt;/li&gt;
&lt;li&gt;Tistory 에서 HTML 모드로 글쓰기 창에서 PASTE&lt;/li&gt;
&lt;li&gt;미리보기로 확인해 본다. 예쁘다. 나머지 글쓰기 마무리 하면 끝.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;github 스타일로 Code Highlighting 도 적용된다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;</description>
      <category>Note</category>
      <category>codehighlight</category>
      <category>github</category>
      <category>markdown</category>
      <category>SublimeText</category>
      <category>tistory</category>
      <category>마크다운</category>
      <category>티스토리</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/8</guid>
      <comments>https://hotte.tistory.com/8#entry8comment</comments>
      <pubDate>Fri, 18 Nov 2016 13:18:26 +0900</pubDate>
    </item>
    <item>
      <title>웹로그 분석을 위한 Apache Log Format 과 Logstash Filter 설정</title>
      <link>https://hotte.tistory.com/7</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h1&gt;
&lt;a id=&quot;user-content-웹로그-분석을-위한-apache-log-format-과-logstash-filter-설정&quot; class=&quot;anchor&quot; href=&quot;#%EC%9B%B9%EB%A1%9C%EA%B7%B8-%EB%B6%84%EC%84%9D%EC%9D%84-%EC%9C%84%ED%95%9C-apache-log-format-%EA%B3%BC-logstash-filter-%EC%84%A4%EC%A0%95&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;웹로그 분석을 위한 Apache Log Format 과 Logstash Filter 설정&lt;/h1&gt;

&lt;p&gt;ElasticStack (ELK) 을 활용한 웹서비스 로그 분석 인프라 구축 작업을 진행하였다. 소프트웨어 설치와 기본적인 가이드는 Elastic 공식 사이트나
구글링을 통해서 충분히 습득이 가능했다. 하지만 실제 우리 상황에 맞는 웹서비스 분석을 위해 로그 형식을 정의하고 이를 Parsing 하기 위해 Logstash Filter를 구현하는 부분에서는 많은 시행 착오가 있었다. (실력이 부족하여..) 관련한 내용을 공유해본다.&lt;/p&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-apache-log-format&quot; class=&quot;anchor&quot; href=&quot;#apache-log-format&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Apache Log Format&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;웹서버(Apache,Jboss-EWS) 의 로그포멧은 아래 형식으로 표준 설정&lt;/li&gt;
&lt;li&gt;기본적인 Combined Log 에 &lt;code&gt;쿠키&lt;/code&gt;, &lt;code&gt;수행시간&lt;/code&gt;, &lt;code&gt;x-request-with&lt;/code&gt; 추가&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LogFormat &quot;%h %l %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot; \&quot;%{Cookie}i\&quot; %D \&quot;%{x-requested-with}i\&quot;&quot; combined&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;형식문자&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;%...h?&lt;/td&gt;
&lt;td&gt;원격 호스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...l&lt;/td&gt;
&lt;td&gt;(있다면 identd가 제공한) 원격 로그인명. mod_ident가 있고 IdentityCheck가 On이 아니면 빼기기호를 기록한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...u&lt;/td&gt;
&lt;td&gt;원격 사용자 (auth가 제공하며, 상태(%s)가 401인 경우 이상한 값을 나올 수 있음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...t&lt;/td&gt;
&lt;td&gt;common log format 시간 형식(표준 영어 형식)의 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...r&lt;/td&gt;
&lt;td&gt;요청의 첫번째 줄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...s&lt;/td&gt;
&lt;td&gt;상태(status). 내부 리다이렉션된 요청의 경우 &lt;em&gt;원래&lt;/em&gt; 요청의 상태이다. 최종 요청의 상태는 %...&amp;gt;s.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...b&lt;/td&gt;
&lt;td&gt;HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이 전송한 내용이 없는 경우 0 대신 '-'가 나온다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%{Referer}&lt;/td&gt;
&lt;td&gt;Referer 정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%{User-Agent}&lt;/td&gt;
&lt;td&gt;Agent 정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%{Cookie}&lt;/td&gt;
&lt;td&gt;쿠키정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%...D&lt;/td&gt;
&lt;td&gt;요청을 처리하는데 걸린 시간 (마이크로초 단위).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%{x-requested-with}&lt;/td&gt;
&lt;td&gt;HTTP 표준헤더가 아닌 커스텀 헤더이며, Ajax 요청을 판별할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-logstash-configuration&quot; class=&quot;anchor&quot; href=&quot;#logstash-configuration&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Logstash Configuration&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns&quot;&gt;Logstash grok-patterns&lt;/a&gt; 을 참고하면 이해가 쉽다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;filter 구현 내용&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;grok

&lt;ul&gt;
&lt;li&gt;기본 message 필드를 grok 패턴을 이용해 분해&lt;/li&gt;
&lt;li&gt; request 에서 querystring 제외한 부분만 별도 추출 (uripath)&lt;/li&gt;
&lt;li&gt; referrer 정보 세분화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;date

&lt;ul&gt;
&lt;li&gt; 로그파일에 있는 timestamp 를 @timestamp 로 사용했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;kv

&lt;ul&gt;
&lt;li&gt; request 정보에서 Kev-Value 추출 (include_keys 에 정한 항목)&lt;/li&gt;
&lt;li&gt; cookie 정보에서 Kev-Value 추출 (include_keys 에 정한 항목)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;user-agent

&lt;ul&gt;
&lt;li&gt;OS,Browser,Device 등에 대한 정보 추출 (알아서 해준다!)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;geo-ip

&lt;ul&gt;
&lt;li&gt; 위치기반 분석 정보 추출&lt;/li&gt;
&lt;li&gt; geo 정보 database 파일 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ruby

&lt;ul&gt;
&lt;li&gt;@timestamp 필드에서 년월일을 추출함. (날짜별 index 명을 부여하기 위해)&lt;/li&gt;
&lt;li&gt;서버 시간으로 사용시 로그 파일에 기록된 시간과의 차이로 혼선이 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mutate

&lt;ul&gt;
&lt;li&gt;convert

&lt;ul&gt;
&lt;li&gt;index template 을 전체 string 에 not_analyzed 로 설정했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;따라서, 숫자형으로 처리가 필요한 항목에 대해 명시적으로 type을 정해줬다.&lt;/li&gt;
&lt;li&gt;remove_field : 불필요한 필드 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-ruby&quot;&gt;&lt;pre&gt;input {
  beats {
    port =&amp;gt; &lt;span class=&quot;pl-c1&quot;&gt;5044&lt;/span&gt;
  }
}

filter {  
  grok {
    match =&amp;gt; { &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;message&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;%{COMBINEDAPACHELOG} %{QS:cookie} %{NUMBER:time} %{QS:x-requested-with}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;] }
  }
  grok {
    match =&amp;gt; { &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;request&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;%{URIPATH:uripath}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;] }
  }
  grok {
    match =&amp;gt; { &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;referrer&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;%{URIPROTO}://%{IPORHOST:referrer_host}(?::%{POSINT})?%{URIPATH:referrer_uripath}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;] }
  }
  date {
    match =&amp;gt; [ &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;timestamp&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;dd/MMM/yyyy:HH:mm:ss Z&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; ]
    target =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;@timestamp&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
  }
  kv {
    source =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;request&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    field_split =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&amp;amp;?&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    include_keys =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;name&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;]
  }
  kv {
    source =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;cookie&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    field_split =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;; &lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    include_keys =&amp;gt; [ &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;id&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;]   
  }
  useragent {
    source =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;agent&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    prefix =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;a_&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
  }
  geoip {
    source =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;clientip&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    target =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;geoip&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    database =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;/home/hello/logstash-2.4.0/dat/GeoLiteCity.dat&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    add_field =&amp;gt; [ &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;[geoip][coordinates]&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;%{[geoip][longitude]}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; ]
    add_field =&amp;gt; [ &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;[geoip][coordinates]&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;%{[geoip][latitude]}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;  ]
  }
  ruby {
    code =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;event['index_day'] = event['@timestamp'].time.localtime.strftime('%Y%m%d')&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
  }
  mutate {
    convert =&amp;gt; {
       &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;[geoip][coordinates]&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;float&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
       &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;time&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;integer&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
       &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;bytes&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;integer&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    }    
    remove_field =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;@version&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;timestamp&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;tags&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;input_type&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;type&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;offset&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;fields&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;beat&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;count&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;cookie&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;]
  }
}

output {
  elasticsearch {
    hosts =&amp;gt; [&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;http://my_elastic_server&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;]
    index =&amp;gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;web-log-%{index_day}&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;    
  }
}&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-elasticsearch&quot; class=&quot;anchor&quot; href=&quot;#elasticsearch&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;ElasticSearch&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Index Tempate 은 아래와 같이 설정하였다.&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt; &quot;web-log&quot; : {
    &quot;order&quot; : 0,
    &quot;template&quot; : &quot;web-log-*&quot;,
    &quot;settings&quot; : { },
    &quot;mappings&quot; : {
      &quot;_default_&quot; : {
        &quot;dynamic_templates&quot; : [ {
          &quot;string_fields&quot; : {
            &quot;mapping&quot; : {
              &quot;index&quot; : &quot;not_analyzed&quot;,
              &quot;type&quot; : &quot;string&quot;
            },
            &quot;match_mapping_type&quot; : &quot;string&quot;,
            &quot;match&quot; : &quot;*&quot;
          }
        } ],
        &quot;properties&quot; : {
          &quot;geoip&quot; : {
            &quot;dynamic&quot; : true,
            &quot;properties&quot; : {
              &quot;location&quot; : {
                &quot;type&quot; : &quot;geo_point&quot;
              },
              &quot;longitude&quot; : {
                &quot;type&quot; : &quot;float&quot;
              },
              &quot;latitude&quot; : {
                &quot;type&quot; : &quot;float&quot;
              },
              &quot;ip&quot; : {
                &quot;type&quot; : &quot;ip&quot;
              }
            }
          }
        }
      }
    },
    &quot;aliases&quot; : { }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/article&gt;</description>
      <category>ElasticSearch</category>
      <category>apache</category>
      <category>elastic</category>
      <category>elasticsearch</category>
      <category>ELK</category>
      <category>filter</category>
      <category>format</category>
      <category>grok</category>
      <category>logstash</category>
      <category>로그</category>
      <category>아파치</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/7</guid>
      <comments>https://hotte.tistory.com/7#entry7comment</comments>
      <pubDate>Thu, 17 Nov 2016 14:42:09 +0900</pubDate>
    </item>
    <item>
      <title>SpringBoot Web Application War deploy(배포)하기(JBoss,Tomcat)</title>
      <link>https://hotte.tistory.com/6</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h1&gt;
&lt;a id=&quot;user-content-springboot-web-application-war-배포하기&quot; class=&quot;anchor&quot; href=&quot;#springboot-web-application-war-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;SpringBoot Web Application War 배포하기&lt;/h1&gt;

&lt;p&gt;SpringBoot Web Application 을 War 로 배포하는 방법을 소개하고자 한다.
특히 JBoss EAP 6, 7 에 배포하기 위해 시행착오가 많았다.&lt;/p&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-java-application&quot; class=&quot;anchor&quot; href=&quot;#java-application&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Java Application&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SpringBoot 메인 Application 클래스에 &lt;code&gt;SpringBootServletInitializer&lt;/code&gt; 클래스를 상속한다.&lt;/li&gt;
&lt;li&gt; &lt;code&gt;configure&lt;/code&gt; method 를 오버라이딩 한다.&lt;/li&gt;
&lt;li&gt;Servlet 3.0 이상에서 지원한다. 이전 버젼에서는 web.xml 을 이용한 설정 방법을 사용해야 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-java&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;@SpringBootApplication&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;Application&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;pl-e&quot;&gt;SpringBootServletInitializer&lt;/span&gt; {

    &lt;span class=&quot;pl-k&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;pl-smi&quot;&gt;SpringApplicationBuilder&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;configure&lt;/span&gt;(&lt;span class=&quot;pl-smi&quot;&gt;SpringApplicationBuilder&lt;/span&gt; &lt;span class=&quot;pl-v&quot;&gt;application&lt;/span&gt;) {
        &lt;span class=&quot;pl-k&quot;&gt;return&lt;/span&gt; application&lt;span class=&quot;pl-k&quot;&gt;.&lt;/span&gt;sources(&lt;span class=&quot;pl-smi&quot;&gt;Application&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;.&lt;/span&gt;class);
    }

    &lt;span class=&quot;pl-k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;main&lt;/span&gt;(&lt;span class=&quot;pl-k&quot;&gt;String&lt;/span&gt;[] &lt;span class=&quot;pl-v&quot;&gt;args&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;pl-smi&quot;&gt;Exception&lt;/span&gt; {
        &lt;span class=&quot;pl-smi&quot;&gt;SpringApplication&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;.&lt;/span&gt;run(&lt;span class=&quot;pl-smi&quot;&gt;Application&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;.&lt;/span&gt;class, args);
    }

}&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-configuration&quot; class=&quot;anchor&quot; href=&quot;#configuration&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Configuration&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot 설정 파일이다. /api 를 context root 이름으로 지정했다. &lt;/li&gt;
&lt;li&gt;Servlet Path 는 /* 로 지정해 줘야 한다. JBoss 6, 7 에서 default (/) 패스로 동작하지 않는다. (여기서 삽질)&lt;/li&gt;
&lt;li&gt;application.properties&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;server.port=8080
server.servlet-path=/*
server.contextPath=/api
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;application.yaml&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;server:
  port: 8080
  servletPath: /*
  contextPath: /api
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-pomxml&quot; class=&quot;anchor&quot; href=&quot;#pomxml&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;pom.xml&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;packaging&lt;/code&gt; 유형을 &lt;code&gt;war&lt;/code&gt; 로 변경한다.&lt;/li&gt;
&lt;li&gt;임베디드 톰캣 라이브러리에 대한 dependency를 제거한다. 방법은 아래 2가지가 있다.

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;spring-boot-starter-web&lt;/code&gt; 에서 &lt;code&gt;spring-boot-starter-tomcat&lt;/code&gt; 을 &lt;code&gt;exclusion&lt;/code&gt; 처리&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;spring-boot-starter-tomcat&lt;/code&gt; 의 &lt;code&gt;scope&lt;/code&gt; 을 &lt;code&gt;provided&lt;/code&gt; 로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-text-xml&quot;&gt;&lt;pre&gt;&amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;dependencies&lt;/span&gt;&amp;gt;
    &lt;span class=&quot;pl-c&quot;&gt;&amp;lt;!-- … --&amp;gt;&lt;/span&gt;
    &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;packaging&lt;/span&gt;&amp;gt;war&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;packaging&lt;/span&gt;&amp;gt;    
    &lt;span class=&quot;pl-c&quot;&gt;&amp;lt;!-- … --&amp;gt;&lt;/span&gt;
    &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;dependency&lt;/span&gt;&amp;gt;
      &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;org.springframework.boot&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;spring-boot-starter-web&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;exclusions&lt;/span&gt;&amp;gt;
      &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;exclusion&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;org.springframework.boot&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;spring-boot-starter-tomcat&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;
      &amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;exclusion&lt;/span&gt;&amp;gt;
    &amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;exclusions&lt;/span&gt;&amp;gt;
  &amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;dependency&lt;/span&gt;&amp;gt;
    &lt;span class=&quot;pl-c&quot;&gt;&amp;lt;!-- … --&amp;gt;&lt;/span&gt;
    &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;dependency&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;org.springframework.boot&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;groupId&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;spring-boot-starter-tomcat&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;artifactId&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;scope&lt;/span&gt;&amp;gt;provided&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;scope&lt;/span&gt;&amp;gt;
    &amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;dependency&lt;/span&gt;&amp;gt;
    &lt;span class=&quot;pl-c&quot;&gt;&amp;lt;!-- … --&amp;gt;&lt;/span&gt;

&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;dependencies&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;
&lt;a id=&quot;user-content-jboss-webxml&quot; class=&quot;anchor&quot; href=&quot;#jboss-webxml&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;jboss-web.xml&lt;/h2&gt;

&lt;p&gt;JBoss EAP 에서 필요하다. Tomcat 은 해당사항 없음. &lt;/p&gt;

&lt;div class=&quot;highlight highlight-text-xml&quot;&gt;&lt;pre&gt;&amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;jboss-web&lt;/span&gt;&amp;gt;
  &amp;lt;&lt;span class=&quot;pl-ent&quot;&gt;context-root&lt;/span&gt;&amp;gt;/api&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;context-root&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span class=&quot;pl-ent&quot;&gt;jboss-web&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>Spring/SpringBoot</category>
      <category>deploy</category>
      <category>jboss</category>
      <category>springboot</category>
      <category>SpringBootServletInitializer</category>
      <category>war</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/6</guid>
      <comments>https://hotte.tistory.com/6#entry6comment</comments>
      <pubDate>Thu, 17 Nov 2016 11:37:54 +0900</pubDate>
    </item>
    <item>
      <title>Sybase) Stored Procedure 결과를 Table 처럼 가져오기</title>
      <link>https://hotte.tistory.com/5</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h4&gt;
&lt;a id=&quot;user-content-sybase-stored-procedure-결과를-table-처럼-가져오기&quot; class=&quot;anchor&quot; href=&quot;#sybase-stored-procedure-%EA%B2%B0%EA%B3%BC%EB%A5%BC-table-%EC%B2%98%EB%9F%BC-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Sybase) Stored Procedure 결과를 Table 처럼 가져오기&lt;/h4&gt;

&lt;p&gt;Sybase 의 CIS (Component Integration Service) 기능을 활용하여&lt;br&gt;
Stored Procedure 결과를 Table 처럼 SELECT 하는 예제를 소개하겠습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;먼저, 'enable CIS' configuration 이 활성화 되어야 합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;sp_configure &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;enable CIS&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;pl-c1&quot;&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Remote Server 로 자기 자신을 지칭하는 &lt;strong&gt;loopback&lt;/strong&gt; 서버를 추가합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;sp_addserver ‘loopback’, ‘ASEnterprise’, &lt;span class=&quot;pl-k&quot;&gt;&amp;lt;&lt;/span&gt;SERVER NAME&lt;span class=&quot;pl-k&quot;&gt;&amp;gt;&lt;/span&gt;. &lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;테스트 프로시져를 생성합니다. DB 는 pubs2 를 활용했습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;create procedure sp_test
    @p_au_id &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;11&lt;/span&gt;)
&lt;span class=&quot;pl-k&quot;&gt;as&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;select&lt;/span&gt;
         au_id
        ,au_lname
        ,au_fname
        ,phone
    &lt;span class=&quot;pl-k&quot;&gt;from&lt;/span&gt; pubs2..authors
    &lt;span class=&quot;pl-k&quot;&gt;where&lt;/span&gt; au_id &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; @p_au_id

    return &lt;span class=&quot;pl-c1&quot;&gt;0&lt;/span&gt;
end
go&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;  CREATE EXISTING TABLE 구문을 사용하여 Proxy 테이블을 생성합니다.&lt;/li&gt;
&lt;li&gt;주의사항은, Stored Procedure의 파라미터가 Proxy 테이블에 컬럼으로 위치해야 한다는 점입니다.

&lt;ul&gt;
&lt;li&gt;파라미터명 앞에 _(UnderScore) 를 붙여야 합니다.

&lt;ul&gt;
&lt;li&gt;Ex) p_au_id  → _p_au_id &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; 파라미터 컬럼은 일반 데이터 컬럼의 뒤쪽에 위치 해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;create existing table authors_proxy
(
    au_id &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;11&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;not null&lt;/span&gt;,
    au_lname &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;40&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;not null&lt;/span&gt;,
    au_fname &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;20&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;not null&lt;/span&gt;,
    phone &lt;span class=&quot;pl-k&quot;&gt;char&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;12&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;not null&lt;/span&gt;,
    _p_au_id &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;11&lt;/span&gt;) &lt;span class=&quot;pl-k&quot;&gt;null&lt;/span&gt;
)
external procedure at &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;loopback.pubs2.dbo.sp_test&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
go&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;아래처럼 SELECT 가 가능합니다.&lt;/li&gt;
&lt;li&gt;WHERE 조건에 파라미터에 넣은 값이 Stored Procedure의 파라미터로 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;from&lt;/span&gt; authors_proxy
&lt;span class=&quot;pl-k&quot;&gt;where&lt;/span&gt; _p_au_id &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;238-95-7766&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>RDBMS/Sybase &amp;amp; SQLServer</category>
      <category>cis</category>
      <category>proxy</category>
      <category>proxytable</category>
      <category>storedprocedure</category>
      <category>sybase</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/5</guid>
      <comments>https://hotte.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 9 Aug 2016 16:36:35 +0900</pubDate>
    </item>
    <item>
      <title>SQLServer, Sybase) 컬럼에 Default 속성 추가하기</title>
      <link>https://hotte.tistory.com/4</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h4&gt;Sybase,&amp;nbsp;SQLServer 에서 컬럼에 Default 속성 추가하기&lt;/h4&gt;

&lt;p&gt;How to set a default value for an existing column in sybase, sqlserver    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLE&lt;/span&gt; Employee 
    ADD DEFAULT GETDATE() FOR upt_dtm&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Sybase&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLE&lt;/span&gt; Employee 
    REPLACE upt_dtm DEFAULT GETDATE()&lt;/pre&gt;&lt;/div&gt;
&lt;/article&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>RDBMS/Sybase &amp;amp; SQLServer</category>
      <category>alter table</category>
      <category>Default</category>
      <category>MSSQL</category>
      <category>sqlserver</category>
      <category>sybase</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/4</guid>
      <comments>https://hotte.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 3 Aug 2016 17:18:50 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL) Sequence 생성, 활용, 초기화</title>
      <link>https://hotte.tistory.com/2</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h1&gt;
&lt;a id=&quot;user-content-postgresql-sequence&quot; class=&quot;anchor&quot; href=&quot;#postgresql-sequence&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;PostgreSQL SEQUENCE&lt;/h1&gt;

&lt;p&gt;Incremental Unique Key Sequence 를 생성하기 위해&lt;/p&gt;

&lt;p&gt;PostgreSQL , ORACLE 은 &lt;strong&gt;SEQUENCE&lt;/strong&gt; 라고 불리는 독립 오브젝트를 제공하며,&lt;/p&gt;

&lt;p&gt;SQL-Server , Sybase 은 컬럼에 &lt;strong&gt;IDENTITY&lt;/strong&gt; 속성을,&lt;/p&gt;

&lt;p&gt;MySQL 은 컬럼에 &lt;strong&gt;AUTO_INCREMENT&lt;/strong&gt; 속성을 사용한다.&lt;/p&gt;

&lt;p&gt;이번 포스팅에서는 PostgreSQL 에서 SEQUENCE 오브젝트 관련 Function 을&lt;br&gt;
정리하고 활용 예제를 작성해 보도록 하겠다.&lt;/p&gt;

&lt;hr&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SEQUENCE 관련 주요 Function 정리&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nextval(seq_name)  - 시퀀스 값을 증가시키고 리턴한다. &lt;/li&gt;
&lt;li&gt;currval(seq_name)  - 가장 최근 nextval 함수를 호출하여 얻은 값을 리턴한다.
현재 세션에서 nextval 을 호출하지 않았을 경우 오류를 반환한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;select&lt;/span&gt; currval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;**********&lt;/span&gt; Error &lt;span class=&quot;pl-k&quot;&gt;**********&lt;/span&gt;
ERROR: currval of sequence &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; is not yet defined &lt;span class=&quot;pl-k&quot;&gt;in&lt;/span&gt; this session
SQL state: &lt;span class=&quot;pl-c1&quot;&gt;55000&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;setval(seq_name, value)  - 시퀀스의 현재값을 특정값(value)으로 초기화 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;시퀀스 생성&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;SEQUENCE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;seq_student&lt;/span&gt; START &lt;span class=&quot;pl-c1&quot;&gt;1&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;CASE 1. 테이블 생성시 ID 컬럼에 DEFAULT 속성 부여&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;-- 테이블 생성&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;student&lt;/span&gt;
(
  id &lt;span class=&quot;pl-k&quot;&gt;integer&lt;/span&gt; DEFAULT nextval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;),
  name &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;50&lt;/span&gt;),
  eml &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;100&lt;/span&gt;),
  birthday &lt;span class=&quot;pl-k&quot;&gt;char&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;8&lt;/span&gt;),
  gender &lt;span class=&quot;pl-k&quot;&gt;char&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;1&lt;/span&gt;),
  &lt;span class=&quot;pl-k&quot;&gt;constraint&lt;/span&gt; pk_student &lt;span class=&quot;pl-k&quot;&gt;primary key&lt;/span&gt; (id)
);

&lt;span class=&quot;pl-c&quot;&gt;-- 데이터 입력 (id 컬럼은 INSERT 컬럼에서 제외한다.)&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;홍길동&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;hgd@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;18830101&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;이순신&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;lss@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;16830201&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;F&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;유관순&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;ygs@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;19030301&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;임꺽정&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;lgj@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;15830401&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;F&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;CASE 2.  DEFAULT 속성을 쓰지 않고 INSERT 시점에 VALUE 로 입력&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;-- 테이블 생성&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;student&lt;/span&gt;
(
  id &lt;span class=&quot;pl-k&quot;&gt;integer&lt;/span&gt;,
  name &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;50&lt;/span&gt;),
  eml &lt;span class=&quot;pl-k&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;100&lt;/span&gt;),
  birthday &lt;span class=&quot;pl-k&quot;&gt;char&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;8&lt;/span&gt;),
  gender &lt;span class=&quot;pl-k&quot;&gt;char&lt;/span&gt;(&lt;span class=&quot;pl-c1&quot;&gt;1&lt;/span&gt;),
  &lt;span class=&quot;pl-k&quot;&gt;constraint&lt;/span&gt; pk_student &lt;span class=&quot;pl-k&quot;&gt;primary key&lt;/span&gt; (id)
);

&lt;span class=&quot;pl-c&quot;&gt;-- 데이터 입력&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (id,name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (nextval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;),&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;홍길동&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;hgd@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;18830101&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (id,name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (nextval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;),&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;이순신&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;lss@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;16830201&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;F&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (id,name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (nextval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;),&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;유관순&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;ygs@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;19030301&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);

&lt;span class=&quot;pl-k&quot;&gt;INSERT INTO&lt;/span&gt; student (id,name,eml,birthday,gender)
&lt;span class=&quot;pl-k&quot;&gt;VALUES&lt;/span&gt; (nextval(&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;seq_student&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;),&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;임꺽정&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;lgj@mail.com&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;15830401&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;F&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>RDBMS/PostgreSQL</category>
      <category>auto_increment</category>
      <category>currval</category>
      <category>identity</category>
      <category>nextval</category>
      <category>postgresql</category>
      <category>sequence</category>
      <category>setval</category>
      <category>시퀀스</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/2</guid>
      <comments>https://hotte.tistory.com/2#entry2comment</comments>
      <pubDate>Tue, 2 Aug 2016 18:04:13 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL) TABLESPACE, DATABASE 생성</title>
      <link>https://hotte.tistory.com/1</link>
      <description>&lt;article class=&quot;markdown-body&quot;&gt;&lt;h1&gt;
&lt;a id=&quot;user-content-postgresql-tablespace&quot; class=&quot;anchor&quot; href=&quot;#postgresql-tablespace&quot; aria-hidden=&quot;true&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;PostgreSQL TABLESPACE&lt;/h1&gt;

&lt;p&gt;TABLESPACE 는 데이터베이스 객체가 파일 시스템상에 저장되는 물리적인 공간을 의미한다.&lt;/p&gt;

&lt;p&gt;ORACLE 이나 PostgreSQL 에서만 사용되는 용어이다.&lt;br&gt;
※ SQL-Server, MySQL, Sybase 에서는 사용하지 않는 생소한(?) 용어다.&lt;/p&gt;

&lt;p&gt;테이블스페이스를 생성하면 데이터베이스 생성 시 별도의 LOCATION 을 지정할 수 있다.&lt;/p&gt;

&lt;p&gt;테이블스페이스를 이용하여 데이터베이스의 목적에 따라 저장소를 다르게 사용하는 운영이 가능해 지며,&lt;br&gt;
장애 대응 및 복구 등의 용도로도 활용이 가능하다.&lt;/p&gt;

&lt;p&gt;TABLESPACE 생성과 DATABASE 생성 관련 간단한 예제를 통해 확인해 보도록 하겠다.&lt;/p&gt;

&lt;hr&gt;

&lt;ul&gt;
&lt;li&gt;TABLESPACE 에서 사용할 LOCATION 에 해당하는 디렉토리가 존재해야 하며
디렉토리에 대한 ownership 이 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;-- 존재하지 않는 디렉토리일 경우 에러발생&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLESPACE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;tbs1&lt;/span&gt;
LOCATION &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;D:&lt;span class=&quot;pl-cce&quot;&gt;\t&lt;/span&gt;ablespace&lt;span class=&quot;pl-cce&quot;&gt;\t&lt;/span&gt;bs_what?&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;;

&lt;span class=&quot;pl-k&quot;&gt;**********&lt;/span&gt; Error &lt;span class=&quot;pl-k&quot;&gt;**********&lt;/span&gt;
ERROR: directory &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;D:/tablespace/tbs_what?&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; does not exist
SQL state: 58P01&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;TABLESPACE 를 생성&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLESPACE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;tbs1&lt;/span&gt;
LOCATION &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;D:&lt;span class=&quot;pl-cce&quot;&gt;\t&lt;/span&gt;ablespace&lt;span class=&quot;pl-cce&quot;&gt;\t&lt;/span&gt;bs1&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;;


Synopsis :
&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;TABLESPACE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;tablespace_name&lt;/span&gt;
    [ OWNER { new_owner | &lt;span class=&quot;pl-c1&quot;&gt;CURRENT_USER&lt;/span&gt; | &lt;span class=&quot;pl-c1&quot;&gt;SESSION_USER&lt;/span&gt; } ]
    LOCATION ’directory’
    [ WITH ( tablespace_option &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; value [, ... ] ) ]&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;DATABASE 생성&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;mydb&lt;/span&gt;
  WITH TABLESPACE &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; tbs1;

Synopsis :
&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;name&lt;/span&gt;
[ [ WITH ] [ OWNER [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] user_name ]
        [ TEMPLATE [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] template ]
        [ ENCODING [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] encoding ]
        [ LC_COLLATE [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] lc_collate ]
        [ LC_CTYPE [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] lc_ctype ]
        [ TABLESPACE [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] tablespace_name ]
        [ ALLOW_CONNECTIONS [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] allowconn ]
        [ CONNECTION &lt;span class=&quot;pl-k&quot;&gt;LIMIT&lt;/span&gt; [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] connlimit ] ]
        [ IS_TEMPLATE [&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;] istemplate ]&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Sybase 의 경우 DISK INIT 명령어로 Device 를 생성하고 CREATE DATABASE 를 실행한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;DISK INIT NAME&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;mydisk_dat&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
physname&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;/dev/mydisk_dat&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
size&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;300M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
go

DISK INIT NAME&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;mydisk_log&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
physname&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;/dev/mydisk_log&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
size&lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;30M&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
go

&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;pubs&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;ON&lt;/span&gt; mydisk_dat &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;300&lt;/span&gt;     
LOG &lt;span class=&quot;pl-k&quot;&gt;ON&lt;/span&gt; mydisk_log &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;30&lt;/span&gt;
GO&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;SQL-SERVER 는 CREATE DATABASE 구문에 ON / LOG ON 옵션에서 DISK 에 대한 정보를 기재한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight highlight-source-sql&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;Sales&lt;/span&gt;  
&lt;span class=&quot;pl-k&quot;&gt;ON&lt;/span&gt;   
( NAME &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; Sales_dat,  
    FILENAME &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;C:&lt;span class=&quot;pl-cce&quot;&gt;\P&lt;/span&gt;rogram Files&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;icrosoft SQL Server&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;SSQL12.MSSQLSERVER&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;SSQL&lt;span class=&quot;pl-cce&quot;&gt;\D&lt;/span&gt;ATA&lt;span class=&quot;pl-cce&quot;&gt;\s&lt;/span&gt;aledat.mdf&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,  
    SIZE &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;10&lt;/span&gt;,  
    MAXSIZE &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;50&lt;/span&gt;,  
    FILEGROWTH &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;5&lt;/span&gt; )  
LOG &lt;span class=&quot;pl-k&quot;&gt;ON&lt;/span&gt;  
( NAME &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; Sales_log,  
    FILENAME &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;C:&lt;span class=&quot;pl-cce&quot;&gt;\P&lt;/span&gt;rogram Files&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;icrosoft SQL Server&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;SSQL12.MSSQLSERVER&lt;span class=&quot;pl-cce&quot;&gt;\M&lt;/span&gt;SSQL&lt;span class=&quot;pl-cce&quot;&gt;\D&lt;/span&gt;ATA&lt;span class=&quot;pl-cce&quot;&gt;\s&lt;/span&gt;alelog.ldf&lt;span class=&quot;pl-pds&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,  
    SIZE &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; 5MB,  
    MAXSIZE &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; 25MB,  
    FILEGROWTH &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; 5MB ) ;

출처 : https:&lt;span class=&quot;pl-k&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;pl-c1&quot;&gt;msdn&lt;/span&gt;.&lt;span class=&quot;pl-c1&quot;&gt;microsoft&lt;/span&gt;.com&lt;span class=&quot;pl-k&quot;&gt;/&lt;/span&gt;ko&lt;span class=&quot;pl-k&quot;&gt;-&lt;/span&gt;kr&lt;span class=&quot;pl-k&quot;&gt;/&lt;/span&gt;library&lt;span class=&quot;pl-k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;pl-c1&quot;&gt;ms176061&lt;/span&gt;.&lt;span class=&quot;pl-c1&quot;&gt;aspx&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>RDBMS/PostgreSQL</category>
      <category>database</category>
      <category>postgresql</category>
      <category>sqlserver</category>
      <category>sybase</category>
      <category>tablespace</category>
      <category>데이터베이스</category>
      <category>테이블스페이스</category>
      <author>tyha</author>
      <guid isPermaLink="true">https://hotte.tistory.com/1</guid>
      <comments>https://hotte.tistory.com/1#entry1comment</comments>
      <pubDate>Tue, 2 Aug 2016 17:50:43 +0900</pubDate>
    </item>
  </channel>
</rss>