Jekyll2020-01-03T15:39:43+00:00http://caost.github.io/feed.xmlcaost.github.ioReady for takeoffCAOSTcreate swap2018-09-05T19:23:28+00:002018-09-05T19:23:28+00:00http://caost.github.io/create-swap<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># fallocate -l 2G swap.img</span>
<span class="c"># chmod 600 swap.img</span>
<span class="c"># swapon swap.img</span>
<span class="c"># swapon</span>
<span class="c"># swapoff swap.img</span>
<span class="c"># swapon</span>
<span class="c"># vi /etc/fstab</span>
</code></pre></div></div>CAOST# fallocate -l 2G swap.img # chmod 600 swap.img # swapon swap.img # swapon # swapoff swap.img # swapon # vi /etc/fstab프로젝트 시작 시 준비해야 할 것2018-08-28T07:41:28+00:002018-08-28T07:41:28+00:00http://caost.github.io/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%9C%EC%9E%91-%EC%8B%9C-%EC%A4%80%EB%B9%84%ED%95%B4%EC%95%BC-%ED%95%A0-%EA%B2%83<p>프로젝트 시작 시 AA가 준비해야할 것들을 정리해보았다.</p>
<h1 id="개발환경-구성">개발환경 구성</h1>
<ul>
<li>개발서버 도입
<ul>
<li>Real Server</li>
<li>Virtual Machine
<ul>
<li>Virtual Machine OS 설치
<ul>
<li>Citrix XenServer</li>
<li>VMWare</li>
</ul>
</li>
<li>VM 구성</li>
</ul>
</li>
</ul>
</li>
<li>개발 Application 설치
<ul>
<li>형상관리
<ul>
<li>SVN</li>
<li>GIT</li>
</ul>
</li>
<li>Repository
<ul>
<li>Nexus</li>
</ul>
</li>
<li>Continuous Integration
<ul>
<li>Jenkins</li>
</ul>
</li>
<li>이슈관리
<ul>
<li>Redmine</li>
</ul>
</li>
<li>Web Server
<ul>
<li>Apache
<ul>
<li>SSL</li>
<li>log</li>
<li>mod
<ul>
<li>mod_deflate</li>
<li>mod_cache</li>
</ul>
</li>
</ul>
</li>
<li>nginx</li>
</ul>
</li>
<li>Web Application Server
<ul>
<li>Tomcat</li>
<li>JBoss EAP</li>
</ul>
</li>
<li>DB Server
<ul>
<li>oracle</li>
<li>mysql</li>
<li>altibase</li>
</ul>
</li>
</ul>
</li>
<li>공통프레임워크 구성
<ul>
<li>Java version</li>
<li>Springframework 버전</li>
<li>ORM
<ul>
<li>Mybatis</li>
<li>JPA</li>
</ul>
</li>
<li>빌드 도구 선택
<ul>
<li>Maven</li>
<li>Gradle</li>
</ul>
</li>
<li>프로젝트 생성
<ul>
<li>프로젝트 설정
<ul>
<li>Datasource
<ul>
<li>DB Pool</li>
</ul>
</li>
<li>Transaction</li>
<li>ExceptionHandler</li>
<li>AOP</li>
<li>Spring security
<ul>
<li>로그인
<ul>
<li>UserDetailService</li>
<li>AuthenticationProvider</li>
</ul>
</li>
<li>권한</li>
<li>접근 제어</li>
</ul>
</li>
<li>Logging
<ul>
<li>logback</li>
<li>log4j</li>
</ul>
</li>
<li>Cache
<ul>
<li>ehcache</li>
</ul>
</li>
</ul>
</li>
<li>Sample CRUD</li>
</ul>
</li>
<li>형상관리 배포</li>
</ul>
</li>
<li>공통 교육
<ul>
<li>코드 컨벤션</li>
<li>코드 작성 표준</li>
<li>개발 환경 구성</li>
</ul>
</li>
<li>Repository 설정
<ul>
<li>third party library 저장</li>
</ul>
</li>
<li>DB
<ul>
<li>계정 생성</li>
<li>Database 생성</li>
<li>Tablespace 생성</li>
<li>Table 생성</li>
<li>Index 등 생성</li>
</ul>
</li>
<li>Web Application Server
<ul>
<li>DB 연동</li>
<li>메모리 크기 조정</li>
<li>로그 설정
<ul>
<li>Server log</li>
<li>Server log는 application log와 다름. ex. catalina.out</li>
</ul>
</li>
<li>war 배포</li>
</ul>
</li>
<li>Web Server 설정
<ul>
<li>Web Application Server와 연동</li>
<li>modjk</li>
<li>ajp</li>
<li>static 파일 배포</li>
<li>SSL 설정</li>
</ul>
</li>
<li>CI 구성
<ol>
<li>checkout</li>
<li>build</li>
<li>test</li>
<li>web server 배포</li>
<li>was 배포</li>
<li>was 재기동</li>
</ol>
</li>
</ul>CAOST프로젝트 시작 시 AA가 준비해야할 것들을 정리해보았다.예제로 보는 Lambda2018-08-27T07:41:28+00:002018-08-27T07:41:28+00:00http://caost.github.io/%EC%98%88%EC%A0%9C%EB%A1%9C-%EB%B3%B4%EB%8A%94-lambda<h1 id="lambda">lambda</h1>
<h2 id="foreach">foreach</h2>
<p>List에 담긴 <code class="language-plaintext highlighter-rouge">Transaction</code> 객체에 <code class="language-plaintext highlighter-rouge">confirmYn</code> 값을 <code class="language-plaintext highlighter-rouge">true</code>로 변경 후 repository에 저장한다.</p>
<h3 id="plain">plain</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span><span class="o">(</span><span class="nc">Transaction</span> <span class="nl">transaction:</span> <span class="n">transactions</span><span class="o">)</span> <span class="o">{</span>
<span class="n">transaction</span><span class="o">.</span><span class="na">setConfirmYn</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">transactionRepository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="n">transaction</span><span class="o">);</span>
<span class="o">}</span>
</code></pre></div></div>
<h3 id="lambda-1">lambda</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">transactions</span><span class="o">.</span><span class="na">forEach</span><span class="o">(</span><span class="n">o</span> <span class="o">-></span> <span class="o">{</span>
<span class="n">o</span><span class="o">.</span><span class="na">setConfirmYn</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">transactionRepository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="n">o</span><span class="o">);</span>
<span class="o">});</span>
</code></pre></div></div>
<hr />
<h2 id="map">map</h2>
<p>List <code class="language-plaintext highlighter-rouge">rigGroupUsers</code>에 담긴 <code class="language-plaintext highlighter-rouge">RigGroup</code> 객체의 <code class="language-plaintext highlighter-rouge">rigGroupUserId.rigGroupSn</code> 값을 List 형태로 변환한다.</p>
<h3 id="plain-1">plain</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">List</span><span class="o"><</span><span class="nc">Long</span><span class="o">></span> <span class="n">rigGroupSns</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o"><>();</span>
<span class="k">for</span><span class="o">(</span><span class="nc">RigGroupUser</span> <span class="nl">rigGroupUser:</span> <span class="n">rigGroupUsers</span><span class="o">)</span> <span class="o">{</span>
<span class="n">rigGroupSns</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">rigGroupUser</span><span class="o">.</span><span class="na">getRigGroupUserId</span><span class="o">().</span><span class="na">getRigGroupSn</span><span class="o">());</span>
<span class="o">}</span>
</code></pre></div></div>
<h3 id="lambda-2">lambda</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rigGroupUsers</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">map</span><span class="o">(</span><span class="n">o</span> <span class="o">-></span> <span class="n">o</span><span class="o">.</span><span class="na">getRigGroupUserId</span><span class="o">().</span><span class="na">getRigGroupSn</span><span class="o">()).</span><span class="na">collect</span><span class="o">(</span><span class="nc">Collectors</span><span class="o">.</span><span class="na">toList</span><span class="o">());</span>
</code></pre></div></div>
<hr />
<h2 id="maptolong">mapToLong</h2>
<p><code class="language-plaintext highlighter-rouge">rigGpus</code>에 담긴 <code class="language-plaintext highlighter-rouge">RigGpu</code> 객체의 <code class="language-plaintext highlighter-rouge">hashrate</code>의 총 합을 반환한다.</p>
<h3 id="plain-2">plain</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Long</span> <span class="n">sum</span> <span class="o">=</span> <span class="mi">0L</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nc">RigGpu</span> <span class="nl">rigGpu:</span> <span class="n">rigGpus</span><span class="o">)</span> <span class="o">{</span>
<span class="n">sum</span> <span class="o">=</span> <span class="n">sum</span> <span class="o">+</span> <span class="n">rigGpu</span><span class="o">.</span><span class="na">getHashrate</span><span class="o">();</span>
<span class="o">}</span>
</code></pre></div></div>
<h3 id="lambda-3">lambda</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rigGpus</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">mapToLong</span><span class="o">(</span><span class="nl">RigGpu:</span><span class="o">:</span><span class="n">getHashrate</span><span class="o">).</span><span class="na">sum</span><span class="o">();</span>
</code></pre></div></div>
<hr />
<h2 id="functional-interface">functional interface</h2>
<p><code class="language-plaintext highlighter-rouge">confirmYn</code>이 <code class="language-plaintext highlighter-rouge">null</code>이 아닌 경우 <code class="language-plaintext highlighter-rouge">Specification</code> Interface를 생성하여 반환한다.</p>
<h3 id="plain-3">plain</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Optional</span><span class="o"><</span><span class="nc">Boolean</span><span class="o">></span> <span class="n">confirmYnOptional</span> <span class="o">=</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">ofNullable</span><span class="o">(</span><span class="n">confirmYn</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">confirmYnOptional</span><span class="o">.</span><span class="na">isPresent</span><span class="o">())</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">new</span> <span class="nc">Specification</span><span class="o"><</span><span class="nc">RigEvent</span><span class="o">>()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="nc">Predicate</span> <span class="nf">toPredicate</span><span class="o">(</span><span class="nc">Root</span><span class="o"><</span><span class="nc">RigEvent</span><span class="o">></span> <span class="n">root</span><span class="o">,</span> <span class="nc">CriteriaQuery</span><span class="o"><?></span> <span class="n">query</span><span class="o">,</span> <span class="nc">CriteriaBuilder</span> <span class="n">criteriaBuilder</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="n">criteriaBuilder</span><span class="o">.</span><span class="na">equal</span><span class="o">(</span><span class="n">root</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">RigEvent_</span><span class="o">.</span><span class="na">confirmYn</span><span class="o">),</span> <span class="n">confirmYnOptional</span><span class="o">.</span><span class="na">get</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
</code></pre></div></div>
<h3 id="lambda-4">lambda</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Optional</span>
<span class="o">.</span><span class="na">ofNullable</span><span class="o">(</span><span class="n">confirmYn</span><span class="o">)</span>
<span class="o">.</span><span class="na">map</span><span class="o">(</span>
<span class="n">o</span> <span class="o">-></span> <span class="o">(</span><span class="nc">Specification</span><span class="o"><</span><span class="nc">RigEvent</span><span class="o">>)</span> <span class="o">(</span><span class="n">root</span><span class="o">,</span> <span class="n">query</span><span class="o">,</span> <span class="n">criteriaBuilder</span><span class="o">)</span> <span class="o">-></span> <span class="n">criteriaBuilder</span><span class="o">.</span><span class="na">equal</span><span class="o">(</span><span class="n">root</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">RigEvent_</span><span class="o">.</span><span class="na">confirmYn</span><span class="o">),</span> <span class="n">o</span><span class="o">)</span>
<span class="o">).</span><span class="na">orElse</span><span class="o">(</span><span class="kc">null</span><span class="o">);</span>
</code></pre></div></div>CAOSTlambda