<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Performance on</title><link>https://taetaetae.github.io/tags/performance/</link><description>Recent content in Performance on</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 12 May 2019 20:04:01 +0000</lastBuildDate><atom:link href="https://taetaetae.github.io/tags/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>자바, 성능, 모니터링 테크세미나 정리 및 후기 (by 우아한 형제들)</title><link>https://taetaetae.github.io/2019/05/12/got-of-java-seminar/</link><pubDate>Sun, 12 May 2019 20:04:01 +0000</pubDate><guid>https://taetaetae.github.io/2019/05/12/got-of-java-seminar/</guid><description>&lt;p>실무에서 자바 기반으로 개발을 하고 서비스를 운영을 하다보면 처음엔 아무런 문제가 없다가 사용자가 몰리는 등 이벤트성으로 트래픽이 많아질 경우 꼭 문제가 생기기 마련이다. 그럴때면 뒤늦게 부랴부랴 원인을 찾고 개선하기 바빠지게 된다. &lt;!-- more --> (아마 윗분들에게 혼나면서?ㅠㅠ)
평소에 이런 성능문제를 개선하고 미리 모니터링 할수있는 부분에 대해 관심을 갖고 있었던 찰나, 우아한 형제들에서 &lt;a href="https://www.facebook.com/woowahanTech/photos/a.1925530564354206/2280664485507477" target="_blank" rel="noopener noreffer ">5월 우아한 테크 세미나&lt;/a>를 한다기에 부랴부랴 장문의 글로 신청을 하였고 운이 좋아 당첨이 되었다.
한창 회사에서 새로운 서비스 출시, 그리고 잠을 줄여가며 별도로 진행하고 있던 토이프로젝트 등 여러가지로 바쁜 시기였지만 특히 예전부터 뵙고싶던 이상민님께서 직접 강의를 해주신다기에 피곤한 심신을 이끌고 세미나에 참석하였고 그 후기를 적어보고자 한다.&lt;/p>
&lt;blockquote>
&lt;p>두레이로 만드신 발표자료를 공유해 주셨지만 저작권 문제도 있고 해서 필자기준에서 이해한 부분에 대해서만 공유하고자 한다. 더불어 그냥 듣고 앵무새처럼 발표내용 그대로를 공유하는건 의미가 없다고 생각되어&amp;hellip;&lt;/p>&lt;/blockquote>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/got-of-java-seminar/1.jpg" title="/images/got-of-java-seminar/1.jpg" data-thumbnail="/images/got-of-java-seminar/1.jpg" data-sub-html="&lt;h2>포스터만 봐도 벌써부터 가슴이 뛴다(?).&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/got-of-java-seminar/1.jpg"
 data-srcset="https://taetaetae.github.io/images/got-of-java-seminar/1.jpg, https://taetaetae.github.io/images/got-of-java-seminar/1.jpg 1.5x, https://taetaetae.github.io/images/got-of-java-seminar/1.jpg 2x"
 data-sizes="auto"
 alt="/images/got-of-java-seminar/1.jpg" width="80%" />
 &lt;/a>&lt;figcaption class="image-caption">포스터만 봐도 벌써부터 가슴이 뛴다(?).&lt;/figcaption>
 &lt;/figure>
&lt;h2 id="성능">성능&lt;/h2>
&lt;p>구글에서 작성한 &lt;a href="https://developers.google.com/web/fundamentals/performance/why-performance-matters/" target="_blank" rel="noopener noreffer ">성능이 중요한 이유&lt;/a> 라는 아티클을 공유해 주셨다. (시간이 된다면 한번 읽어보길 강추, 무려 한글!) 어플리케이션에서 성능은 사용자의 증가, 이탈율, 응답속도에 영향이 있고 이는 결국 추구하는 가치(이를 테면 수익)에 직면한다고 한다.
사용자는 어느 관점에서 바라보는가에 따라 달라지고 각 관점에 따라 성능을 챙겨야 하는 부분이 달라진다. 수강신청을 하는 시점에서의 사용자와 뉴스 페이지를 읽는 시점에서의 사용자는 각 성격이 엄연히 다른것처럼.&lt;/p>
&lt;ul>
&lt;li>시스템 관리자
&lt;ul>
&lt;li>등록된 / 등록되지 않은 사용자&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>서버 관점
&lt;ul>
&lt;li>로그인된 / 로그인 하지 않은 사용자&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>성능 테스터 관점
&lt;ul>
&lt;li>Active User
&lt;ul>
&lt;li>서버에 부하를 주는 사용자&lt;/li>
&lt;li>메뉴나 링크를 누르고 결과가 나오기를 기다리는 사용자&lt;/li>
&lt;li>성능테스트시 Vuser와 거의 동일 ( Vuser : 가상사용자(virtual user) )&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Concurrent user
&lt;ul>
&lt;li>서버에 부하를 주고 있거나, 줄 가능성이 매우높은 서비스에 접속중인 사용자&lt;/li>
&lt;li>웹 페이지를 띄워놓은 사용자&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>TPS(Transaction Per Seconds)는 초당 얼마나 많은 요청을 처리할수 있는지에 대한 시스템의 절대적인 수치로 볼수있다. (개발자는 어느상황에서든지 대충 감으로 이야기 하지말고 정확한 수치로 이야기 해야한다는 뼈를 때리는 조언과 함께&amp;hellip;) TPS는 Scale out/up을 통해 증가시킬수 있지만 Response Time 은 불가능하다. 물론 어플리케이션을 튜닝하면 두 수치 모두 개선이 가능하다. 이러한 TPS와 Response Time의 최대치는 출시전에 반드시 테스트를 통해 알고 있어야 이슈발생시 대응하는데 유용하다.
Bottleneck 즉 병목은 장비, 어플리케이션, 저장소, 설정 등 다양한 상황에서 발생할수 있다. 그중에 &amp;ldquo;아주 일반적&amp;quot;으로 가장 병목이 많이 발생하는 구간은 DB이고 그 다음으로 클라이언트(Web page, App), Network이 있을 수 있다.
결론은 &lt;strong>Performance engineering is &amp;ldquo;Composite Art&amp;rdquo; of IT&lt;/strong> 라는 하나의 문장으로 정리를 해주셨다. 아무리 이쁜 디자인과 어렵고 복잡한 기능이 있을지라도 성능이 뒷받침 안된다면 대용량 트래픽 상황에서는 무의미해지기 때문이라고 생각한다.&lt;/p>
&lt;h2 id="자바">자바&lt;/h2>
&lt;p>자바의 역사에 대해 설명해 주셨다. ( 역사에 대한 보다 자세한 설명은 &lt;a href="https://www.whatap.io/blog/12/" target="_blank" rel="noopener noreffer ">https://www.whatap.io/blog/12/&lt;/a> 참고 ) 언제부터인가 JDK 라이센스 이슈가 많았었는데 실무에서 개발하는 입장에서는 java 8 에서는 문제가 안되고 java 11부터 라이센스 문제가 복잡하게 생길수 있다고 한다. 이부분은 공식문서(?)를 찾아보는게 좋을듯 하다. (개인 또는 회사에서 사용할 경우 상황에 따라 법적 이슈가 생길수도, 안생길수도 있는 복잡한 문제가 있어보여서&amp;hellip; 필자도 제대로 이해하지는 못했다ㅠ)&lt;/p>
&lt;p>그리고 각 자바 버전에서 발표한 새로운 기능에 대해 설명해주셨다.&lt;/p>
&lt;ul>
&lt;li>Java 8
&lt;ul>
&lt;li>lambda, stream, default method, LocalDate / LocalTime 추가&lt;/li>
&lt;li>stream 과 foreach 의 성능은 거의 차이 없음 (오히려 가독성이 나빠질수도 있다.)&lt;/li>
&lt;li>ParallelStream 은 해당 장비의 cpu 개수만큼 스레드 풀을 만들어 사용 (오히려 독이 될수 있으니 잘 알아보고 사용할것)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Java 9
&lt;ul>
&lt;li>Compact Strings : char[] &amp;gt; byte[]&lt;/li>
&lt;li>G1 default GC : &lt;a href="https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html" target="_blank" rel="noopener noreffer ">https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html&lt;/a>&lt;/li>
&lt;li>Collections of (불변) : List.of, Set.of, Map.of&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Java 10
&lt;ul>
&lt;li>var 의 등장&lt;/li>
&lt;li>Application Class-Data Sharing(AppCDS)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Java 11
&lt;ul>
&lt;li>Oracle JDK의 유료화&lt;/li>
&lt;li>Http Client. 기본 설정값들을 제대로 알고 써야한다. ( &lt;a href="https://golb.hplar.ch/2019/01/java-11-http-client.html" target="_blank" rel="noopener noreffer ">https://golb.hplar.ch/2019/01/java-11-http-client.html&lt;/a> )&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Java 12
&lt;ul>
&lt;li>Switch expressions&lt;/li>
&lt;li>Shenandoah : &lt;a href="https://www.youtube.com/watch?v=E1M3hNlhQCg" target="_blank" rel="noopener noreffer ">https://www.youtube.com/watch?v=E1M3hNlhQCg&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="모니터링">모니터링&lt;/h2>
&lt;p>유명한 상용 APM들을 설명해 주셨다. 각각의 장점에 대해 설명해 주셨는데 정말 회사에 요청해 구매할수만 있다면 사서 해보고 싶을정도로 신기한 기능이 많았다. 그중 dynatrace 는 에이전트만 설치해두면 별도의 설정 필요없이 알아서 해준다고&amp;hellip;&lt;/p></description></item></channel></rss>