<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>남잭슨의 개발 블로그</title>
    <link>https://namjackson.tistory.com/</link>
    <description>남잭슨의 개발 블로그</description>
    <language>ko</language>
    <pubDate>Fri, 14 Aug 2026 13:07:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>남잭슨</managingEditor>
    <image>
      <title>남잭슨의 개발 블로그</title>
      <url>https://t1.daumcdn.net/cfile/tistory/267F553958B1274C38</url>
      <link>https://namjackson.tistory.com</link>
    </image>
    <item>
      <title>[Android Jetpack] AAC Navigation Component -4. Navigation Upgrade (ViewModel with NavGraph Scope &amp;amp; Modularizing(Nested Navgraph) &amp;amp;  Multiple-Start-Destination) &amp;amp; 후기,장단점</title>
      <link>https://namjackson.tistory.com/34</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/03/31 - [Android] - [Android Jetpack] AAC Navigation Component - 1. Navigation 소개,구성 및 개요 , BackStack관리&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/08/14 - [Android] - [Android Jetpack] AAC Navigation Component -2. SafeArgs &amp;amp; Deeplink &amp;amp; Action&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/08/18 - [Android] - [Android Jetpack] AAC Navigation Component -3. NavigationUI &amp;amp; Animation/Transition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;먼저 위에 글들을 먼저 참고해주세요!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번글에는 2.1.0에 추가된 내용들인 ViewModel NavGraph Scope, Modularizing(Nested NavGraph), Back-Button 등&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 개인적으로 사용해본 경험, 장단 점에 대해 간략하게 소개할예정이다.&lt;/p&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4&gt;&lt;b&gt;Navigation Modularizing&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Navigation을 사용하여 간단하게&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Modularizing을 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;먼저 모듈화를 위해 Navigation에서 제공하는 Nested Navigation Graphs 에 대해 알아보자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;- Nested Navigation Graphs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Navigation은&amp;nbsp;&lt;/span&gt;Nested Navigation Graphs를 지원한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여러화면이 개발되다 보면, 전체 NavGraph의 복잡성이 증가되면, 관리하기가 힘들어진다.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그렇기때문에, 아래처럼 여러개의 NavGraph로 나눠서 관리가 가능하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K6UOj/btqxyhI2tf5/WZS61edaq9erA9ZE9VOtNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K6UOj/btqxyhI2tf5/WZS61edaq9erA9ZE9VOtNK/img.png&quot; width=&quot;466&quot; height=&quot;477&quot; style=&quot;width: 45.9678%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6UOj/btqxyhI2tf5/WZS61edaq9erA9ZE9VOtNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6UOj%2FbtqxyhI2tf5%2FWZS61edaq9erA9ZE9VOtNK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;&quot; height=&quot;&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bclUlz/btqxwErEwBb/I0V99M4bAYwG9rBu4K6HL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bclUlz/btqxwErEwBb/I0V99M4bAYwG9rBu4K6HL1/img.png&quot; width=&quot;531&quot; height=&quot;468&quot; data-filename=&quot;blob&quot; style=&quot;width: 51.7066%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bclUlz/btqxwErEwBb/I0V99M4bAYwG9rBu4K6HL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbclUlz%2FbtqxwErEwBb%2FI0V99M4bAYwG9rBu4K6HL1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;&quot; height=&quot;&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Nested NavigationGraph 를 사용하는 방법은 간단하다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;Navigation&amp;gt;태그안에 &amp;lt;Navigation&amp;gt;태그를 중첩해서 사용해도 되고.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따로 정의한후, Root NavGraph에서 아래처럼 &amp;lt;include&amp;gt;로 정의해줘도 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565959653386&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;include app:graph=&quot;@navigation/included_graph&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이를 이용하여 , 모듈화가 가능해진다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 모듈화를 하고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;root NavGraph에서 아래처럼 &amp;lt;include&amp;gt;를 하면된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565959780320&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;navigation 
    app:startDestination=&quot;@id/nav_feature_one&quot;&amp;gt;

    &amp;lt;include app:graph=&quot;@navigation/nav_feature_one&quot;/&amp;gt;
    &amp;lt;include app:graph=&quot;@navigation/nav_feature_two&quot;/&amp;gt;
    &amp;lt;include app:graph=&quot;@navigation/nav_feature_three&quot;/&amp;gt;

&amp;lt;/navigation&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;또, 각 모듈내의 Destination끼리의 이동의 경우에는&amp;nbsp;&lt;b&gt;Deeplink&lt;/b&gt;를 사용하여 구현하면된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;4b8c&quot; style=&quot;font-size: 1.12em;&quot;&gt;&lt;b&gt;Dynamic Feature Module&lt;/b&gt;에 대해서는 아직은 제공하지 않지만,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.12em;&quot;&gt;올해 안에 지원할 예정이라고 한다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.12em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;ViewModel with NavGraph&amp;nbsp;Scope&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;NavGraph의 Destination(Fragment)끼리&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;ViewModel&lt;/span&gt; 공유하는 범위를 지정할수 있다.&lt;/p&gt;
&lt;p&gt;아래의 그림처럼 &lt;b&gt;같은 ViewModel을 사용하는 로직&lt;/b&gt;을 묶어 ViewModel을 공유하는 기능을 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;743&quot; height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3oIrM/btqxxa4YQiA/ujivSFBiFbtkc4d7J1Q3H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3oIrM/btqxxa4YQiA/ujivSFBiFbtkc4d7J1Q3H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3oIrM/btqxxa4YQiA/ujivSFBiFbtkc4d7J1Q3H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3oIrM%2Fbtqxxa4YQiA%2FujivSFBiFbtkc4d7J1Q3H1%2Fimg.png&quot; width=&quot;743&quot; height=&quot;362&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사용방법은 간단하다. 해당 Scope를 Nested Navigation Graph로 정의하고,&amp;nbsp; 아래처럼 선언하여 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565960484732&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val factory: ViewModelProviderFactory = ...
val viewModel: MyViewModel
    by navGraphViewModels(R.id.my_graph) { factory }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Multiple-Start-Destination ( Multiple-BackStack Navigation )&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;많은 앱이 BottomNavigation, Tab으로 구현된 앱이라면,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NavigationUI (이전글 참고)을 사용하여 Top-Level-Destination을 정의하여 사용할수 있지만,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 탭마다, 각자의 독립적인 백스택을 가지고 있어야하는 경우가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아직까진 공식적으로 지원하진 않지만 googlesample/NavigationAdvanedSampleApp에서 개발을 참조하면된다 .&lt;/p&gt;
&lt;pre id=&quot;code_1565977363190&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        fun BottomNavigationView.setupWithNavController(
            navGraphIds: List&amp;lt;Int&amp;gt;,
            fragmentManager: FragmentManager,
            containerId: Int,
            intent: Intent
        ): LiveData&amp;lt;NavController&amp;gt; { 
        	.....
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래처럼 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565977446545&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        val navGraphIds = listOf(R.navigation.home, R.navigation.list, R.navigation.form)

        // Setup the bottom navigation view with a list of navigation graphs
        val controller = bottomNavigationView.setupWithNavController(
            navGraphIds = navGraphIds,
            fragmentManager = supportFragmentManager,
            containerId = R.id.nav_host_container,
            intent = intent
        )
       &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위처럼 탭마다의 NavGraph를 정의하고, BottomNavigationView에 setupWithNavController를 해주면 탭마다 서로다른 독립적인 백스택을 지원하는 화면을 만들 수 있다.&lt;/p&gt;
&lt;p&gt;상세한 내용은&amp;nbsp;&lt;a href=&quot;https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;깃허브 소스를 참조하자!&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;나의 후기 장/단점&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Navigation의 모든 부분을 사용하진 않았지만, 많은 장점을 가지고 있는 것 같다.&lt;/p&gt;
&lt;p&gt;아직까진 약간의 부족함?을 느끼지만, 그런 부분을 커버할만큼의 많은 장점을 가지고 있다고 생각이 든다.&lt;/p&gt;
&lt;p&gt;개인적으로는 쓰지 않아야할 이유를 찾는게 더 어려운 것 같다&lt;/p&gt;
&lt;p&gt;아직은 프로젝트에 도입단계이기 때문에, 큰 단점을 느끼진 못했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;장점&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;앞선 글들에 제공하는 많은 기능과 여러 장점을 써놧지만, 다시한번 장점에 대해 생각해보면&lt;/p&gt;
&lt;p&gt;시각적으로 화면 흐름을 볼수있을뿐 아니라, &lt;span style=&quot;color: #333333;&quot;&gt;Editor&lt;/span&gt;를 사용하여, 화면 흐름을 쉽게 추가/수정이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;FragmentTransactions없이&amp;nbsp;&lt;/span&gt;Fragment의 트랜잭션, Back스택 등이 쉽게 관리가 가능하고, 딥링크 처리 및 구현이 간단해졌다,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;화면전환 애니메이션 처리 또한 간단하게 구현이 가능하고, Up,Back버튼 처리가 매우 쉬워졌다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 SafeArgs, NavGraph 등등 많은 기능을 제공해주어, 쉽게 사용이 가능해진것 같다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;단점이라고 한다면,&lt;/p&gt;
&lt;p&gt;일단 Navigation에서의 Acitvity의 역할이 조금 다르다는 점이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;i&gt;&lt;u&gt;&quot;네비게이션 컴포넌트는 Activity의 역할을 기존과 다르게 바라볼 것을 요구합니다. &lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;i&gt;&lt;u&gt;원래 Activity는 화면의 Entry Point 이면서도 Content와 Navigation Method를 들고있는 Owner 였습니다. &lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;i&gt;&lt;u&gt;하지만 네비게이션 컴포넌트를 활용하기 위해서는 Entry Point로서의 역할만 보아야 합니다. &lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;i&gt;&lt;u&gt;Content와 Navigation Method는 모두 NavHost 라는 Fragment에게 위임합니다. &lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;i&gt;&lt;u&gt;그리고 이는 대부분의 화면을&amp;nbsp;Single Activity로 설계해야 함을 의미합니다.&quot;&lt;br /&gt;&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇기 때문에 기존과는 다르게&lt;b&gt; Single Activity&lt;/b&gt; 기반의 설계를 해야하기 때문에,&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기존의 프로젝트에서 활용하기에는&amp;nbsp;마이그레이션 작업이 필요하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(물론 Destination에는 Fragment가 기본이지만, Activity,Dialog를 지원하긴 한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 사실상 AndroidX로의 마이그레이션 작업이 필요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;샘플 코드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;해당 예제 코드는 아래 깃허브에 구현하였습니다.&lt;/p&gt;
&lt;p&gt;(네비게이션 외에도 클린아키텍쳐 스터디를 위해 오픈소스를 진행하고 있습니다. 많은 Star 와 많은 PR,Issue 참여해주세요! )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot;&gt;https://github.com/namjackson/Clean-Architecture-App&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1565861685032&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CpAPb/hyCpM5j3cX/aHUzrCunJF2vveaK0ABqT0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot; style=&quot;position: relative; flex-grow: 1; height: 130px; padding-left: 40px;&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;line-height: 1.6; color: #000000; font-size: 22px; padding-bottom: 10px; max-width: 467px; text-overflow: ellipsis; white-space: nowrap; margin: 0px; overflow: hidden; font-family: 'Noto Sans', 'Noto Sans KR';&quot;&gt;namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;line-height: normal; margin: 0px; max-width: 467px; text-overflow: ellipsis; overflow: hidden; font-family: 'Noto Sans DemiLight', sans-serif; font-size: 14px; font-weight: 300; font-style: normal; font-stretch: normal; letter-spacing: normal; color: #909090; max-height: 42px; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: -webkit-box;&quot;&gt;Sample app for studying the Android clean architecture. - namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;line-height: 1.6; margin: 1px auto 0px; position: absolute; bottom: -8px; font-family: AvenirNext; font-size: 14px; color: #909090;&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;다음글&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-1. Navigation 소개, 구성 및 개여, BackStack 관리 ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/32&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-2. SafeArgs &amp;amp; Deeplink &amp;amp; Action ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-3. NavigationUI &amp;amp; Animation/Transition ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-4.&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Navigation Upgrade (ViewModel with NavGraph Scope, Modularizing(Nested NavGraph) &amp;amp; Multiple-Start-Destination) &amp;amp; 나의 후기, 장단점&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;( 현재 글 )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@fornewid/io19-jetpack-navigation-33da8811c9de&quot;&gt;https://medium.com/@fornewid/io19-jetpack-navigation-33da8811c9de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/swlh/using-the-navigation-component-in-a-modular-world-e7578825962&quot;&gt;https://medium.com/swlh/using-the-navigation-component-in-a-modular-world-e7578825962&lt;/a&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <category>AAC Navigation</category>
      <category>android</category>
      <category>android navigation</category>
      <category>Jetpack</category>
      <category>Jetpack Navigation</category>
      <category>modularizing</category>
      <category>multiple backstack</category>
      <category>navgraph scope</category>
      <category>Navigation</category>
      <category>nested navgraph</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/34</guid>
      <comments>https://namjackson.tistory.com/34#entry34comment</comments>
      <pubDate>Mon, 26 Aug 2019 22:43:41 +0900</pubDate>
    </item>
    <item>
      <title>[Android Jetpack] AAC Navigation Component -3. NavigationUI &amp;amp; Animation/Transition</title>
      <link>https://namjackson.tistory.com/33</link>
      <description>&lt;p&gt;아래의 AAC Navigation에 대한글을 먼저 보고 오세요!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/03/31 - [Android] - [Android Jetpack] AAC Navigation Component - 1. Navigation 소개,구성 및 개요 , BackStack관리&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/08/14 - [Android] - [Android Jetpack] AAC Navigation Component - 2. SafeArgs &amp;amp; Deeplink &amp;amp; Action&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 글에는 AAC Navigation에서 지원하는&amp;nbsp;&lt;b&gt;NavigationUI&lt;/b&gt; 와 &lt;b&gt;Animiation&lt;/b&gt; ,&lt;b&gt;Transition&lt;/b&gt;에 대해 소개할 예정이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;c9c7&quot;&gt;&lt;b&gt;Navigation libraries Structure&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b41GjX/btqxvLXmGrb/gy7aP8b7izSMaFGZ74T5c0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b41GjX/btqxvLXmGrb/gy7aP8b7izSMaFGZ74T5c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b41GjX/btqxvLXmGrb/gy7aP8b7izSMaFGZ74T5c0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb41GjX%2FbtqxvLXmGrb%2Fgy7aP8b7izSMaFGZ74T5c0%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Navigation은 4개의 모듈로 나눠진다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;navigation-common&lt;/b&gt;은 내부적으로 동작하는 부분이고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;navigation-runtime&lt;/b&gt;은 NavController에 해당한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;navigation-fragment&lt;/b&gt;는 NavHostFragment, Destinations(Fragments)에 해당하고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;navigation-UI&lt;/b&gt;는 bottom-navigation, appbar 등의 UI 동작을 지원해주는 부분이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;NavigationUI&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;NavigationUI에 대해 간단하게 알아보자&lt;/p&gt;
&lt;p&gt;NavigationUI를 사용하여&amp;nbsp; 아래의 Menu, Drawers, toolbar등의 UI들의 Action을 직접 구현하지 않고,&lt;/p&gt;
&lt;p&gt;간단하게 연결하여 사용이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Toolbar&lt;/li&gt;
&lt;li&gt;CollapsingToolbarLayout&lt;/li&gt;
&lt;li&gt;ActionBar&lt;/li&gt;
&lt;li&gt;DrawerLayout&lt;/li&gt;
&lt;li&gt;BottomNavigationView&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;먼저 xml에 navigation의 컴포넌트를 사용하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 컴포넌트의 NavController와 Menu를 연결해주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;주의해야할점은 &lt;b&gt;Menu&lt;/b&gt;의 &amp;lt;Item&amp;gt;의 id와 &lt;b&gt;NavGraph&lt;/b&gt;의 Destination(&amp;lt;fragment&amp;gt;)의 id가 같아야된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음은 bottomNavigation을 구현해보는 예제이다.&lt;/p&gt;
&lt;pre id=&quot;code_1565783262511&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        &amp;lt;com.google.android.material.bottomnavigation.BottomNavigationView
                android:id=&quot;@+id/nav_view&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;
                app:menu=&quot;@menu/bottom_nav_menu&quot;/&amp;gt;
                &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;먼저 xml에 BottomNavigation 컴포넌트를 추가한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565783463925&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;
    &amp;lt;item
            android:id=&quot;@+id/dashboard&quot;
            android:title=&quot;@string/fragment_dashboard&quot;/&amp;gt;
    &amp;lt;item
            android:id=&quot;@+id/home_list&quot;
            android:title=&quot;@string/fragment_home_list&quot;/&amp;gt;
    &amp;lt;item
            android:id=&quot;@+id/mypageFragment&quot;
            android:title=&quot;@string/fragment_mypage&quot;/&amp;gt;
&amp;lt;/menu&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;menu 리소스를 추가한다.&lt;/p&gt;
&lt;p&gt;( 이때 NavGraph(xml)의 Destination Fragment 의 Id들과 매핑되기때문에&amp;nbsp;일치시켜주어야한다.)&lt;/p&gt;
&lt;pre id=&quot;code_1565783631152&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;binding.navView.setupWithNavController(navController)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 Activity내에서 위의 navController을 setUp해주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구현은 간단하지만, 빌드해보면 첫번째 탭외에 다른 탭으로 이동시마다&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;backstack이 쌓이는 현상을 볼수있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;BackButton이나 , appbar사용을 위한&amp;nbsp;&lt;/span&gt;backstack사용에 대한 추가적인 작업이 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AppBarConfiguration&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;이러한 작업을 위해&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;AppBarConfiguration를 지원해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Tab의 경우나, BottomNavigation등의 경우는 각 탭들 모두&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;최상단의&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination이기 때문에,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이를 지원하기 위해 Top-Level-Destination을 정의할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;AppBarConfiguration 에서 Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination을 지정해주어야한다.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565786240570&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var appBarConfiguration: AppBarConfiguration

appBarConfiguration = AppBarConfiguration(
  setOf(R.id.home_list, R.id.dashboard, R.id.mypageFragment)
)
        &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;HomeList,Dashboard, MyPage가 Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination임을 선언 후,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;아래 코드처럼 ActionBar에도 Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination 설정 하면,&lt;/p&gt;
&lt;p&gt;Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destincation이 아니라면 Actionbar에 뒤로 가기&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[&amp;lt;-] &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가 표현된다 ( Up Button)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565806210546&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setupActionBarWithNavController(host.navController, appBarConfiguration)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;onSupportNavigateUp에 appBarConfiguration &lt;span style=&quot;color: #333333;&quot;&gt;Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination설정이 포함한 정보를&lt;/span&gt;&amp;nbsp;추가해주면,&lt;/p&gt;
&lt;p&gt;Up-Button 의 이벤트에도 T&lt;span style=&quot;color: #333333;&quot;&gt;op&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination설정이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565786340108&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;override fun onSupportNavigateUp(): Boolean {
	return findNavController(R.id.nav_container).navigateUp(appBarConfiguration)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;※&amp;nbsp;&lt;/b&gt;Navigation 에서 Up-Button 과 Back Button은 동일한 작업이 되어야하지만,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( BottomNavigation 탭에서는 Multi - Start Point -&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination을 따로 지원하지 않기 때문에&lt;/span&gt;&amp;nbsp;,,,)&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination에서도, Back Button 이벤트 발생시,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt; StartPoint&lt;b&gt; 외&lt;/b&gt;의&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination(Fragment)에서&lt;/span&gt;&amp;nbsp;BackStack처리가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;기본적으로 Navigation 기본원칙(Fixed Start Destination)으로 구현되어 있어,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;appBar나 Up-Button의 경우는 Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination은 지원하지만 Back-Button의경우는&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아직까진 Navigation에서&amp;nbsp;&lt;/span&gt;&lt;b&gt;multiple&amp;nbsp;start&amp;nbsp;destinations&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 지원하지 않는 것 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래는 조금이 편법을 사용하여, TopLevel 체크를 하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565807753188&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;override fun onBackPressed() {

  if(appBarConfiguration.topLevelDestinations.contains( host.navController.currentDestination?.id)){
    if (System.currentTimeMillis() - Back_Key_Before_Time &amp;lt; 2000) {
    	finish()
    } else {
    	Toast.makeText(applicationContext, &quot;한번더 누르면 꺼집니다.&quot;, Toast.LENGTH_SHORT).show()
    	Back_Key_Before_Time = System.currentTimeMillis()
    }
    return;
  }

  super.onBackPressed()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 추 후엔 back 버튼에도 Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-Destination을 기준으로&amp;nbsp;&lt;b&gt;multiple&amp;nbsp;start&amp;nbsp;destinations&lt;/b&gt;을 지원해 주지 않을까 싶다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;b&gt;추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;또, Single Activity 기반이기 때문에 &lt;b&gt;navHostFragment&lt;/b&gt;가 아닌 범위 ( Appbar, BottomNavigation) 등의 영역은&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Navigation에서 따로 지원해주지 않기 때문에, 수동으로 처리해주어야한다.&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;&lt;i&gt;( 사실&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Appbar의 경우는 Up-Button[&amp;lt;-]을 지원해주긴한다.)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(예를 들어 BottomNavigation은 각 Tab 화면 들의 Detail화면에서는 보여지지 않아야할때,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Top&lt;span style=&quot;color: #333333;&quot;&gt;-Level&lt;/span&gt;-level의 Fragment 에서만 &lt;b&gt;하단&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;BottomNavigation 탭&lt;/b&gt;이 보여야할때 수동으로 처리해주어야한다 .&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래코드는 해당 작업의 예시이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565810624288&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;host.navController.addOnDestinationChangedListener { _, destination, _ -&amp;gt;
    when (destination.id) {
      R.id.dashboard, R.id.home_list, R.id.mypageFragment -&amp;gt; showBotNav()
      else -&amp;gt; hideBotNav()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;navController에 ChangedListener을 달아서, Bottom Navigation이 보여야할지, 말아야할지 처리해주어야한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Animation&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Navigation에서는 Action에 Animation기능을 제공한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enterAnim : action 실행시, 이동할 Destination에 대한 애니메이션&lt;/li&gt;
&lt;li&gt;exitAnim : action을 실행할 때 현재 Destination에 대한 애니메이션&lt;/li&gt;
&lt;li&gt;popExitAnim : 이전 화면으로 돌아갈 때(Pop or Back) 종료되는 현재 Destincation 에 대한 애니메이션&lt;/li&gt;
&lt;li&gt;popEnterAnim : 이전 화면으로 돌아갈 때(Pop or Back) 이동할 BackStack의 Destination에 대한 애니메이션&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Animation추가는 두가지 방법이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. navigate 실행시, NavOptions 을 정의해서 사용하는방법&lt;/p&gt;
&lt;pre id=&quot;code_1565809066824&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val options = navOptions {
  anim {
    enter = R.anim.slide_in_right
    exit = R.anim.slide_out_left
    popEnter = R.anim.slide_in_left
    popExit = R.anim.slide_out_right
  }
}

&amp;lt;!-- 사용 --&amp;gt;
navController.navigate(R.id.flow_step_one_dest, null, options)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. NavGraph에 명시하여 사용하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565809841058&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;action
      android:id=&quot;@+id/action_to_add&quot;
      app:destination=&quot;@id/addFragment&quot;
      app:enterAnim=&quot;@anim/slide_in_up&quot;
      app:exitAnim=&quot;@anim/fade_out&quot;
      app:popEnterAnim=&quot;@anim/fade_in&quot;
      app:popExitAnim=&quot;@anim/slide_out_down&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;마찬가지로 navigate를 사용하여 Action 실행시, Animation이 실행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Transition&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Navigation 에서도 간단하게 Transition 구현이 가능하다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일단, 각 Component View( XML )에 같은 TransitionName을 정의해준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565809950215&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ImageView
        android:transitionName=&quot;test&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:src=&quot;@drawable/test&quot;
        android:layout_gravity=&quot;top&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;어떤&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;TransitionName이&amp;nbsp;&lt;/span&gt; naming이든&amp;nbsp; 상관은 없지만, 전,후 화면의 name은 같아야 실행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565810044453&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val extras = FragmentNavigatorExtras(
	binding.imgview to &quot;test&quot;
)
findNavController().navigate( HomeListFragmentDirections.actionToDetail(itemId), extras)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 action을 실행시키는 화면에서 &lt;b&gt;FragmentNavigationExtras&lt;/b&gt;에 Transition에 대한 정보를 담아서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;navigate에 파라미터로 추가하여 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1565810196446&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sharedElementEnterTransition = 
	TransitionInflater.from(context).inflateTransition(android.R.transition.move)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;받는 화면에서 위의 코드만 작성하면 &lt;b&gt;Transition&lt;/b&gt;이 실행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;샘플 코드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;해당 예제 코드는 아래 깃허브에 구현하였습니다.&lt;/p&gt;
&lt;p&gt;(네비게이션 외에도 클린아키텍쳐 스터디를 위해 오픈소스를 진행하고 있습니다. 많은 Star 와 많은 PR,Issue 참여해주세요! )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot;&gt;https://github.com/namjackson/Clean-Architecture-App&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1565777216761&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://github.com/namjackson/Clean-Architecture-App&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CpAPb/hyCpM5j3cX/aHUzrCunJF2vveaK0ABqT0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Sample app for studying the Android clean architecture. - namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;다음글&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-1. Navigation 소개, 구성 및 개여, BackStack 관리 ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/32&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-2. SafeArgs &amp;amp; Deeplink &amp;amp; Action ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-3.&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;NavigationUI &amp;amp; Animation/Transition&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;( 현재 글 )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/34&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-4. Navigation Upgrade (ViewModel with NavGraph Scope &amp;amp; Modularizing(Nested NavGraph) &amp;amp; Multiple-Start-Destination ) &amp;amp; 나의 후기, 장단점( 다음글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@fornewid/io19-jetpack-navigation-33da8811c9de&quot;&gt;https://medium.com/@fornewid/io19-jetpack-navigation-33da8811c9de&lt;/a&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/33</guid>
      <comments>https://namjackson.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 18 Aug 2019 21:51:41 +0900</pubDate>
    </item>
    <item>
      <title>[Android Jetpack] AAC Navigation Component -2. SafeArgs &amp;amp; Deeplink &amp;amp; Action</title>
      <link>https://namjackson.tistory.com/32</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019/03/31 - [Android] - [Android Jetpack] AAC Navigation Component - 1. Navigation 소개,구성 및 개요 , BackStack관리&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1565723819111&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://namjackson.tistory.com/28&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0inWq/hyCpHP2D31/2F6Bhn3ECaGuwgJksTeq7K/img.png?width=800&amp;amp;height=447&amp;amp;face=0_0_800_447,https://scrap.kakaocdn.net/dn/bx79lO/hyCpJmLL2Z/jZEbWYhopjB31RirMd8Iik/img.png?width=1480&amp;amp;height=612&amp;amp;face=0_0_1480_612,https://scrap.kakaocdn.net/dn/bp1NE9/hyCpyZQ2MH/GXwA3TOmHD3vicja6OnkMK/img.png?width=1516&amp;amp;height=494&amp;amp;face=0_0_1516_494');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Android Jetpack] AAC Navigation Component - 1. Navigation 소개,구성 및 개요 , BackStack관리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Navigation Android Jetpack 의 AAC (Android Architecture Component) 컴포넌트중 Navigation에 대해 알아보자! 네비게이션은 앱내의 화면 이동 구현을 도와주는 AAC 라이브러리이다. AAC 라이브러리는 기존에 없..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;namjackson.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;AAC의 Navigation에 대해 잘모르는분들은 먼저 첫번째 게시글을 읽고 오자!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번글에는 SafeArgs, Deeplink , Action에 대해 소개할예정이다.&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4&gt;&lt;b&gt;&amp;nbsp;SafeArgs&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;먼저 SafeArgs를 사용하기 위해 추가 설정이 필요하다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 설정은 구글 공식문서를 참고하여 추가하자&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/jetpack/androidx/releases/navigation&quot;&gt;https://developer.android.com/jetpack/androidx/releases/navigation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기존에 Fragment의 이동에 따른 데이터전달은 보통 Argument Bundle을 이용한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Navigation에서도 마찬가지로 Bundle을 이용하여 사용할수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1565725299372&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;findNavController().navigate(R.id.action_to_gameFragment, bundleOf(&quot;itemId&quot; to 15))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;마찬가지로 받을때 아래처럼 사용할수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1565725321563&quot; class=&quot;kotlin&quot; style=&quot;overflow: auto; background: rgba(0, 0, 0, 0.05); font-size: 16px; color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arguments?.getInt(&quot;itemId&quot;)!!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 사용해도 큰 문제는 없지만,&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;itemId&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&quot;라는 Key값을 통일하여 사용해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 물론 상수로 정의하여 사용해도 되지만,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Navigation에서는 type-safe한 SafeArgs기능을 제공한다.&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;NavGraph(Xml)의&amp;nbsp;Arguments를 미리 정의하여,&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;자동으로&amp;nbsp;Boilerplate&amp;nbsp;Code를 생성하여&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용할 수 있다.&amp;nbsp;&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px; color: #333333;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;itemId&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333;&quot;&gt;&quot;라는 Key값을 사용할 필요가 없다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;자동으로 보내는 쪽에선 Directions Class가 생성되고, 받는 쪽에서는 Args Class가 생성된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565726821636&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;fragment android:id=&quot;@+id/detailFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.detail.DetailFragment&quot;
              android:label=&quot;detail_fragment&quot;
              tools:layout=&quot;@layout/detail_fragment&quot;&amp;gt;

        &amp;lt;argument
                android:name=&quot;itemId&quot;
                app:argType=&quot;integer&quot;
                android:defaultValue=&quot;0&quot;/&amp;gt;
    &amp;lt;/fragment&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NavGraph에서 fragment내의 argument를 정의하면, 자동으로&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Directions,&lt;span style=&quot;color: #333333;&quot;&gt;Args가 생성된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565728865126&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;findNavController().navigate( HomeListFragmentDirections.actionToDetail(itemId), extras)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;HomeListFragmentDirections 클래스가 생성되고, HomeListFragment의 Action들이 메소드로 생긴다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 Action의 파라미터로 argument가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #09b21c;&quot;&gt;생성된현재FragmentDiretions클래스&lt;/span&gt;.&lt;span style=&quot;color: #1b9ae6;&quot;&gt;정의된Action( &lt;span style=&quot;color: #f41a18;&quot;&gt;정의된 Argument&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위처럼 사용하면된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Action 목적지의 Fragment에서는 아래와 같이 파라미터를 받을수있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565729135719&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 2가지방법 - 1. by navArgs()
val safeArgs: DetailFragmentArgs by navArgs()
val itemId = safeArgs.itemId

// 2가지방법 - 2. fromBundle
arguments?.let {
  val arguments = DetailFragmentArgs.fromBundle(it)
  val itemId = arguments.itemId
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;DeepLink&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;딥링크는 안드로이드에서 어플의 특정 목적지까지 포인팅하는 URI이다.&lt;/p&gt;
&lt;p&gt;이런 URI는 사용자에게 어떤일을 위해 특정 목적지로 보낼때 유용하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ex&amp;gt; 빠르게 송금, 빠르게 메세지 확인, 빠르게 상품 확인 등등..&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기존의 플로우 과정없이 한번에 이동하는 로직을 짤때 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Navigation의 DeepLink은 딥링크로 특정목적지를 들어왔어도,&lt;/p&gt;
&lt;p&gt;첫화면부터 특정 목적지 까지의 일반적인 백스택을 그대로 지원해준다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Navigation에서 DeepLink는 간단하게 짤수있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Deeplink는 두가지 구현방법이 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. Explicit Deep Linking - 명시적 딥링크&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;NavDeeplinkBuilder를 사용하여 인스턴스를 생성하여 핸들링이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565775451126&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val args = Bundle()
args.putString(&quot;itemId&quot;, itemId)
val pendingIntent = NavDeepLinkBuilder(context)
  .setGraph(R.navigation.mobile_navigation)
  .setDestination(R.id.detailFragment)
  .setArguments(args)
  .createPendingIntent()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위처럼 NavGraph, Desination Fragment, Args 를 명시적으로 선언하여 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 방법도 좋지만&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Implicit Deep Linking - 암시적 딥링크&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;개인적으로 NavGraph에서 Navigation의 대한 정보를 정의하고 사용해야 Navigation Component가 의미가 있는거 같기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이방법을 추천한다.&lt;/p&gt;
&lt;p&gt;또한 더 간단하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NavGraph에 선언하여 사용하면된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565775709731&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  &amp;lt;fragment android:id=&quot;@+id/detailFragment&quot;
          android:name=&quot;com.namjackson.arch.sample.view.ui.detail.DetailFragment&quot;
          android:label=&quot;detail_fragment&quot;
          tools:layout=&quot;@layout/detail_fragment&quot;&amp;gt;

    ...action 생략...

    &amp;lt;argument
          android:name=&quot;itemId&quot;
          app:argType=&quot;integer&quot;
          android:defaultValue=&quot;0&quot;/&amp;gt;

    &amp;lt;deepLink android:id=&quot;@+id/deepLink&quot;
          app:uri=&quot;sample.detail/{itemId}&quot; /&amp;gt;
  &amp;lt;/fragment&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Manifest의 추가 작업이 더필요하다&lt;/p&gt;
&lt;pre id=&quot;code_1565775880211&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &amp;lt;activity
       android:name=&quot;.view.ui.MainActivity&quot;
       android:label=&quot;@string/app_name&quot;&amp;gt;
   &amp;lt;intent-filter&amp;gt;
     &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot;/&amp;gt;

    &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot;/&amp;gt;
  &amp;lt;/intent-filter&amp;gt;

  &amp;lt;nav-graph android:value=&quot;@navigation/mobile_navigation&quot; /&amp;gt;
&amp;lt;/activity&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Manifest&lt;/b&gt;의 &lt;b&gt;nav-graph&lt;/b&gt;추가와 , &lt;b&gt;NavGraph&lt;/b&gt;에서의&lt;b&gt; &amp;lt;deepLink&amp;gt;&lt;/b&gt; 태그로 정의 하면 쉽게 사용가능하다&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Action&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Action은 Destination(Fragment)끼리의 화면이동이다.&lt;/p&gt;
&lt;p&gt;NavGraph에선 화살표로 표시된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Action엔 일반 Action, Global Action 두가지 종류가 있다.&lt;/p&gt;
&lt;p&gt;일반적인 Action은 특정한&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination&lt;/span&gt;&amp;nbsp;&amp;lt;Fragment&amp;gt; 태그 아래에 존재하여, 특정&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination에서 사용가능하지만&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Global Action은 &amp;lt;&lt;span style=&quot;color: #333333;&quot;&gt;Fragment&lt;/span&gt;&amp;gt; 태그들과 같은 레벨에 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565729861907&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;navigation xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
            xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
            xmlns:tools=&quot;http://schemas.android.com/tools&quot;
            app:startDestination=&quot;@id/dashboard&quot;
            android:id=&quot;@+id/mobile_navigation&quot;&amp;gt;

  
    &amp;lt;fragment android:id=&quot;@+id/progressFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.detail.ProgressFragment&quot;
              android:label=&quot;progress_fragment&quot;
              tools:layout=&quot;@layout/progress_fragment&quot;&amp;gt;
        &amp;lt;action
                android:id=&quot;@+id/action_to_detail&quot;
                app:destination=&quot;@id/detailFragment&quot;/&amp;gt;
        &amp;lt;argument
                android:name=&quot;itemId&quot;
                app:argType=&quot;integer&quot;
                android:defaultValue=&quot;0&quot;/&amp;gt;
    &amp;lt;/fragment&amp;gt;

    &amp;lt;fragment android:id=&quot;@+id/errorFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.ErrorFragment&quot;
              android:label=&quot;ErrorFragment&quot;
              tools:layout=&quot;@layout/error_fragment&quot;/&amp;gt;

    &amp;lt;action
            android:id=&quot;@+id/action_to_error&quot;
            app:destination=&quot;@id/errorFragment&quot;/&amp;gt;

&amp;lt;/navigation&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;action_to_error의 Action은 어디서나 사용가능한 Global Action이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNUKA/btqxrkmWZV8/i4HK07hfnRfOWQzCtd0F0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNUKA/btqxrkmWZV8/i4HK07hfnRfOWQzCtd0F0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNUKA/btqxrkmWZV8/i4HK07hfnRfOWQzCtd0F0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNUKA%2FbtqxrkmWZV8%2Fi4HK07hfnRfOWQzCtd0F0k%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Global Action의 경우 xml에선 화살표가 위와 같이 표현된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565730006562&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;findNavController().navigate(R.id.action_to_error)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;navigation은 일반적으로 똑같이 사용이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;샘플 코드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;해당 예제 코드는 아래 깃허브에 구현하였습니다.&lt;/p&gt;
&lt;p&gt;(네비게이션 외에도 클린아키텍쳐 스터디를 위해 오픈소스를 진행하고 있습니다. 많은 Star 와 많은 PR,Issue 참여해주세요! )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/namjackson/Clean-Architecture-App&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;og-loading&quot; contenteditable=&quot;false&quot;&gt;불러오는 중입니다...&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;다음글&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/28&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-1. Navigation 소개, 구성 및 개여, BackStack 관리 ( 이전 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-2. SafeArgs &amp;amp; Deeplink &amp;amp; Action ( 현재 글 )&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/33&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-3. NavigationUI &amp;amp; Animation/Transition ( 다음 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/34&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-4. Navigation Upgrade (ViewModel with NavGraph Scope &amp;amp; Modularizing(Nested NavGraph) &amp;amp; Multiple-Start-Destination ) &amp;amp; 나의 후기, 장단점( 다음 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <category>AAC</category>
      <category>AAC Navigation</category>
      <category>action</category>
      <category>android</category>
      <category>android navigation</category>
      <category>Deeplink</category>
      <category>Jetpack</category>
      <category>Jetpack Navigation</category>
      <category>Navigation</category>
      <category>SafeArgs</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/32</guid>
      <comments>https://namjackson.tistory.com/32#entry32comment</comments>
      <pubDate>Wed, 14 Aug 2019 05:07:31 +0900</pubDate>
    </item>
    <item>
      <title>디자인패턴1 -  스트래티지 패턴 (strategy pattern)</title>
      <link>https://namjackson.tistory.com/31</link>
      <description>&lt;h2&gt;Strategy Pattern&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;스트래티지패턴&lt;/b&gt;은 &lt;i&gt;객체&lt;/i&gt;의 동작/행위를 &lt;b&gt;정의&lt;/b&gt;하고, &lt;b&gt;구현&lt;/b&gt;함으로써&lt;/p&gt;
&lt;p&gt;&lt;i&gt;해당 객체&lt;/i&gt;의 특정 동작/행위에 대한 구현을&lt;b&gt; 행동객체(Behavior)&lt;/b&gt;에 위임하여&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;해당 객체&lt;/i&gt;와는 독립적으로 동작/행위를&amp;nbsp; 구현하는 패턴이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;적용할수 있는 예시&lt;/b&gt;를 들어보자!&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;게임을 개발함에 있어, 여러종류의 무기를 구현하자,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기본 무기엔 활, 총 ,검이&amp;nbsp; 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래처럼 공통으로 가지는 동작을 추가한 Weapon 클래스를 상속받는 Gun,Bow, Sword를 구현하자.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNOow2/btqw3jI8vGM/cuBi5geazMKUZopL8e6Avk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNOow2/btqw3jI8vGM/cuBi5geazMKUZopL8e6Avk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNOow2/btqw3jI8vGM/cuBi5geazMKUZopL8e6Avk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNOow2%2Fbtqw3jI8vGM%2FcuBi5geazMKUZopL8e6Avk%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만, 총과 활과 검의 공격방식은 서로 다르다.&lt;/p&gt;
&lt;p&gt;그리고 또한, 앞으로 수많은 종류의 무기가 추가될예정이고,&lt;/p&gt;
&lt;p&gt;총은 총알이 없어도, 총을 휘둘러 공격할수 있도록 업데이트예정이며,&lt;/p&gt;
&lt;p&gt;또 검은 찌르기와, 베기 2가지 종류의 공격으로 나눌예정이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각각의 Attack 메소드를 오버라이딩해서 구현하는 방법도 있지만,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;상속은 이러한 변화에 유연하지않아 각 업데이트에 대응하는데 힘들것이고,&lt;/p&gt;
&lt;p&gt;또한 점점 재사용하기 힘든코드가 될것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 어떻게 구현해야할까?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 Gun,Bow,Sword클래스의 Attack행위/동작에 대한 인터페이스를 정의한다.&lt;/p&gt;
&lt;pre id=&quot;code_1564232340367&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface AttackBehavior {
	public void attack();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리고 이 행위/동작에 대한 인터페이스를 구현하는 클래스를 생성하자&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1564232445931&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class GunShootAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;총 발사 ! &quot;);
	}
}

class ArrowShootAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;화살 발사 ! &quot;);
	}
}

class StabAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;찌르기 ! &quot;);
	}
}

class CutAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;베기 ! &quot;);
	}
}

class HitAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;때리기 !&quot;);
	}
}

class NoAttack implements AttackBehavior{
	public void attack() {
		System.out.println(&quot;공격 불가&quot;);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;총 발사 , 화살 발사, 찌르기, 뻬기, 때리기, 공격불가등의 행위에 대한 구현체(행동객체)를 선언하였고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가되는 공격종류에 대해서는 구현체를 만들면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무기객체에 Attack 행위를 행동객체에 위임해보자 .&amp;nbsp;&lt;/p&gt;
&lt;p&gt;필요에 따라서는 행동객체를 동적으로 할당할수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1564232605330&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;abstract class Weapon{
	//행동객체
	AttackBehavior attackBehavior;
	
	public Weapon(AttackBehavior attackBehavior ){
		setAttackBehavior(attackBehavior);
	}
	
	void setAttackBehavior(AttackBehavior attackBehavior){
		this.attackBehavior=attackBehavior;	//행위 동적할당 
	}
	
	void attack(){
		attackBehavior.attack();	//attack의 행위를 행동객체에 위임! 
	}

	//부셔짐  - 동적으로 행동객체를 할당할수있다.
	void breakDown() {
		setAttackBehavior(new NoAttack());
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구현이 다되었으면, 테스트를 해보자 .&lt;/p&gt;
&lt;pre id=&quot;code_1564232877405&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void main(String[] args) {
		
		Weapon weapon1 = new ShotGun();
		weapon1.attack(); //빵야
		weapon1.attack(); //빵야
		//총알 다씀 - 동적으로 행동객체를 할당할수있다.
		weapon1.setAttackBehavior(new HitAttack());
		weapon1.attack(); //총으로 때리기! 
		
		Weapon weapon2 = new Bow();
		weapon2.attack(); // 화살쏘기
		weapon2.breakDown(); //고장 
		weapon2.attack(); //공격불가 ..... 
		
		Weapon weapon3 = new Sword();
		weapon3.attack(); //찌르기!
		weapon3.setAttackBehavior(new CutAttack());	//베기로 변경 
		weapon3.attack(); //베기!
		weapon3.setAttackBehavior(new StabAttack()); //찌르기로 변
		weapon3.attack(); //찌르기!
		
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무기객체의 특정 행동(Attack)을 인터페이스로 정의한 후,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무기 객체의 (Attack)행동에 대한 구현을 행동객체(Behavior)의 구현체에 위임하여&lt;/p&gt;
&lt;p&gt;무기 객체와 독립적으로 Attack행위를 구현할수있었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;※Attack과 같은 동작은 어떤객체의 알고리즘군이라고 표현된다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt; 이러한 알고리즘군을 정의하고, 각각을 캡슐화하여 교환해서 사용할수 있도록 만든다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;이러한 패턴으로 특정동작을 해야하는 객체와 독립적으로 알고리즘군을 구현할수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;특정 동작이 객체에 영향을 받지 않고, 여러 방식으로 구현될수있다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;객체는 이런 특정동작을 행동&lt;span style=&quot;color: #333333;&quot;&gt;(Behavior)&lt;/span&gt;객체에 위임하기 때문에, 독립적으로 사용될수있다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;소스코드 - 깃허브 Star는 큰도움이됩니다!&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/namjackson/SoftwareEngineeringStudy/blob/master/src/namjackson/designpatterns/strategy/TestSimulator.java&quot;&gt;https://github.com/namjackson/SoftwareEngineeringStudy/blob/master/src/namjackson/designpatterns/strategy/TestSimulator.java&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;참고&lt;/p&gt;
&lt;p style=&quot;font-size: 0.81em;&quot;&gt;&lt;a href=&quot;https://movefast.tistory.com/95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://movefast.tistory.com/95&lt;/a&gt;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/31</guid>
      <comments>https://namjackson.tistory.com/31#entry31comment</comments>
      <pubDate>Sat, 27 Jul 2019 22:22:49 +0900</pubDate>
    </item>
    <item>
      <title>[NodeJS ]1. Nodejs 동작원리 및 이벤트 루프, 논블로킹I/O (Event Loop , Non-Blocking)</title>
      <link>https://namjackson.tistory.com/30</link>
      <description>&lt;p&gt;&lt;b&gt;NodeJS란 ?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;비동기&amp;nbsp;&lt;b&gt;이벤트 기반&lt;/b&gt; 주도&lt;b&gt; ,&lt;/b&gt;&amp;nbsp;&lt;b&gt;JavaScript 런타임&lt;/b&gt;으로써, Nodejs는 확장성 있는 네트워크 애플리케을 만들수 있는 언어.&lt;/p&gt;
&lt;p&gt;Chrome V8엔진 기반의 이벤트 기반( Event-driven ) , 논-블로킹 I/O ( Non-Blocking) 패러다임을 채택한 언어로&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가볍고 빠르다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정확한 설명은 공식 문서를 참고하자!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nodejs.org/ko/about/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nodejs.org/ko/about/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nodejs의 장점 및 동작원리에 대해 알아보자&lt;/p&gt;
&lt;p&gt;크게 3가지를 알아볼것이다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 이벤트 기반 ( Event-Driven) - 이벤트 루프 동작원리&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 논블로킹 I/O ( Non-Blocking I/O)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 싱글 스레드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;각각의 특징들이 어떤식으로 동작하는지 간단하게 알아보겠다.!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;1. 이벤트 기반 (Event-Driven)&lt;/h3&gt;
&lt;p&gt;- 이벤트가 발생하였을때, 저장해둔 작업을 수행하는 방식&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( ex&amp;gt;클릭 리스너, 네트워크 요청에 대한 처리 등등)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 이벤트 리스너에 미리 콜백함수를 저장해놓고, 입력된 이벤트에 따라&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당하는 작업을 수행한다&lt;/p&gt;
&lt;p&gt;ex&amp;gt; 요청 url에 해당하는 콜백함수 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi7dl5/btqv7qohDO0/k47nl6LBnRiQC6LY2UtNd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi7dl5/btqv7qohDO0/k47nl6LBnRiQC6LY2UtNd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi7dl5/btqv7qohDO0/k47nl6LBnRiQC6LY2UtNd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi7dl5%2Fbtqv7qohDO0%2Fk47nl6LBnRiQC6LY2UtNd0%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;/about이라는 요청이 들어오면 res.send()를 호출하는 콜백함수가 실행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 발생한 이벤트는 순차적으로 처리하며, 발생한 이벤트가 없다면, 대기한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&lt;b&gt;이벤트 루프&lt;/b&gt;가 이벤트 처리 순서를 관리해준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;그렇다면&lt;b&gt; 이벤트 루프&lt;/b&gt;란 무엇인가?&lt;/h3&gt;
&lt;p&gt;이벤트 루프를 설명하기 위해, Java Script의 동작 원리를 알아보자&lt;/p&gt;
&lt;p&gt;JavaScript는 싱글스레드 기반이기 때문에&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1560709044287&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Hi 1 !&quot;);
console.log(&quot;Hi 2 !&quot;);
console.log(&quot;Hi 3 !&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위코드를 실행하면. 위에서 아래로 순차적으로 실행이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 만약 중간에 오래걸리는 작업이 있다면,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 작업이 완료되기전까지 그 아래 작업은 진행되지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1560709126521&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Hi 1 !&quot;);
Delay() // 오래걸리는 작업
console.log(&quot;Hi 2 !&quot;);
console.log(&quot;Hi 3 !&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 코드의 호출 스택을 확인해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1560709723398&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function one(){
 two();
 console.log(&quot;One&quot;);
}
function two(){
 three();
 console.log(&quot;Two&quot;);
}
function three(){
 console.log(&quot;Three&quot;);
}
one();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해당 코드의 호출 스택을 보면 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; width=&quot;672&quot; height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NNAsf/btqv7ZQ3Qdp/Esw46F9noFulgXKhl6zgm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NNAsf/btqv7ZQ3Qdp/Esw46F9noFulgXKhl6zgm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NNAsf/btqv7ZQ3Qdp/Esw46F9noFulgXKhl6zgm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNNAsf%2Fbtqv7ZQ3Qdp%2FEsw46F9noFulgXKhl6zgm1%2Fimg.png&quot; width=&quot;672&quot; height=&quot;424&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 이제 아래처럼 TimeOut이 포함된 코드의 호출 스택을 생각해보자!&lt;/p&gt;
&lt;pre id=&quot;code_1560711447772&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;start!&quot;);

setTimeout(function timeout(){
	console.log(&quot;Time Out log&quot;);
},5000);

console.log(&quot;end!&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;물론 실행 순서는 예측할수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;start!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;end!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;(5초이후)Time Out log&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 호출 스택을 어떻게 표현하고, 동작할까?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;※참고 : 자바스크립트는 싱글스레드 기반에서 콜백이 실행될수 있는 이유는&lt;/p&gt;
&lt;p&gt;Web환경에서 스레드를 제공해주는api환경을 제공해준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( ex&amp;gt; Dom(Documnet), Ajax, setTimeOut )&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위코드의 호출스택을 이해하기 위해 3가지 요소를 이해해야한다.&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;이벤트 루프(Event loop)&lt;/b&gt;&amp;nbsp;: 이벤트 발생시, 콜백함수를 관리하고, 실행순서를 관리하는 역할&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;태스크 큐(Task Queue)&lt;/b&gt;&amp;nbsp;: 이벤트 발생 후, 실행되어야 하는 작업들이 순차적으로 대기하는 공간&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;백그라운드(Background)&lt;/b&gt;&amp;nbsp;: Timer, I/O , 이벤트 리스너 등등&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;전체 호출스택을 표현하자면 이렇게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m8dfe/btqv8wHEN4c/dnghAKpoMLe9kK9HRb8aDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m8dfe/btqv8wHEN4c/dnghAKpoMLe9kK9HRb8aDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m8dfe/btqv8wHEN4c/dnghAKpoMLe9kK9HRb8aDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm8dfe%2Fbtqv8wHEN4c%2FdnghAKpoMLe9kK9HRb8aDk%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;1. 먼저 실행 코드들이 호출스택에 쌓인다.&lt;/p&gt;
&lt;p&gt;2. 실행 코드중 백그라운드가 필요한 작업은 백그라운드공간으로 이동하고, 순차적으로 호출스택이 진행된다.&lt;/p&gt;
&lt;p&gt;3. 백그라운드에서 자체적으로 작업완료된 콜백함수는 태스크큐로 이동하여 대기한다.&lt;/p&gt;
&lt;p&gt;4. 호출 스택들이 완료되면 이벤트 루프(Event Loop) 가 태스크 큐에 있는 콜백을 순서대로 호출스택에 올린다.&lt;/p&gt;
&lt;p&gt;5. 호출스택이 완료되면 이벤트루프&lt;span style=&quot;color: #333333;&quot;&gt;(Event Loop)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;가 돌면서 태스크 큐에 있는 콜백을 실행시키고,&lt;/p&gt;
&lt;p&gt;6. 태스크 큐에 아무것도 없다면,&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;이벤트가 올때까지 대기한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참고 링크 ( 자바스크립트 이벤트 루프 상세한 내용 및 연습 동작 샘플)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1560713660005&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;latentflip.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;아래는 전체적인 JS 이벤트 루프 내용이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgZSqM/btqv6D9wnn0/a8XRX7W0DgzALlJd4cORU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgZSqM/btqv6D9wnn0/a8XRX7W0DgzALlJd4cORU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgZSqM/btqv6D9wnn0/a8XRX7W0DgzALlJd4cORU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgZSqM%2Fbtqv6D9wnn0%2Fa8XRX7W0DgzALlJd4cORU0%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 노드의 동작원리 및 장점으로 들어와서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;2. 논 블록킹 I/O ( Non-Blocking I/O) 에 대해 알아보자&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;- 논-블록킹&lt;/b&gt;은 이전 작업이 완료될때 까지, 기다리면서 멈추지 않고, 다음작업이 지연되지 않게 동작하는 패러다임이다.&lt;/p&gt;
&lt;p&gt;- 오래걸리는 작업은 백그라운드에서 진행하며 완료 후, 이벤트 루프를 통해 태스크 큐를 거쳐 호출스택에 올라오길 기다리는 방식&lt;/p&gt;
&lt;p&gt;- (시간이 많이 걸리는) 다른 컴퓨팅 자원에 접근하는 I/O(=파일 입/출력,네트워크등)에서 논 블로킹(Non-Blocking) 방식으로 채택됨&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;논 블로킹I/O는 비동기 개념으로 쉽게 이해할수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1560714886473&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun longTimeTask(){
	//...오래걸리는작업
    console.log(&quot;작업 끝&quot;);
}
console.log(&quot;시작&quot;);
longTimeTask();
console.log(&quot;끝, 다음작업&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 코드를 실행하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;시작&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;(//오래걸리는작업 이후)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;작업끝&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;끝, 다음작업&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 순서대로 실행이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 오래걸리는작업 (longTimeTask()의 함수)에서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오래걸린다면 다음 작업 시작까지 오래걸린다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1560715047805&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun longTimeTask(){
	//...오래걸리는작업
    console.log(&quot;작업 끝&quot;);
}
console.log(&quot;시작&quot;);
setTimeout(longTimeTask(),0);
console.log(&quot;끝, 다음작업&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;하지만 위처럼 setTimeout을 사용해서, 실행하면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;시작&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;끝, 다음작업&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;(//오래걸리는작업 이후) &lt;/b&gt;작업끝&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 순서로 실행된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오래걸리는 작업 ( longTimeTask)를 논-블로킹 으로 처리하기때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음작업까지, 기다리지않고 바로 실행이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;3. 다음은 노드의 싱글스레드이다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;NodeJs&lt;/b&gt;는 논/블로킹기반의 싱글스레드로 동작하고 있다.&lt;/p&gt;
&lt;p&gt;(사실 NodeJs는 내부적으로 여러 스레드가 동작하지만, 개발자가 제어하는건 싱글스레드이다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래의 예시다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;주방 (요리 ) - I/O작업&lt;/p&gt;
&lt;p&gt;점원 - 스레드&lt;/p&gt;
&lt;p&gt;고객 - 요청&lt;/p&gt;
&lt;p&gt;으로 생각하고 이해하면된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIxPZ/btqv7piEWAE/HRmcArCICCNyEEtnBJ4HYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIxPZ/btqv7piEWAE/HRmcArCICCNyEEtnBJ4HYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIxPZ/btqv7piEWAE/HRmcArCICCNyEEtnBJ4HYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIxPZ%2Fbtqv7piEWAE%2FHRmcArCICCNyEEtnBJ4HYK%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 그림은 스레드(점원)가 하나뿐이고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한 요청(고객)에 주문-&amp;gt; 요리 -&amp;gt;서빙 이 실행되지만,&lt;/p&gt;
&lt;p&gt;Non-Blocking을 채택하지 않아서,&lt;/p&gt;
&lt;p&gt;다른 요청들(고객2,고객3)은 스레드(점원)의 순서가 올때까지 대기한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 Non-Blocking을 채택한 싱글스레드 기반의 예시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VsBiu/btqv7h6bGLL/FCYUV7q82MrAiwEjQFLP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VsBiu/btqv7h6bGLL/FCYUV7q82MrAiwEjQFLP10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VsBiu/btqv7h6bGLL/FCYUV7q82MrAiwEjQFLP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVsBiu%2Fbtqv7h6bGLL%2FFCYUV7q82MrAiwEjQFLP10%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;스레드(점원)가 하나인것은 똑같지만, 주방요리(I/O)작업은 Non-Blocking작업으로 백그라운드에서 작업하므로&lt;/p&gt;
&lt;p&gt;요청(고객)이 대기하지 않아도, 바로 주문을 할수 있고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;주문후, 요리가 완료되면 바로바로 서빙이된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 NonBlocking 싱글스레드로&lt;/p&gt;
&lt;p&gt;아래의 멀티스레드 (점원여러명)와 비슷하게 처리할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AQoTh/btqv8xzNAFp/KzKisyRy28Egfvotlko5f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AQoTh/btqv8xzNAFp/KzKisyRy28Egfvotlko5f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AQoTh/btqv8xzNAFp/KzKisyRy28Egfvotlko5f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAQoTh%2Fbtqv8xzNAFp%2FKzKisyRy28Egfvotlko5f0%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 효율적으로 자원을 관리하기 때문에&lt;/p&gt;
&lt;p&gt;멀티 스레드 기반의 프로그램보다,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;메모리나 기타 자원이 적게 소모된다.&lt;/p&gt;
&lt;p&gt;이런면이 노드 Js 의 큰장점이다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;☆ 필요시 NodeJs는 스레드를 늘리는 멀티스레드가 아닌&lt;/p&gt;
&lt;p&gt;여러개의 프로세스를 동작하는 멀티프로세싱을 채택한다! (추후 , cluster모듈 참고)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>NodeJs</category>
      <category>event-driven</category>
      <category>event-loop</category>
      <category>node</category>
      <category>nodejs</category>
      <category>Non-blocking</category>
      <category>Single Thread</category>
      <category>논블로킹</category>
      <category>동작원리</category>
      <category>이벤트기반</category>
      <category>이벤트루프</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/30</guid>
      <comments>https://namjackson.tistory.com/30#entry30comment</comments>
      <pubDate>Mon, 17 Jun 2019 05:29:55 +0900</pubDate>
    </item>
    <item>
      <title>[Android Jetpack] AAC Navigation Component - 1. Navigation 소개,구성 및 개요 , BackStack관리</title>
      <link>https://namjackson.tistory.com/28</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span&gt;Navigation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Android Jetpack 의&amp;nbsp; AAC (Android Architecture Component) 컴포넌트중 Navigation에 대해 알아보자!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네비게이션은&amp;nbsp;앱내의 화면 이동 구현을 도와주는&amp;nbsp;AAC 라이브러리이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;AAC 라이브러리는 기존에 없었던 기능이 아니라, 개발자들이 구현하기 쉽게 도와주는 컴포넌트라고 생각하면된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래의 화면처럼 Android 내에서 화면흐름을 시각적으로&amp;nbsp;볼수있을 뿐만아니라 바로 수정할 수 있기때문에 편하다!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvNXqo/btqxqJ1E9ro/32b22CiiMt8tIRc0IpgeUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvNXqo/btqxqJ1E9ro/32b22CiiMt8tIRc0IpgeUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvNXqo/btqxqJ1E9ro/32b22CiiMt8tIRc0IpgeUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvNXqo%2FbtqxqJ1E9ro%2F32b22CiiMt8tIRc0IpgeUK%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 뿐만아니라 아래처럼 여러 기능들을 제공해준다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Navigation은 앱내에서&amp;nbsp;화면 탐색에 필요한 모든 것을 처리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Fragment 트랜잭션을 관리할수 있다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Up, Back 버튼의 작업 등(백스택 관리)을 간단하게 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;화면 전환시, Animation 이나 Transition을 위한 표준화된 리소스를 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;딥링크 구현 및 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Navigation UI 패턴을 사용한 Navigation drawers, Bottom Navigation의 연동을 쉽게 구현 가능하게 지원&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;fragment간의 이동시 안전하게 데이터를 전달 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Navigation Editor를 통해 화면흐름을 시각적으로 관리할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;기본 FragmentManager, Intent , Bundle등의 사용을 대체할수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;&lt;span&gt;1. Navigation의&amp;nbsp;&lt;/span&gt;&lt;span&gt;구성요소&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Navigation의 구성요소는 3가지로 나눠서 이해하면된다.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Navigation Graph&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Nav Host&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Nav Controller&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;1.&amp;nbsp;&lt;/span&gt;&lt;span&gt;Navigation Graph&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;502&quot; height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/869Ea/btqxukZJbfU/9BrIs41M9VNKFvueE1QvkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/869Ea/btqxukZJbfU/9BrIs41M9VNKFvueE1QvkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/869Ea/btqxukZJbfU/9BrIs41M9VNKFvueE1QvkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F869Ea%2FbtqxukZJbfU%2F9BrIs41M9VNKFvueE1QvkK%2Fimg.png&quot; width=&quot;502&quot; height=&quot;439&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Navigation Graph 는&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;res/navigation/&lt;/span&gt;&amp;nbsp;&lt;/span&gt;폴더에 추가한 xml 파일이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;화면이동에 대한 모든정보( Action, 화면이동시 파라미터, 화면단위)를 정의하는 곳이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위와 같은 화면 흐름을 시각적으로 보고 관리할 수 있는 파일이며,&amp;nbsp;&lt;/span&gt;&lt;span&gt;Android Studio 3.3 이상에서 지원한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;NavGraph에는 아래의 기본 요소에 대한 태그들을 사용할 수&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;navigation&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/b&gt; - NavGraph의 기본 태그&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;fragment&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;Activity&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;Dialog&amp;gt;&lt;/span&gt;&lt;/b&gt;등의 Destination ( 목적지가 되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;하나의 화면라고 생각하면된다. ) ( 그래프에서는 하나의 화면으로 구분된다.)&lt;/span&gt;&amp;nbsp;(&amp;nbsp;&lt;b&gt;&amp;lt;Dialog&amp;gt;&lt;/b&gt;태그는 2.1.0부터 지원한다. )&lt;span style=&quot;font-size: 0.87em; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;-&amp;nbsp;&amp;nbsp;화면 이동에 대한 액션을 정의할 수 있다. ( 화면간의 이동을 정의하는 태그&lt;span&gt;&amp;nbsp;&lt;/span&gt;)&amp;nbsp; ( 그래프에서는 화살표로 표현된다.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;argument&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 화면 이동에 대한 파라미터를 정의한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;lt;deeplink&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 딥링크에 대한 내용을 정의한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;위의 태그를 이용하여, 아래와 같이 각 화면들과 화면 이동에 대한 내용이 정의된 xml파일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565692571321&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;navigation xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
            xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
            xmlns:tools=&quot;http://schemas.android.com/tools&quot;
            app:startDestination=&quot;@id/dashboard&quot;
            android:id=&quot;@+id/mobile_navigation&quot;&amp;gt;


    &amp;lt;fragment
            android:id=&quot;@+id/home_list&quot;
            android:name=&quot;com.namjackson.arch.sample.view.ui.home.HomeListFragment&quot;
            android:label=&quot;@string/fragment_home_list&quot;
            tools:layout=&quot;@layout/home_list_fragment&quot;&amp;gt;

        &amp;lt;action
                android:id=&quot;@+id/action_to_detail&quot;
                app:destination=&quot;@id/detailFragment&quot;/&amp;gt;
        &amp;lt;action
                android:id=&quot;@+id/action_to_add&quot;
                app:destination=&quot;@id/addFragment&quot;
                app:enterAnim=&quot;@anim/slide_in_up&quot;
                app:exitAnim=&quot;@anim/fade_out&quot;
                app:popEnterAnim=&quot;@anim/fade_in&quot;
                app:popExitAnim=&quot;@anim/slide_out_down&quot;/&amp;gt;
    &amp;lt;/fragment&amp;gt;

    &amp;lt;fragment android:id=&quot;@+id/detailFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.detail.DetailFragment&quot;
              android:label=&quot;detail_fragment&quot;
              tools:layout=&quot;@layout/detail_fragment&quot;&amp;gt;
        &amp;lt;action
                android:id=&quot;@+id/action_to_progress&quot;
                app:destination=&quot;@id/progressFragment&quot;/&amp;gt;

        &amp;lt;argument
                android:name=&quot;itemId&quot;
                app:argType=&quot;integer&quot;
                android:defaultValue=&quot;0&quot;/&amp;gt;
    &amp;lt;/fragment&amp;gt;

    &amp;lt;fragment android:id=&quot;@+id/progressFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.detail.ProgressFragment&quot;
              android:label=&quot;progress_fragment&quot;
              tools:layout=&quot;@layout/progress_fragment&quot;&amp;gt;
        &amp;lt;action
                android:id=&quot;@+id/action_to_detail&quot;
                app:destination=&quot;@id/detailFragment&quot;/&amp;gt;
        &amp;lt;argument
                android:name=&quot;itemId&quot;
                app:argType=&quot;integer&quot;
                android:defaultValue=&quot;0&quot;/&amp;gt;
    &amp;lt;/fragment&amp;gt;

    &amp;lt;fragment android:id=&quot;@+id/errorFragment&quot;
              android:name=&quot;com.namjackson.arch.sample.view.ui.ErrorFragment&quot;
              android:label=&quot;ErrorFragment&quot;
              tools:layout=&quot;@layout/error_fragment&quot;/&amp;gt;

    &amp;lt;action
        android:id=&quot;@+id/action_to_error&quot;
        app:destination=&quot;@id/errorFragment&quot;/&amp;gt;

&amp;lt;/navigation&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;각각의 Fragment,Activitiy는 하나의 화면인 Destination 을 의미하고,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Fragment내에&amp;nbsp;&lt;/span&gt;action,&lt;span style=&quot;color: #333333;&quot;&gt;argument&lt;/span&gt; 태그는 각각 화면을 이동 , 파라미터를 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;2.&lt;/span&gt;&lt;span&gt;Nav Host&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;NavHost는 NavGraph에 정의된 화면들을 보여주는 컨테이너의 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;화면이동에 대한 액션은 모두 NavHost라는 Fragment에게 위임된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;일반 Fragment의 Name에 NavHostFragment를 정의해주어야하고,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;연결되는 navGraph 또한 정의해주어야한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565694276834&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        &amp;lt;fragment
                android:id=&quot;@+id/nav_container&quot;
                android:layout_width=&quot;match_parent&quot;
                android:layout_height=&quot;match_parent&quot;
                android:name=&quot;androidx.navigation.fragment.NavHostFragment&quot;
                app:defaultNavHost=&quot;true&quot;
                app:navGraph=&quot;@navigation/mobile_navigation&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;NavHost에는 NavController도 포함한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.NavController&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;NavController는 화면이동에 대한 컨트롤러 역할을 한다.&lt;/p&gt;
&lt;p&gt;NavController는 NavHost에서 얻을수있다.&lt;/p&gt;
&lt;p&gt;navController는 아래 처럼 여러 방법으로 가져온다.&lt;/p&gt;
&lt;pre id=&quot;code_1565700688057&quot; class=&quot;kotlin&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &amp;lt;!--navController fragment,activity,view에서 find --&amp;gt;
 val navController = findNavController()
 
 &amp;lt;!--navController navhost id로 가져오기 --&amp;gt;
 val navController = findNavController(R.id.nav_container)
 
 &amp;lt;!--navController - navhost에서 가져오기 --&amp;gt;
 val host: NavHostFragment = supportFragmentManager
                .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return
 val navController = host.navController&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래와 같이 navController를 사용하여 간단하게 화면 전환이 가능하다.&lt;/p&gt;
&lt;p&gt;아래의 간단예제외에 많은 사용방법이있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565700863210&quot; class=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!--NavGraph(xml)에 정의된 R.id.flow_step_one_dest에 해당하는 action이 진행된다.--&amp;gt;
findNavController().navigate(R.id.flow_step_one_dest)

&amp;lt;!--
  NavGraph에 정의된 Action(R.id.next_action)을 사용한다 
  HomeFragmentDirections은 intent개념으로 이해하면된다.
  NavGraph(xml)에 action을 정의하면 tool내에서 자동으로 해당 클래스를 생성해준다.
--&amp;gt;
findNavController().navigate(HomeFragmentDirections.nextAction(1))

&amp;lt;!--NavGraph에 정의된 Action(R.id.next_action)으로 Listner를 반환한다. --&amp;gt;
Navigation.createNavigateOnClickListener(R.id.next_action, null)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Navigation의&amp;nbsp; Action Structure&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D6yfN/btqxqXk9CBt/2qrjCeS8nroiKBsp7ImkHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D6yfN/btqxqXk9CBt/2qrjCeS8nroiKBsp7ImkHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D6yfN/btqxqXk9CBt/2qrjCeS8nroiKBsp7ImkHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD6yfN%2FbtqxqXk9CBt%2F2qrjCeS8nroiKBsp7ImkHk%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;NavDestination,&lt;span style=&quot;color: #333333;&quot;&gt;NavDirections,&lt;span style=&quot;color: #333333;&quot;&gt;NavArgs&lt;/span&gt;&lt;/span&gt;은&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;NavGraph(xml)에서 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;각각 정의된 Destination, Action, Argument를 기반으로 자동 생성된 클래스이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래처럼 Nav 클래스는 오른쪽에 매핑된다고 보면된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NavHost / NavController&amp;nbsp; = Activity / FragmentManager&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NavGraph&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= res/navitaion(xml)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Navigator&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NavDestination&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = Fragment&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NavDirections / NavArgs&amp;nbsp; =&amp;nbsp; Intent / Bundle&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NavigationUI&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = UI Helper&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;화면이 이동될때, NavController가 다음 화면으로 향하는 Action을 동작시켜주는 NavDiretions을 요청하면, NavBackStackEntry에서 Stack을 처리한후, 다음 NavDestination을 &lt;span style=&quot;color: #333333;&quot;&gt;NavArgs과 함께 실행한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사실 사용할땐 &lt;span style=&quot;color: #333333;&quot;&gt;Navigation과&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination,&lt;/span&gt;&lt;/span&gt;NavArgs 만 알면 사용할수있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Navigation BackStack 관리&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;Backstack에 관한 네이게이션의 기본원칙&lt;/b&gt;들을 먼저 알아보자&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 앱은 반드시 고정된 시작점(Starting Destination)을 가진다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;( 고정된 시작점은 사용자가 보는 첫번째 화면이자, 사용자들이 Back버튼을 눌러서 도착하는 마지막 화면&amp;nbsp; )&lt;/p&gt;
&lt;p&gt;(&amp;nbsp; 로그인같은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일회성 화면&lt;/span&gt;이 시작화면이 되어서는 안된다. )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Navigation Stack은 화면의 상태를 나타낸다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;( 스택은 LIFO 구조로, 시작 Destination은 가장 아래에 있고 현재&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination은 항상 위에 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;만약 스택을 변경할땐, Stack의 최상단에서 push,pop으로 동작해야한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. Up버튼으로 앱을 종료시킬수는 없다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;( 시작&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination에서는 Up버튼이 보이지않아야 한다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4. Up 과 Back 버튼은 동작이 일치해야한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5. Deep Linking이나 Navigation이나 특정&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;Destination 진입 시, 동일한 Stack을 가져야한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;( DeepLink로 들어온 화면일지라도, Stack은 기존과 같이&amp;nbsp; 고정된 시작점(Starting Destination)부터 쌓여있어야한다.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 원칙을 기본으로&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Navigation에서는&lt;/span&gt;&amp;nbsp;이전 &lt;b&gt;Destination(Fragment)&lt;/b&gt; 이 포함된&lt;b&gt; 백스택&lt;/b&gt;을 자동으로 관리한다.&lt;/p&gt;
&lt;p&gt;앱을 열때 첫화면이 &lt;b&gt;백스택&lt;/b&gt;에 배치된다. 그 후, &lt;b&gt;Navigate()&lt;/b&gt;를 실행시켜서 화면을 이동할때마다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;백스택 맨위에 해당 &lt;b&gt;Destination(Fragment)&lt;/b&gt;이 놓여집니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전(뒤로가기, 위로가기) 기능 시 , 스택의 &lt;b&gt;맨위의 Destination(Fragment)&lt;/b&gt;를 제거(or Pop)함으로&lt;/p&gt;
&lt;p&gt;바로 &lt;b&gt;이전의 (바로아래의 ) Destination(Fragment)&lt;/b&gt;가 호출된다.&amp;nbsp; (&lt;b&gt;NavController.navigateUp()&lt;/b&gt; or &lt;b&gt;NavController.popBackStack()&lt;/b&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSRbfE/btqxrkUNLIT/SKbcZbx1Y9XmPYqjH0eGqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSRbfE/btqxrkUNLIT/SKbcZbx1Y9XmPYqjH0eGqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSRbfE/btqxrkUNLIT/SKbcZbx1Y9XmPYqjH0eGqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSRbfE%2FbtqxrkUNLIT%2FSKbcZbx1Y9XmPYqjH0eGqK%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이런 작업들 &lt;b&gt;Navigation&lt;/b&gt;에서 관리해준다.&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;popUpTo 및 popUpToInclusive&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Navigation의 Action을 사용하여 이동할때, 일반 BackStack 외에도 추가목적지를 백스택에서 Pop 할수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를들어,&lt;i&gt; 로그인 흐름등의 경우는 로그인 완료 이후, 사용자가 뒤로가기 이동시 다시 로그인 흐름으로 가져가지 않고,&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;로그인 외의 흐름이동을 가져와야한다.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;특정&amp;nbsp;&lt;b&gt;Destination(Fragment)&lt;/b&gt;에서 다른&amp;nbsp;&lt;b&gt;Destination(Fragment)&lt;/b&gt;으로 이동할때 ,&lt;/p&gt;
&lt;p&gt;&amp;lt;Action&amp;gt; 태그안에 app:popUpTo를 추가하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;app:popUpTo=&lt;b&gt;Destination(Fragment)&lt;/b&gt;을 추가하면, 특정&amp;nbsp;&lt;b&gt;Destination(Fragment)&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로 Pop하도록 Navigation에서 처리한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;app:popUpToInclusive=&quot;true&quot; 추가시, &lt;span style=&quot;color: #333333;&quot;&gt;app:popUpTo에&amp;nbsp;&lt;/span&gt;지정된&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Destination(Fragment)&lt;/b&gt;이 백스택에서도 제거된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crXjnl/btqxqXS1qmk/leujKk4diXwHXxvjIEBL81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crXjnl/btqxqXS1qmk/leujKk4diXwHXxvjIEBL81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crXjnl/btqxqXS1qmk/leujKk4diXwHXxvjIEBL81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrXjnl%2FbtqxqXS1qmk%2FleujKk4diXwHXxvjIEBL81%2Fimg.png&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;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1565723070900&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;action android:id=&quot;@+id/next_action&quot;
        app:popUpTo=&quot;@id/login1&quot;
        app:popUpToInclusive=&quot;true&quot;
        app:destination=&quot;@id/home&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;login2에서 위의 Action을 실행되면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Home&amp;nbsp;&lt;b&gt;Destination(Fragment)&lt;/b&gt;으로 이동하고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;app:popUpTo=&quot;@id/login1&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;@id/login1&lt;/span&gt;까지의 백스택(login2)이 사라진다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;:popUpToInclusive=&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;&quot;true&quot;&lt;/b&gt; 이기 때문에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;@id/login1의 백스택도 함께 Pop되어&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;결과적으로 백스택에서&lt;b&gt; login1,login2&lt;/b&gt;가 같이 사라진다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;만약 해당옵션을 사용하지 않았다면, Home화면에서 Pop or Back 버튼시 Login2화면이 떳을것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이렇게 BackStack을 간단한 옵션을 통해 관리할수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Custom BackPressed&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;BackButton에 대한 커스텀또한 지원해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1565979669310&quot; class=&quot;kotlin&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; 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-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback will only be called when MyFragment is at least Started.
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Back 버튼 관리를 위한 Custom BackPressed callback을 지원한다!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;샘플 코드 &lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;해당 예제 코드는 아래 깃허브에 구현하였습니다.&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;(네비게이션 외에도 클린아키텍쳐 스터디를 위해 오픈소스를 진행하고 있습니다. 많은 Star 와 많은 PR,Issue 참여해주세요! )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/namjackson/Clean-Architecture-App&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1565713088592&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/namjackson/Clean-Architecture-App&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://github.com/namjackson/Clean-Architecture-App&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b0QLBX/hyCpApLJ5X/NoH9rIgVUK8HHFgYp5TgIK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Sample app for studying the Android clean architecture. - namjackson/Clean-Architecture-App&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;다음글&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-1. Navigation 소개, 구성 및 개요, BackStack 관리 ( 현재글 )&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/32&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-2. SafeArgs &amp;amp; Deeplink &amp;amp; Action ( 다음 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/33&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-3. NavigationUI &amp;amp; Animation/Transition ( 다음 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;a href=&quot;https://namjackson.tistory.com/34&quot;&gt;AAC&amp;nbsp;Navigation&amp;nbsp;Component&amp;nbsp;-4. Navigation Upgrade (ViewModel with NavGraph Scope &amp;amp; Modularizing(Nested NavGraph) &amp;amp; Multiple-Start-Destination ) &amp;amp; 나의 후기, 장단점( 다음 글 )&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;참고링크&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@fornewid/navigation-%ED%9B%91%EC%96%B4%EB%B3%B4%EA%B8%B0-82d23fbc85af&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/@fornewid/navigation-%ED%9B%91%EC%96%B4%EB%B3%B4%EA%B8%B0-82d23fbc85af&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/guide/navigation/navigation-getting-started&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.android.com/guide/navigation/navigation-getting-started&lt;/a&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <category>AAC</category>
      <category>AAC Navigation</category>
      <category>android</category>
      <category>android navigation</category>
      <category>Jetpack</category>
      <category>Navigation</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/28</guid>
      <comments>https://namjackson.tistory.com/28#entry28comment</comments>
      <pubDate>Sun, 31 Mar 2019 18:20:00 +0900</pubDate>
    </item>
    <item>
      <title>[날씨 API 사용하기]OpenWeatherMap을 이용한 날씨 API를 사용해보자!</title>
      <link>https://namjackson.tistory.com/27</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&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;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;오픈API란?&lt;/span&gt;&lt;/b&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;br /&gt;&lt;/p&gt;
&lt;p&gt;해당 데이터들을 쉽게 사용할수 있도록 간단하고 쉽게 제공해주는것을 오픈API라고 한다! &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: 14pt;&quot;&gt;이번에 사용한 API 는 날씨정보 API입니다 !&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;날씨를 제공해주는 API는 꽤 있으니, &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이 OpenWeatherMap API가 마음에 들지않으면, &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;다른 API도 많으니 찾아보는것도 좋다!&lt;/p&gt;
&lt;p&gt;( API를 선택한 이유는 해외날씨를 가져와야하기 때문이다!)&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: 36pt;&quot;&gt;OpenWeatherMap&lt;/span&gt; &lt;span style=&quot;font-size: 12pt;&quot;&gt;를 이용한 날씨정보를 가져오는 API를 소개해드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://openweathermap.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://openweathermap.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 이 날씨 API는 완전 무료는 아니고, 부분적 무료입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자세한 가격정보는 아래 링크에 있습니다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;( 사실 전 많은 사용을 하지않을 것이라서 무료를 사용하긴 하는데, 필요에 따라서는 유료나 다른 API를 사용하셔야합니다 )&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://home.openweathermap.org/api_keys&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://home.openweathermap.org/api_keys&lt;/a&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;/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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9934534F5AA3D49112&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9934534F5AA3D49112&quot; width=&quot;820&quot; height=&quot;581&quot; filename=&quot;pirce.PNG&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;사용방법은 간단합니다.&lt;/p&gt;
&lt;p&gt;1. 해당 사이트에 가입을 합니다.&lt;/p&gt;
&lt;p&gt;2. API Key를 발급받습니다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;3. API를 사용합니다.&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: 12pt;&quot;&gt;1. 해당 사이트를 가입합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;gt;이메일정보만 입력하면, 가입이 완료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&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;2. 로그인 후, API Key를 발급받습니다. &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;&amp;nbsp;&amp;gt;아래의 API Key 탭으로 가시면, API가 기본적으로 하나 생성되어 있습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;gt; 아래의 API Key를 복사합니다! .&amp;nbsp;&lt;/span&gt;&lt;/b&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9907DD375AA3D4C413&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9907DD375AA3D4C413&quot; width=&quot;820&quot; height=&quot;412&quot; filename=&quot;api키.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&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;3. API 를 사용합니다. &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;gt; 먼저 필요한 API 종류를 알아보고, 선택합니다. &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;gt; 여러종류의 API를 제공하고 있습니다,,, &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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 style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&amp;gt; 위 사진의 원하는 API의 [API doc]을 눌러 상세한 API 사용법을 확인합니다 !! &lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://openweathermap.org/api&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&amp;gt; ( 저는 기본적은 Current Weather data를 사용하였습니다.)&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&amp;gt; 여러종류의 호출법 ( 우편번호로 날씨 받기, 위도/경도로 받기, 도시이름으로 받기, 도시ID로 받기 등등 이 존재합니다. &lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&amp;gt; 사용법에 appid = 나의apiKey를 추가하여 호출합니다. &lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;( ex&amp;gt; http://api.openweathermap.org/data/2.5/weather?q=Seoul&amp;amp;appid=나의 API Key )&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;Json 형태의 Data가 오는 것을 알수 있습니다. !&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;자 이제, 간단하게 JavaScript, JQUERY를 사용하여, 몇몇 도시들의 현재 날씨정보를 받아와봅시다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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;pre class=&quot;brush:js&quot;&gt;var apiURI = &quot;http://api.openweathermap.org/data/2.5/weather?q=&quot;+city+&quot;&amp;amp;appid=&quot;+&quot;내APIKEY&quot;;
		$.ajax({
		    url: apiURI,
		    dataType: &quot;json&quot;,
		    type: &quot;GET&quot;,
		    async: &quot;false&quot;,
		    success: function(resp) {
		    	console.log(resp);
		    	console.log(&quot;현재온도 : &quot;+ (resp.main.temp- 273.15) );
		    	console.log(&quot;현재습도 : &quot;+ resp.main.humidity);
		    	console.log(&quot;날씨 : &quot;+ resp.weather[0].main );
		    	console.log(&quot;상세날씨설명 : &quot;+ resp.weather[0].description );
		    	console.log(&quot;날씨 이미지 : &quot;+ resp.weather[0].icon );
		    	console.log(&quot;바람   : &quot;+ resp.wind.speed );
		    	console.log(&quot;나라   : &quot;+ resp.sys.country );
		    	console.log(&quot;도시이름  : &quot;+ resp.name );
		    	console.log(&quot;구름  : &quot;+ (resp.clouds.all) +&quot;%&quot; ); 		    	
		    }
		})
	}
&lt;/pre&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;현재온도는 섭씨온도를 만들기위해 273을 뺍니다!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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;pre class=&quot;brush:js&quot;&gt;&lt;p&gt;var imgURL = &quot;http://openweathermap.org/img/w/&quot; + resp.weather[0].icon + &quot;.png&quot;;
 $(&quot;html컴포넌트&quot;).attr(&quot;src&quot;, imgURL);
&lt;/p&gt;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;위처럼 사용하시면됩니다. &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;( 단 , 제공해주는 이미지크기가 작고 이쁘지 않은 관계로 저는 다른 이미지를 사용했습니다. &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://erikflowers.github.io/weather-icons/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;참고 : https://erikflowers.github.io/weather-icons/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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 style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;ajax를 사용하여, 간단하게 도시의 날씨 정보를 받아오게됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;이날씨 API를 활용하여, 아래의 웹페이지를 만듭니다!&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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 style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996A4E355AA3DC2004&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996A4E355AA3DC2004&quot; width=&quot;820&quot; height=&quot;339&quot; filename=&quot;날씨정보화면.PNG&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&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;br /&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: 12pt;&quot;&gt;대부분의 API는 사용하기 쉽게 만들어져있고, &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;샘플도 많기 때문에, 어렵지 않습니다. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;날씨데이터를 활용하여 개발해보세요! &lt;/span&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;</description>
      <category>개발일지</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/27</guid>
      <comments>https://namjackson.tistory.com/27#entry27comment</comments>
      <pubDate>Sat, 10 Mar 2018 22:26:47 +0900</pubDate>
    </item>
    <item>
      <title>[Android SSL]Retrofit2로 SSL을 이용한 HTTPS 통신하기 ( Okhttp3 )</title>
      <link>https://namjackson.tistory.com/26</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;Android Retrofit2에서 SSL을 사용하여, HTTPS 통신을 진행해보자! &lt;/span&gt;&lt;/b&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;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;SSL&lt;/span&gt;&lt;/b&gt;을 구현하기전에 &lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; HTTPS란?&amp;nbsp; SSL이란? SSL인증서란? 암호화 통신방법은? HandShake란 뭘까?&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;등의 내용은 간략하게 아래 글(링크)에 소개해놨다.&lt;/p&gt;
&lt;p&gt; (&amp;nbsp; 무작정 SSL 을 구현하기보다, 약간의 이해와 함께하면 좋을것 같으니,&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;SSL 인증서발급이나 Tomcat의 SSL 설정이 필요한 서버단 개발자가 아니라도 아래의 글을 읽어보자!&lt;/p&gt;
&lt;p&gt;&lt;strike&gt;사실 방문자수를 늘리려는 음흉한 목적이...&amp;nbsp;&lt;/strike&gt;&amp;nbsp; )&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://namjackson.tistory.com/24&quot; target=&quot;_blank&quot;&gt;2018/01/31 - [개발일지] - [SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://namjackson.tistory.com/25&quot; target=&quot;_blank&quot;&gt;2018/02/06 - [개발일지] - [SSL]HTTPS 통신을 위한 Tomcat SSL 설정하기&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;자 그럼 이제, Retrofit2란 무엇일까? &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;안타깝게도 아직 Retrofit2에 대한 글을 작성하지 않았기때문에&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;(추후 Retrofit 소개 및 사용에 대한 글을 쓰겟습니당)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;간단하게 소개를 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Android에 관심이 많은 개발자라면 Retrofit 라이브러리를 모르진 않을것이다.&lt;/p&gt;
&lt;p&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;br /&gt;&lt;/p&gt;
&lt;p&gt;이런 통신기능을 더쉽게 사용하기위해 여러 종류의 라이브러리들이 존재한다.&lt;/p&gt;
&lt;p&gt;대표적으로 Android SDK에서 공식으로 지원했던 HttpUrlConnection (현재는 Deprecated된..) , 구글의 Volley , &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Square의 OKHttp , Retrofit 등이 있다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 HttpUrlConnection는 Deprecated되었고, &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그에따라서 HttpUrlConnection를 사용하던 Volley도 내부적으로는 OKHttp를 많이 사용한다.&lt;/p&gt;
&lt;p&gt;Retrofit은 Okhttp를 더 쉽게 사용할수있게하는 라이브러리다 .&lt;/p&gt;
&lt;p&gt;( OKHTTP의 래퍼클래스라고 생각하면된다. 내부적으로는 OKHTTP를 사용한다.  ) &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Retrofit의 장점으로는 &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1. 구현하기 쉬운편이다.&lt;/p&gt;
&lt;p&gt;2. 모듈화되어 재사용및 유지보수에 용이하다.&lt;/p&gt;
&lt;p&gt;3. 인터페이스 정의로 가독성이 좋다.&lt;/p&gt;
&lt;p&gt;4. 성능이 좋은편이다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;이쯤되면 Retrofit을 사용하지 않을 이유가 없다! &lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;이글이 Retrofit2 소개와 사용법에 대한 글이 아니기때문에 소개는 여기까지하겠다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;필요시 다른 Retrofit2글을 참조해보자&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Android Retrofit2에서 SSL을 사용하여 Https 통신을 구현해보자&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;오늘 구현할 방법은 2가지이다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1. 인증서없이 Https사이트를 우회접속 통신 구현하기.&lt;br /&gt;&lt;/p&gt;2. 정상적으로 SSL 인증서를 가지고 SSL을 이용한 HTTPS통신을 구현하기/&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;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;1. 인증서없이 Https사이트를 우회접속 통신 구현하기.&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이 방법은 Android App내에 인증서를 가지고 있지않을때 임시적으로 사용하는방법이다.&lt;/p&gt;
&lt;p&gt;사실상 SSL이 적용되지 않는 통신을 한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래의 스크린샷처럼,&amp;nbsp; 인증서 없이도, SSL에 적용된 웹사이트에 접근이 가능하다 . &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;( 이 웹사이트를 계속 탐색합니다. (권장하지 않음)).&lt;/b&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: 763px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9995C4505A8029B820&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9995C4505A8029B820&quot; width=&quot;763&quot; height=&quot;326&quot; filename=&quot;인증되지않음.png&quot; filemime=&quot;image/png&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;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;먼저 Retrofit2에서 OkHTTP3를 사용하기때문에 &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;SSL 우회접속이 가능한 OkhttpClient를 만들어줍니다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;   // 안전하지 않음으로 HTTPS를 통과합니다.
    public static OkHttpClient.Builder getUnsafeOkHttpClient() {
        try {
            final TrustManager[] trustAllCerts = new TrustManager[] {
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };

            final SSLContext sslContext = SSLContext.getInstance(&quot;SSL&quot;);
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory, (X509TrustManager)trustAllCerts[0]);
            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
            return builder;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;선언 후 , Retrofit2를&amp;nbsp; 생성해줄때, 아래와같이 해당 OkhttpClinet를 선언해주면 된다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public static Retrofit createRetrofit(Context context) {
        return new Retrofit.Builder()
                .baseUrl(SERVER_URL)
                .client(getUnsafeOkHttpClient().build())
                .build();
    }
&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;p&gt;두번째 방법은 인증서로 &lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;2. 정상적으로 SSL 인증서를 가지고 SSL을 이용한 HTTPS 통신 구현하기&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;먼저 서버와 같은 SSL 인증서가 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;res 디렉토리 아래에 raw라는 디렉토리를 만들고 &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;확장자가 crt인 인증서를 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALkAAAAxCAIAAAAJLJ++AAADMklEQVR4nO2bQYujMBTH87X8InvdPSz5OPkmtYeWsCMdGLZl2EOhlDmUZmeYk6dhGPDmyT2oaYxp+9Rajfv/IUNxzIslP15i82TZFJA8EGpEcXy/Bzds6Bu4CXDlHsCVPuL4fg9upuEKuAdwBVCBK4AKXAFU4AqgAlcAFbgCqNzDlfDhyTz2h7936BTcnAFcCR+eti+HO/QLbgvVleVyOXOxWCyutq27cu7o9l1Av1BdiePY6Uocx1fbwpVp0GAOiqLIEiWKIkpD04bH5+3j85bkihJBIARnjHGZZZnkjDHGWL5bInl+Nv9Y7qAoEYx1M2UCNHAlSZIwDLUoYRgmSUJpqFU4vL7nZw6v7yRXmBZCCZF/Ks3QW2xK8KA0ZLz7blOg2dp2s9loV9brNbGVVuHj8ys/8/H5RXOlVMWg8KFMIUpwoSQvUg9U6ZFmrqRpOp/P86SSpimxVfu8Yg59OQeVs5ASAZeOv6AvGj8z73a72Wy23+/pTbqsVwpXKssTPeEwLo2MIqFKv7T5fWW1WjW6vuVzkOHK6aMSgV7JSh6YK5UAqvTLML/FNc4rxlOQ4Ga2MWxiWKz0C/aDABW4AqjAFUAFrgAqcAVQgSuAClwBVOAKoOKTKy/HtyzLfv3+Yx1D39f/gjeuvBzfci3gylD44UouClwZFg9c0aI0ccXYmG6JjtA91ETwwBULf1xpUdE56iJQD1ypywFXBsEbV77/+Fk/SK4oEZQVdcaY67NGibdRdWe5Iuyr3WGLGIE4mv+2R7/a9akE/Rs/22QUeONK27zirHExql2Kou9a7XclAjMqrc6H1S2UlEUv9TGvdW2VoCOvdKFTXqlOIEVF7sURKWs0nXNQ2dIZ1p6sXN3Uz1VK0OFKNzrllWppfzEUzhWIXft9xRVH2HJ2ufS2Ur3rylVwpRu95BVrwBy1383zih3sTF6BK/1x0/VKsaA45X0lhHTWfl90xRVWL3nMi2r5y+7a0mPMP+Z440o9nVCfmU9PJK7XjU4vkFi135ddcYa1H6WKE4E4VkrHq5c5X4MaZXLxxpWGeQXcHrgCqHjgChgJcAVQgSuAClwBVOAKoPIPh/ddF6Vmuy0AAAAASUVORK5CYIIA&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;그리고 아래의 코드처럼 R.raw.localhost를 가지고와서 작업을한다.&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt; /**
     * localhost라는 인증서 정보로 ssl 연결을시도합니다.
     * @param context
     * @return
     */
    public static SSLSocketFactory getPinnedCertSslSocketFactory(Context context) {
        try {
            CertificateFactory cf = CertificateFactory.getInstance(&quot;X.509&quot;);
            InputStream caInput = context.getResources().openRawResource(R.raw.localhost);
            Certificate ca = null;
            try {
                ca = cf.generateCertificate(caInput);
                System.out.println(&quot;ca=&quot; + ((X509Certificate) ca).getSubjectDN());
            } catch (CertificateException e) {
                e.printStackTrace();
            } finally {
                caInput.close();
            }

            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            if (ca == null) {
                return null;
            }
            keyStore.setCertificateEntry(&quot;ca&quot;, ca);

            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keyStore);

            SSLContext sslContext= SSLContext.getInstance(&quot;TLS&quot;);
            sslContext.init(null, tmf.getTrustManagers(), null);

            return sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;마찬가지로 위의 메소드 선언 후 ,&lt;/p&gt;
&lt;p&gt; Retrofit2를&amp;nbsp; 생성해줄때, 아래와같이 해당 OkhttpClinet를 선언해주면 된다. &lt;/p&gt;

&lt;pre class=&quot;brush:java&quot;&gt;public static Retrofit createRetrofit(Context context) {
        return new Retrofit.Builder()
                .baseUrl(SERVER_URL)
                .client(
                        new OkHttpClient.Builder()
                        .sslSocketFactory(SSLUtil.getPinnedCertSslSocketFactory(context))   //ssl 
                        .hostnameVerifier(new NullHostNameVerifier())                       //ssl HostName Pass
                        .build())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                  // Rxandroid 
                .addConverterFactory(GsonConverterFactory.create())                         // JSON
                .build();
    }
&lt;/pre&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;SSL 적용이 끝났다! 테스트를 진행해보자 !! &lt;/span&gt;&lt;/b&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;br /&gt;&lt;/p&gt;

&lt;pre class=&quot;brush:java&quot;&gt; .hostnameVerifier(new NullHostNameVerifier())  
&lt;/pre&gt;
&lt;p&gt;의 경우는 SSL인증서가 테스트용이기때문에 추가해주었다.&lt;/p&gt;
&lt;p&gt;( SSL의 인증서의 경우 도메인값이 필수기 때문에, 해당 도메인별 SSL인증서가 필요하지만&lt;/p&gt;
&lt;p&gt;&amp;nbsp;나는 테스트용 SSL인증서를 발급받았기때문에 도메인이름 검증을 생략하기위함이다.&lt;/p&gt;
&lt;p&gt; 궁금하다면, 아래 링크 참조! &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://namjackson.tistory.com/24&quot; target=&quot;_blank&quot;&gt;2018/01/31 - [개발일지] - [SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL)&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;정식 SSL 인증서일 경우에는 생략하는게 좋다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;＊필요시 아래의&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#ffffff;color:#000000;font-family:'Consolas';font-size:11.3pt;&quot;&gt;&lt;p&gt;&lt;span style=&quot;background-color:#e4e4ff;&quot;&gt;javax&lt;/span&gt;.net.ssl.HostnameVerifier &lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;를 상속받은 커스텀 클래스를 선언한뒤 사용하면된다.&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class NullHostNameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}
&lt;/pre&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://github.com/namjackson/MyUtility/tree/master/app/src/main/java/com/namjackson/util/myutility/http&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/namjackson/MyUtility/tree/master/app/src/main/java/com/namjackson/util/myutility/http&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;혹시 도움이되셧다면! &lt;img src=&quot;//i1.daumcdn.net/deco/contents/emoticon/per_14.gif?v=2&quot; class=&quot;txc-emo&quot; border=&quot;0&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none; line-height: 0.8;&quot;&gt;해당링크의 &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAA9CAIAAADkjUodAAAFbUlEQVR4nO3a/08TZxwHcP6Y++WB5BJnfyH7QZy6ZZmZJgumfiER04i4uYVlMEUThyYO8MsSDUM3CIuMIWU68YfNJRsG11La3pUWHa0yaI0WYRBon/vyPHdH0v1QgVKhfXopOy/3NO88+dxxn+vnXvSH++EpUbUlGkNSYvgElg2lp/TWC6Wn9NYLpaf01gulp/TWC6Wn9NYLpaf01gulp/TWC6U3jv7lzCzhpfHpmbHH4/xoyNQJjT0qbsbDEX2GJZNTUySd8emZJxP/LCahomqqtqSomqItma7mR0OpYn8QwvoMSxDC4+FI3rbQ4/GFxaSS8TBmXLlNoE/r6zAsSaVSobFHedu4QBCrmqJqpl65QHAz6PUZUvo3nt4fCGJFw6qGFBWrmklrv6H0WYYF0CNFw8qrNpPWft5g+sx5iOn5IFJUpKgIq0jRTFr7+VEj6dcaFkqvyauPRFQPuTwP3SP6eoteG/yrX2tISu/jRmWs6oj90OH9VdX6eoseH2fkrz7LcHPph1weBrAMYIdcHsPdTUwvIUXCqoQUGauEtf3Q4TS9vaq60N7NqL1G02fOs1n0Qy5Pr/N22j2d3v476d/++r0LT/qbP3u3nGUAy5TvafcpElalpwOfHmjoj/3v9DDYcfydMsCWba/6+uGcwfReLiAiRUJKjvXs+Qv2qupM7o1ir6o+e/5CRu/8vTob4+jkXyoiUhbCAwOPFAkpoqeVAbXdsTzfS756uQAB45zzKFvR7E0upZLuSxWgqvtZceizDItJLyGlrqGRhP7zhsa1vdw5wB7oia65m6d1tcXhjCGBv9nwUYWNAWxZRW07L4hIkRB3DrDVzZ31e22MwxkrCn34uwqwr3vy1UHbTvbDHyeNpB/hAqKMRaQIMhaRkqO+0flDbvcbHV2v9cLhK3uYrZX1fWPTQsb54RYG1HZH09fE7/cMPklgUYx219iYHe2cjEXENQGWeb91cJZothEC+uT9kwy4NLyUPppzHmWZi/lfSXUYFkAvZLTlXnv6ft7I/ae+2+t3ifP+W2d2b2WZ8oOnf4kK69CvrrFbtQxodS/T7+6KEM5GQv/vnY8ZcGn5uiLTCzroPX5ekDF5NqLP05iY+vPqkS3AduLenCDjFfr0X2MPuk8fr9y9d3spYBnQ4paxIPubAHv4VpxwKo+fN5A+y7BgeiitNm9UDz50b0T/4C93vvvA375kmZqBmIyhe5V+fvB8KTjY/GBqehaGe2vXpc87Gwl9KnitDDicL9IH4badrONO/pccHYYF0EMJQQlDCUEZ566vf9+1Yl1Xf6qu/tTK4fWOrvV6fR2XXeE5BCUMo7827mB3tYehhOHot9uArWkIQQlH+48x4MzdGQTh1M0aGwNaXBKC0it6wtk8PgL6pXDbB+x7F5ffcLae/H0hf5MOw4LoccZj5Kodxz5Jo0cmounzkYlo+h/gqD2xXu9k3xdHdpWzDGBLt1UeveqKQgwlDOHk3cbKUsAyNQPRuWBbzfZSwG7Z19Jx+QgDWlwSzqAnmo2IPpVKvfjjK/vbDGDfsl9wPsUkHToMiel9fFJCUEJJEUEJ565br1yNTERfPx+emLr4zTXy+xS9JqUv/KPDsBB6ESVXHsOc9bDh9BnzkNIPe/mEiJIiSohyUkQmrYe9RtJnGeqgN/H6xtCjAujdXj4hyAkRmXp1G0qfZVgA/aIgJ0Rk6tVw+sx5SOldI9yiIJs9rhHOQPosQ9LdZ75AKD47b7jdm0mvz5B0z+Wz5/Hg3xGz628GPfmeyyzDAnYaP3se9wVCrhHO1DF2p3GmId1fb1goPaW3Xig9pbdeKD2lt14oPaW3Xig9pbdeKD2lt17+A59AnvP7fqCMAAAAAElFTkSuQmCCAA==&quot; alt=&quot;&quot;&gt;를 눌러주세요! &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;GitHub의 Star를 남겨주세요 &lt;img src=&quot;http://i1.daumcdn.net/deco/contents/emoticon/per_13.gif?v=2&quot; class=&quot;txc-emo&quot; border=&quot;0&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;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;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;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;br /&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/26</guid>
      <comments>https://namjackson.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 12 Feb 2018 21:26:24 +0900</pubDate>
    </item>
    <item>
      <title>[SSL]HTTPS 통신을 위한 Tomcat SSL 설정하기</title>
      <link>https://namjackson.tistory.com/25</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;HTTPS 및 SSL 암호화 통신을 위해 Tomcat 설정을 해보자&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;일단&lt;b&gt; HTTPS, SSL&lt;/b&gt;을 &lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;왜&lt;/span&gt;&lt;/b&gt; 사용할까? &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;링크를 통해 어떠한 사이트에 접속하게된다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이 사이트가 아무 문제가 없는 사이트라면,&amp;nbsp; 상관이없지만, &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;개인정보를 뻇는 사이트인지,&lt;span style=&quot;font-family: 맑은 고딕, sans-serif;&quot;&gt; 해킹당하고 있는사이트인지 ,해킹 위험이 있는&lt;/span&gt; 사이트인지 우리는 알수가 없다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이 웹사이트가 어떤 사이트인지, 누가 만든사이트인지, 통신이 안전한지 등의 정보알아야 하기때문에 HTTPS 통신을한다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt; HTTPS/ SSL 통신을 하면 ,&amp;nbsp; 인증기관( CA )에서 해당 사이트가 누구의 소유인가, 누가만든것인가등의 정보를 &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;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&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;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;먼저, HTTPS / SSL 암호화 통신 방법에 대해 알아보자! &lt;/span&gt;&lt;/b&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: 14pt;&quot;&gt;1. &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;서버측에서는 서버에 대한 정보와 인증등이 담긴 인증서와, 공개키 (비대칭키)를 인증기관( CA : 공인, 사설 이 존재한다 )에 등록한다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;i&gt;※ 비대칭키 = 공개키, 개인키가 존재한다. 공개키로 암호화를 하고, 개인키로 복호화한다. &lt;br /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; 개인키가 분실되지 않는 한, 안전하지만, 리소스를 많이 잡아먹는다.&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; 주로 개인키는 서버측에서 관리하고, 공개키는 인증기관에 등록하며 이런한 키는 웹브라우저 보안기능내에 내장되어있다. &lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2.&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;font-size: 12pt;&quot;&gt;클라이언트가 등록되어있는 공개키(비대칭키)로 공통키( 대칭키)를 암호화 하여 서버측에 전송한다. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;i&gt;※ 대칭키 (공통키) = 암호화와 복호화에 사용하는 키가 같다. 비대칭키에 비해 리소스를 덜 잡아먹지만, 해당 키를 분실하게 되면 면 보안에 매우 취약해진다. &lt;br /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;i&gt;&amp;gt;&amp;gt; 중간에 누군가 가로채더라도, 공통키는 공개키(비대칭키)로 암호화되어 있기때문에 안전하다. &lt;br /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&lt;i&gt;( 공개키로 암호화되어있으면, 개인키로만 복호화가 가능하다.) &lt;/i&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: 14pt;&quot;&gt;3.&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;font-size: 12pt;&quot;&gt;서버측에서 클라이언트에서 전송된 암호( 공통키로 암호화된 )를 개인키( 비대칭키 )를 사용하여 복호화하여 공통키를 흭득한다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4.&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;font-size: 12pt;&quot;&gt;서버 및 클라이언트는 공통키를 사용하여 보안 통신을 한다! &lt;/span&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: 14pt;&quot;&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;핸드쉐이크( Handshake )&lt;/span&gt;&lt;/span&gt;&lt;/b&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;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;자 이제 기다리던&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt; Tomcat 서버에 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;HTTPS / SSL 을 적용&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;해보자 &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;먼저 ,HTTPS/SSL 암호화 통신을 하기위해서는 SSL 인증서가 필요하다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;SSL 인증서를 발급해주는 전문적인 기관( CA )이 있다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;많은 다양한 기관이 있다 Verisign , comodo, thawte 등 여러 유료/무료 기관이 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나는 내가 CA를 만들고 SSL 인증서를 인증을 했다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래 링크에 들어가서 따라하면 , 나만의 SSL 인증서를 발급할수 있다. ( 테스트 및 개발용 ) &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://namjackson.tistory.com/24&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2018/01/31 - [개발일지] - [SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;SSL 인증서 ( 인증서이름.crt )가 준비되었다면, OpenSSL을 통해 Tomcat에 맞는 형식으로 바꿔준다. ( OpenSSL 사용법은 위에 링크 참조 )&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 11pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;pkcs12 -export -in private&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 11pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;.crt&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 11pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;b&gt;&lt;/b&gt;(인증서이름) -inkey private.key(인증서키이름) -out .keystore -name tomcat&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;를 하면 .keystore가 생긴다. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. .keystore 파일 경로를 원하는 위치에 이동시킨다!!!&lt;/span&gt;&lt;/b&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;2. Tomcat 서버의 server.xml을 연다 .&amp;nbsp; (보통은 톰캣위치\conf 경로에 존재한다. )&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;server.xml을 열어보자! &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7cAAAN7CAIAAAARLPqbAAAgAElEQVR4nOydy7WsKhCGTcuEiKMzYGgUTp0bhQND6CA4A1ssoEBs7dfZ37fOuqsvG6niYft3WUrjvpC7bW9m2Kk0265pbk1za9pxFgc2Znq1fymD2XcYVN43dPPYNjczuMHINVPN0D/W24UL7KRL58iP/Inz6BWj9Io2AQAAdmk+7YBGjUqeTNPZWFagkp9ktt2nJMgbh24yzc0MbrbdIkmTXquLKuDqgYpdOkq9P2nNl6jkg159tk0AAIASv6qS57Ft+u/Rpajkp3mvSu7sLDobraKh35WqL1DJoUsHeY1KPgsqGQAA/ge+SSXfbXt73Fpt/PVbFG7KZqu21dRuyw7mZuxaP0rMqLqHK2quhwttsan5wdzMMJnYkPCq3KN2tObWNJ21vS+vd/5UzWQ8W3vP9f3kKKkDkh26FHGsmLh6P3XPvW+DWfuuG3Iu0mrz2MrY8yay1QV2xk/NpezEJWRq6iOvpzcccz5RtOpZXD90apsAAAAv5ntU8mD8dTFSn1uFTQdkYsnRpXQwt+ZR7XFru9Sm4lOfXphzKnk1dLetFFuRk+Kv/nOUnDqPbTvOepva4Ue6qdZMxy3X95OjpA1I1qUiYZvX5AZkc3ikS+kC8+vHd1lfYOf8zLl0MpacG/m48kHn01FSl2Lt0GX8BwAAeC1fo5KlRvE6IIguB9GyapWcaLV8mymPIFxgKB9Ljn1QJHh6i99MvvBRX6jkuE318CPdzIV4FQmi9f38KKWjnY06K6yBTxmbr/cz63w/uCjdQjO0VE/l4xaS337SKAvspJ8Zly7KuNj5MXDU+fDwzIDUD93BngIAAFzDd6vk/NNUz6vk/Se0NN82ifAjKlnv5gGVrPX9/CidUcni8LRmvZ8Rj6ai0GbOkJZL8EgsXg8pL7An/cy59CaVfND58PDcgBwbOlQyAAC8m69RyVv+wPKKty2TQb00Pq+S823uuRdJvcjP1dB283q2XXXGRVkl+zazGReV3SylC2fzTatezFczStqA1KvkKJUlrVnvZ8Bsu8b00Y+0nKFUq822a+20CD7fo+ICe8LPvEsVTxzmah5XybXOK4lPWmuHhk5zaTK8Hg4AAF7H16hk8YyRmaLr93oHVsSZEpW8vT5ZPPqT0QGZNlOPZJvBM1uPx5isyKfM3iaO75Jvt87FvXhdJWttJocf6WZeGG2VpbpVn6N6epTUATmQceEfLBNt1vuZ78DYRsfuGgrqp1pNGfmzfmouRbZKuUNaTXXk1W4+uRia4EkD7Yw7PnTpGkMlAwDAi/gilQwhv/52OQAAAIAfBpX8taCSAQAAAD4GKvlrQSUDAAAAfAxUMgAAAABADCoZAAAAACAGlQwAAAAAEINKfjF3237ny6rU1649+crh44aeZ3sv2Pb236OD/IpuXsbZfHT/zrhvXHUAAAC/w9eo5OyewJ/lzN5mzrm3qeTDO5Otb2UOeYF81A09jbo928FBvtili8mp5ENTzE51AAAAZ/kmlbyqn3lsv0Yon1bJb+KodXWz6Feo5IyhZ8nsuXiIi126GlQyAADAV/CNKnm5xj+ifWIvLnV3tMIWbvPYtqM1t6bprO31ncDWNgdzM3bbLm52Yve4aK87Yfpx+G7N3O5iBes56q3vjLbUmnLDM23rvuLIBzVj5yNDe4cfmY7H4fogB7cmQq/yfY9SOKJmh74xoy9/LDAZ2N62gK47PMNgbmZY/S8sxezydg6VDAAAcJ7vVMmr4Ljb1ms+8XnomySgqKvk5mYGN5hb046z2PnZaxQfVhzMbW1zMkLEFNVGEHnN1QzL9R7lrBepsq4y204q6cEEvx/MkPVTHXk39DnTkSHt8IMDkoklR90X0eI4Q0NxKXFeXSFu6LfdldejZFh6MOkPtp3DVWqXYmZ565UBAADgKF+tkiNJpEmT7Y+6Su4HX/8hI4K4qY+8Koc753S1oadQV6nkfI9U65mBOmA904IUjvJ/46FL/VQC1Y9IZypeY4WqHH50QM6q5CStWXFeXyG6tPXx482xI4dr1C5FfXlnKgMAAMBRvlMlP67xL1HJ6uNfB1SysH48lnxaJR+1rjURybXTKnlrJ5SbiS58m0qWeR27kePEeX2FZI6927azswxRHzpcAZUMAADwFXyjSh76NUqq346fbadmXIi/FlSyTDAIDtdl2ZZsuv1Vph3naz6ozLioU8mHrWstRBouGtjDIx81JToSi0Xt8IMDUqWSFdPF8tiQukJyMne2XWsn2fKhwx8CPQyEVy1FVDIAAMBL+SaV7G9SR7fIlaDg9tJcrxTn7WEva0oqObwn/rCV16lb5fiZPG8oU1M6KR6uUnp0IOOi2nr28FRM+6Ezk/CkduSDbsqH1XK/GeJ0kSMDkqhkfZDlM47yOb/EJd15bYXUy9xjhy+DX6OSoynOLO/MqgMAAICDfI1Khjfwtt00PrttR/jAn3gS9EteLwgAAAA/ACoZ/jsClaznPwAAAACUQSXD/0eQdfDF2+wBAADA94JKBgAAAACIQSUDAAAAAMSgkgEAAAAAYlDJAAAAAAAxqGQAAAAAgJiXq+RwSzAAAAAAgB/gHbHkoQ+30wMAAAAA+G7elHExj23DzmcAAAAA8CM8q5Ino+zaoBYGh7T2/ryvAAAAAADvgVgyAAAAAEAMeckAAAAAADG84wIAAAAAIIb3JQMAAAAAxKCSAQAAAABiUMkAAAAAADGoZAAAAACAGFQyAAAAAEAMKhkAAAAAIAaVfBy7DlvjnP1aQ1Pf9NMlbsxjd1VTKm8bz1fw084DAABAnmdV8t12t+a2/Ov/jz317mNb15VhHbZWCKOlcPln1sJZFM7FwlY7XDVUyyGVXOz7q1Wy2s05GZDBuVYc1To3ZAqtOLZZ9esQljjN0DICZv3g3TPr4TY0lHMeAAAAfp8DKnm2rln0yt12t3a8v8ilT3FEJS/KrBVySg6kl79eeM2iglrYhsqsYKiWn1LJUTfn8CdEVM2JymqhR06KrGnz0zE7Z0K961VyK1qQKjmZo9m6FsUMAADw49Sq5MG4pl11S04liwCzV1VT3/SjLzfTosg664+e+qZbNuerOzxDUHFrfh67JOQ9mVtvfXk/hZHxW3O7rR4dwIcSvWxKZdmQKXTP6WCB6Oba96lv+mnolcLtkGLfRZu34Cg5nom8HvpbO95z01HbnRerZLfOlxWRe7fqY5tXybZ2voLzBQAAAH6QKpVsmjg2dh/bRP4M/aZiH1rJOTf1qUbb/iqOqj9cZeq9ip7HbpF6/oMLPk/m5u1Pxou8RPDNrm1cI/6ZspA1Yb6EV2DGuVYosLTQhRkXx7WV6IU2IEO/ylxFJet9d1Pvf1f4mtp4TmaZn0fLd9vdzKRbPzSey08IqWujlIn0V4c7opLNOhdyYVsxTf7wYRXH7RppTg1pzNY1zanfPgAAAPBB9lTy7Nq8mgm0chyT3GRuKm19/HhTZ0cO15AVH62uim2tsUpJTVO6AxkXKm0of90quYwot5lCiT2UBbO6vgxeEGpXBXG1SpY/ZGTUORnPu+06e3dD37Xd9r9ZQweRWvnaWHJBJQ/hf61QycuBc3Xsf3BN4ywhZQAAgB+kNpbcmNwf11DhGlSM0GXuQ0zNYyeCuvWHK7xAJdfHPudwIH2YM33eK/cQWNTUc7pqya94dPlNKnm5B3C3/TiMnZnWsdUMHY3Newph4zMZF0Mm42JYP8zit41MpDHEkgEAAP5/nspLlmw5ytt9fUlG5s5j147TI/C4WDhyeIqouN3iz2ZcqDHjjFCvQEpb+dl/GMRIq4UeE4q5w56UBXEQxJfjHfd9Gy5RUx3Peezavjfj3d1H0/ftUuGiWLIT46nK3HTkJTmVbNY/qRM3hHcGbCLHW/KSAQAA/n+eesfFZOTTXpsCklkTu8nEk7lFsvjQ4Ulzvfrs3fr4mizMqWTxaNrxp/dsmC/7aPD4m+CekciPzJfwIUVdp963J+rGYGiTvvua/RD9AomGaEsdv9tuLwG6jigFOXqbxILXqVYbz4VIJTfaIA/J4bOI96uPXQ7hLCfwjgsAAID/gP9mV5HrNtEAAAAAgD8PKhkAAAAAIAaVDAAAAAAQ89+oZAAAAACAy0AlAwAAAADEoJIBAAAAAGI+p5LFa8N+C/8evOc36vsgfm+/Jtn27/v5wt90Jnn938K887Y4OMb/N57f1qMnvhlm17JvDgD817xcd9zHVn/5cK1KPrkpxYs4t511xNCLN0Rf2rJia53zFpVcpHIP6lzlt2mgQ35efni5teHcFjmSM+NpP7rUc9bre3TtHOU4/s3Ae8EB4L/nJbpj23+koJKrG/sTKrnt1r26X6+SF+HynkvvtfyQSn4bX6WS1R2/P853quR63qaSD34zmMbZ9asdxQwA/yXX645ob15VJfuN8nJ778nNkcW/h5CUNcWmcGZc628WlZpu6pt+9OWmrMDFPoPS2VjLyu0It/JtQzux/3NaOPS3dpxs1w9By2mbd9t1duyb260dRyNsiTafUdhyO0B/uAm3tVuIdsUrXBeN1mYj2rTFmlG5P3xIDledr/EqZ92GffR78uX8dImwUNMwDvU9RXZT7gtY6Wc6m7nDm9Biwfmck7LLcjvDmgWWdjM3nmqbqp+qTlUPV5e3WljfI9X6bo/KU1zf93o/jzJsoZBHAbuyA8B/x9PfkTqmiSMK+VhyHCTOvPE4jSUP/SZth/4hnYfeK8TJrNpXrSm2VN57zfLWUkw+4iv8VbfCVgoX1+axM5Pe8trmmqXy6MHddp29h52Y+uU3wuzaxjXin8mJsDm5+nqx5W+Xm/US6/9afzM9ElsmMaTWNGFUMjp8CNuUFQpXabVN1borRtTm5LxRK7eJSk6dL7QZYTL+VPqpzqZ6eE4lFyZO9UeuEHWOVJdy3YxczS1adZBTnVo4PF3eucLKHhViyemPq8opVq3Xnx25xXAE226BZM9sXUOmMgD8R1ynkmfXalKsXiU/Isc5hbjV28LDIsAsBPHddstnvWb9BiSr4lRItOzQC1OP5h/2Q52tFK4CfjLdOIuWkzbXnj0ce6hkEUiOIulVpHfJC3qlXiVHETh/uEfKKbVm2otUwM3hsWUBp/5Vte40aZKrqVZOC1X1WWgzwgoZVDattvmEAotUcuGQyE+zWkzDrnKOVJdy3Yzs5hat6nyqUwuH16jkoz2qVMmVU5yzXn92PKuMN4Z82HhwTaMIaACAX+T6WHJ0G65eJT+YTJq1EFSbjEhf8GgqWa/5CpUsaqqx7zSzQxbKgLgZ15aVNnWVvEXJBfWx5EMq2SRX3BxRrM4XetpEmkQ1a1TyoefDcm2m1l1GPqo11cppYU595tpUGRIhVenn21SyP2r3B1VBq6XddG9RyeryTgsP9aheJbu18fIU56zXnx2nVfJg9O8TYskA8J9xsUp2dXnJzrnSY3le5jrnFK069MrLMTSVrNesV8n3sa3LuJjHbvVxMnG69VohX7jJ3PvYdt3SstamrpLd1J95LV0h4yIO6+cl6XJpV2+IG01s+ZvCuZptJuNCtu8L1b4PyZ/SNnPWXfLkWaGme1YlF9pMnY88OepnThilD9j5w9vixBX8bMN7+i7Tl7JWK/8UKaRMpIdXZlyoyzu35ut7dFQlu70pzlmvPztOquTZtVogmbxkAPj/uF4lOxe/4+IW5yLEKQJpYSbFQnl6TzwBl6pktWa9So7cXw6KHymMnrTr7NhrNVcVqxXKYHCUXx22mVHJ4eClceVd5D16GUIrx5Ll2rHJ9djXtOE1uxCrs2GbbWJI1QHytrIUNKlLaps563PiqlqzDTs15AtV53PWU+fbpMFDfuaEUXq41Q5XJy43yGmhOkeqS2o31fFUF21OJVceri5vtbC+R6r13WVTnmLVev3ZcU4lD0Z5nQXvuACA/5JmvwrAQhRHfOI9Xyy3H+UvTJy6vM+v+f8MdhIBgL/EX7j6wUVEiiENIu7CcvtR/sLEqcv7/JoHAICf5S9c/eA65E3hJ4JqLLcf5Y9MnLq8T655AAD4Wf7I1Q8AAAAA4ACoZAAAAACAGFQyAAAAAEDMW1Ty3ba3Vtne4ye42/bW6C9Nfoqhb5pb06RtXm0ITvG103G37S3Z0kEtfIWh55lt91j5rX/9+dFBFi79d+fRYM6NdnZAAADgWX5TJd9te3tcEprnt9M4YCu88My2O3kp0lqovbqft34pk2n8XFwu1J6nfpQyNd8ktg7P5jy2bbpNzwtUsm7oaSbTdMm+xQcHOXHpPzqPsir5kJ/f1ikAgN/mJSp5HttQvJ4NkwR8PjL9GpX8PuuXItTPPLZfI5RPq+Q3cdT6YNTFf71Kzhh6luQ74QlSl/6j8wiVDADwfVyvkoe+SYJGb1HJIsAsrxP+RuQq4IQz4Q1cM/oWsnd157EVodOmubX27uaxFV2ebdfsBeHii5l+t1T0aGlQtZ7p+2Buxq71o3vckS2177UEMULR9xPTMY9tO1pza5rO2l60UNfN3CgJ04/Dd2vmpmNnkDXqre+MttSa8qZKMIw1I68ssKyhvcOPTEcxZSK4NRF6lbj0G+dRYZADBnMzw9r9gp/Zs0MbEAAAOMO1Knkw+pXgUpXsLx6BFpcmtpjT0KcpGVmV7Bsc+vKFJy0RUa6qqJ56MVMu+doFT7We9n0wPh1lMookjUZJ73sF4Z30oW/acQ5+yYjPldOxxqQfy2m9z17fTXWUBMEc5WqG5XqPctaLVFlXmW0nlfRggt8PZsj6qY58Ya4jQ9rhBwckE0uOui/OozhDI3ZJO1wv/Ox5VH1C1a7kzNlRGBAAAHiS61RyKR0wUckiYrR9xauFeQKtHATVfHBIvWucjyVnFcN+XvJDHdZmc1Zd3R8d3Iuf5fuedFOveVwZSzSVHEmitf3a6VgPf9R/DGl9N9VRcrkU6iqVnO+Raj0zUAesZ1qQwlH+bzx0qZ9KoDqzwFKFqhx+dEDOqmQ1rfkXzqPsIMfUrmT97CgNCAAAPMn1seSXP06XWDRT7iL6PpXs7rbt7FwbNa+6uj9Y1NU2qkm1bN+Tbuo1L1TJD99eopLruyk8CWuq8f73qOSj1rUm+vy8P6WSt3bC0zZZD29TyTKvIw5m18WDc4WfPo+SQU6PRiUDAHwbb8lLft3zduGtXvV6qd3iXw5ZXk31hEreIsdhYWvHNHWyts3SFS4UHIl1te/qRVetme/7ZOIUT7WOuMvclO77105HRgfUd/PhTDBKUfpBaTwXKjMu6lTyYetaC9nTSqzkAyMfNSU6EktA7fCDA1KlkhXTxfJfOY8068nJVbuSUckAAG/jLe+4uFYlh8/3hDpmLQ+jm9Ft7nl7FseakkqWx+ZsiX7VaEq9zf3CzK1h5amjte+Zi642Srmr+zJQ+ypZGXZZLqe+ajqyOqC+m9oo+TilnHetZmbelR4dyLiotp49PBXTfujMJDypHXl9gRV+M8TpIkcGJFHJ+iDLZxzlL9jEpV85j7LWk5OrdiVnzo78lxUAADwLe+9dR+Y+LMBZXrFpyGcNqYQP/IknQb/k9YIAAPC3QCVfhX4TFgBqCVQyJxQAAHwYVPIFLLeJr9yoDOAvEqQNcEIBAMBnQSUDAAAAAMSgkgEAAAAAYlDJAAAAAAAxn1PJpb36vhr/sqpfdD7a3vbT7hzi4n3OLyG7GH52eTuH829p8wTPnMW8KgQA4DgvV8nZHZtrLzzf+Z78S72ajHhW6cX9fbxGYLYdKrnAoVnI7MX4TbrqGIrz55alfLvwq/fmPOH8z3xZHT+Ls10DAIA8L99V5PS3899QyV277i72epXc2flLR7XMT6nk/40TfXzd1pu1nFbJVxs6y+GzONhjHMUMAFDJy3eoVr+R9fvUIuC0HOK3Fou3+BI11xYGczN228VtTtuUu4uZ0ZfvCC+xGZisGV+f5J5h6naAqkuPwsk0nR3G1m8Vlu5DtpTMY9uO1tyaprO2F7a0bh6gfpTCjQ8L11ptQPQ50odOGfnB3MywOlCe4gqvtn3d0kFWV13Oz8JiiHZWq++7wt5a2h+67RCx32Qyxanz6oDMYxvtcJldDDmV/H3O//qXVZbJRCH86FsaAABUrlXJSp5cPm6haAtNKKTxEhlT9DGSwfibudveBGrN4AqR25zZu5S5QZyP4kQX8qSOUrhEhu627Yf87ft162aRj7iOrdZNeY+7LMKkiBGftVESEan6jQa3ARFzpCqncOiSkT8wxSr52Yyt7wQF4xRPtXJUqDpfaFNxPjGRX97K0OlCM3MipD1ST0O5bErOPxRksGC+0fmf/rLKM9tOOS/WLxMAAMhynUrOpO7VX3gel9L4GplceGL95y88yaVUr1l/sSmorsSrIMi6XXTTHimFq+Ic+tbeRctJm2sqy8Oxx9hmulmJTI9xYnAysqxaJSsDInVAqZuZkT8wxRqZ2dQmThe+es1MZUUlK1Iv32aMsmyyJ0Ld0JVOhBqhue4gXX0HP9DKX+n8L39Z5SmcqpM5+nUBAPCnuD6WnIrCygvPg0U3bI1oelT50tcuPJnLwwtUcjGuFvcoKfR+Tqbp7dqy0qauktVuVseSj6hkeTe8fHFVB0RVybmadWqpPqSdbVOduEOh06dV8oFw7AN12VR183qh6e627ex8LF983Xf6K53/5S+rLLkWiCUDAOzymbzk5S81SQtORH18gVE0X06F1OU86My2q8u4iBIVKu+nKxfI2XZtu7Sstamr5Ew3a8lnXGSEhcZkmjghOx0QMUf+RrNeUx35A1OsuKS2mZ+4eNWVpvhZlVxoM3Y+8rnQ99zQLYaWLaCfEJrpabgUtnaMc173nN+yDr7N+V/+ssqQOWfJSwYAqOEd77hIIprL1a5UmLlrqTwQs37XZ+5oKzUPXXikV0LAJTFaH2RtR2u0mqtFrVCGkYTCSNvMqGS9mwfY7vtvkby9WHKg6pZZVp/BEgMyGC01QqupjvyBKVZd0trMWVdW3e4UF5d3PrlWs544nzk79L4r3Zy3Z8U2Q9oU68tbHRDndEEcOx8+8fnNzv/4l5WC+vOAd1wAAFTC3ntQTfjYmXoBLvKN24LAKQ5kvHwfP+18DewkAgBwDlQyVBOo5CfSPFDJ/xnnUn0+zE87DwAA7wCVDPUEN5qP37RFJf8/LLkiP3rj/qedBwCAt4FKBgAAAACIQSUDAAAAAMSgkgEAAAAAYlDJAAAAAAAxqGQAAAAAgJjPqGReaw8AAAAA38zHYslskQoAAAAAX8snMy7msW14gS4AAAAAfB+XquTJKFtOqIXBIa29X+kFAAAAAMBJiCUDAAAAAMSQlwwAAAAAEMM7LgAAAAAAYnhfMgAAAABADCoZAAAAACAGlQwAAAAAEINKBgAAAACIQSUDAAAAAMSgkgEAAAAAYt6iku+2/aYN9ob+sRegmcI/3G0bFA7mo5ueZP08yt227N5ylHgxfA3qbL5iil+7bM6eXJedHQAAABl+QSVPJtzdejDrltfiGikLa2zNtvt2leyc0/08ykvljtiB/Jt2Uqwft0zNN6nkw/Orv2v8BVP84pea506uQwNyxdkBAACQ4SUqeR7bppdXwFNyc+hbO9l226hPtLbp78Gs4nge24pd/Wqur6jkCibjR/ubthw/rZLfxFHr2zoPuH6KM4aubP/rVDK7HQEAgOR6laxtPX1Gbg6ms7Obbeev2bI1f5kUF/UqxRBfX7UbuIO5mWGNlfrL59A3ZrRtGD31h8sW0pqhgp9t1+xdlRMdcPcNBoZS67JmE/yu2PfzAEIlBz3SDIWuLoai3zyPUWpHa25N01nbixaUNgdzM3Zs5RzN6/9G9xbSUdqtuTfyivUc9dZ3Rlv+/qyeYm3kg5qx86EhbYHpfa9eS8rJpQ5IdjE494pfONrXFwAA/FGuVcmD0bXCCZU8GX8FXVsWrU2mSWLJQ9+EkWwV9foaFQ7mtjYlkkbkdXTo1bQNIZ3jmufUvMxdUfNYtjYHE4jLRJJGI1boUZlAJbuhb9pxzvmpTY2ukpubGdbltE696ryYo8k0ys8njWDkczVrRj5nvUiVdRX5W9HpU3xg5AtzHRlSnX/q7BDGKycusxj0ypfwTbdEAADgk1ynkkt5nIlKFsms2zVPKRRXwbtPulBTkEVhVSioUiUrF2/92q+l56o1Hzqy9vZu4FKUyrK1n1qX4jWQUHro9HmpoankjJ/qTfyMSu4HX/8xULrzyuHpuG2uKinUVSo53yPVemagDljPtCDXtjbFR0Z+jd2mPykjQ7rzR84OhdqJ0xdDprJO7bdNdMgXPXAMAAAf4fpYckUct5pdYRSYbu39cchR9ZkprNcBeoRYVwwPuV8ZX6/Uaol1VSWn6qfgZyVJxoWZDmm1apWsO1+vknNR/Peo5KPWtSaiaTqtkrd2wtM2WQ+q87+jkg9CLBkAABbekpf87Dsuoku+dud9Mxs8vXc8L1krjFI78to3uuNcVsnL84ijqfs5UXHfX7W+Fc62k/E/PbytS43J7L9pS2g1zXriiZJxEfuZEUaq81md6mP26dDJOVJqPqjMuKhTyYetay1kTysxxQdGPmpKdCR//grnq8+OrU7m5CpO3JtVMnnJAADgecs7Lp5Uyckl8HEx3lHJ+fTorVn5kJCZcoX62+VyeRTr3VtrDiuGej/lneLApdS6fxbKTJEiiVNTcn4uLeyrZDXXRfMz7FTsp3c+K4wU5/M6dascP5MnR0mrWT/yBzIuqq1nD0+XtD7FtSMfdFM+ypka0pw/cHY4ZS3VTlxmMWTm6By84wIAACTsvfcJMpkPADpv2xfmgKFveE8iAADAC0Elvx897QHgp0AlAwDAfw4q+a0sd665qwu/DyoZAAD+c1DJAAAAAAAxqGQAAAAAgBhUMgAAAABAzOdU8t12t6b/wYfYJnO7Nbdbc7tw+5T3Ydc5b5yzH/blMF/4m8441zjXOMNEotYAACAASURBVBcthlkr/MvkBqRdB/B1qzE3R/V822z+0Fk8j921X5Un+/7E4bNrmy+afAB4Jy/XHfex7dSH1WpV8jx2Xyim72N73Vf/0N+aW7duBXFly4qtdc7br7++prxTJbdHVFFa+dt01SGGE/LLZg5UB2Rwrn3KyhPUTOgh55+2cp76s3geu+bxq/4mdpJMC++265L3dfuIwK25PRnTuFwln/wGO374bF37c1+VAHARr9lVxLrGPD5nVXJ1Y39CJbdd1473y1tWbK265D2X82v5IZX805gT+jUnNHOVzX6tazijkq+1cp7Ks3geuyb59lUL8yr56+6YnfwGO364aZx/uT2KGeCv8YIdqo1rWue/hFWVPPVadOJuuzVqsRxyH1sZyrjdHkJS1lxbGPqbGdf6m0Wlppv6ph99+e7WcmooJdayMuiylYuYzXYFSguH/taOk+36IWg5bfNuu86OfXO7teNohC3R5jNXtXm9JS0DZma9O9mIZTKIknK40WhtNqJNW6wZlfvDh+Rw1fkar3LWbdjHxj1Wc85Pl1xx1Vv8h/pe6Xz9xB0aJS8j/Imbcz41pArNdEDSQS77GfXdhiK+zQxp1CnZoGqo0vnocJvp0Zw3pI5n/WxW8hKVHHx9dmLTRflVvZRryWmZw1/xDaYO8lGGLeLzKAgvcADwf3OxSjZN/FM7H0uOg8RTr8aM01jy0N/EfroP6Tz0/vt1Mqv2VWu6qd++njNGV5dMTkXnI77CXzUSoxQurs1jZya95bXNNUvl0YP1wiY7MfXLJXB2beMa8S/7bts5uaJ7UeiFiFmvPf6v9bHGOZS5JjGk1jRalNEfPoRtygqFy5fapmrdFUNNc3LeqJXbRCWnzhfajEidPzpx0pPCKA1C9vlzWZ041VAhHJuOUhpLVv3MLQbZd5evqVpXDdU7bzLLI+2jaqh+JauDXM0jSrCGF8qFOxkX4utz+359fPOsXztOftE+Gg6/0HKHv+AbrHzG1WFbl+6SOlvXkKkM8De4TiXPrtW+yOpV8iNynFOIW70tPCy+vIUgvttu+azX3FHGAvHVr3Qr9DQIpTyaf9gPdbZSuF5XJtONs2g5aXPt2cOxx4VNZhmGkfQqIqXir8TqJbleJUdRZ3+4x+uJXM20F1HE0X9IA3gq6l9V606TO7maauW0MHW+3Oau8/UTd2iUvNuzmGJ1ZNQVckYl5/xUHTYZNZ/rmrSeM1TvvBUirFCt0CNZoVDzuDJOqdHKh2LJjy+v7bv5kEpODn/RN5h6xh1iyIeNB9c0ioAGgP+M62PJ0f2pepX8YDKhVk6qTeaWfp2rKlmv+QqVLGqqse80s0MWyoC4GdeWlTZ1lRxflpZDqiMxh1SyqVNaLhPqU8VWrmaNSj6UPptrM7XuMkFBtaZaOS1Ur9mFNnedr5+4o4H/gqpzr1TJOT/VifMivjJMLq3nDB1y3q0/cky+WqFHC7sr+QqV7Jxbgria5JXZXE+rZBl1jr4zK1Tyi77BTqvkwehGiSUD/B0uVsmuLi/ZOVd6LM/LXOecolW3G3VhYaKS9Zr1Kvk+tnUZFyLVbzLaw+BqX5WLxH1su25pWWtTV8n69a+awo37NCSZE1uLXIhidTKddyGKoRZqtpmb7LJ9X6j2fUj+lLaZs+5EqHK3pntWJRfaPOp8eeJc9ShFgsOrxnTicobOZ1yoI6nmUZikhVzN1Lpq6KhKdokCM0kLqqH6lXyVSt7LUT6lkuexS2XugwqV/KJvsJMqeXatFkgmLxngT3G9SnYufsdF8jKh+AZbWphJsVCe3hNPwKUqWa1Zr5Ij95eD4kcKoyftOjv2Ws31GqAVylBKlF8dtplRyeHgZS9XeeR9f//1vxtLlmvHJtd4X9OGOkA1lNZ04k26qciek8/LPyniU5fUNnPW58RVtWYbdmrIF6rO56xXOl8/cZWjlIZCm9X5SkO2ekCcppJzfqZ9d4nEz9VUrauG6p1vte44bdmohupX8hmVHD5Rp+Vxbdo0Sk9LHyBWcoj1WHL5q1I//CXfYOdU8mCU11nwjguAv8ZLVDL8n0QPwaRhs11Ybj/Kd07coXwbeB3hTbtMpttPwU4iAOCc+9arH3wlkUpOw3i7sNx+lO+cuCdWILyCQCWfS58AAPgmvvPqB9+KvNH8xJ1HltuP8m0TZ55dgfASguSKnw8kAwCsfNvVDwAAAADg86CSAQAAAABiUMkAAAAAADFvUcl3295actW+gaFvmlvT3Br9NdA7zLZ77sCEu21v2V0C/l9m2z3Gvz22vdgV3G375LyfXDav8mqv2XCBvcgQAAD8v/yiSh7M7XHNfslle5/rxOJneNr/71TJvzMdk2m6N2xqmxmQszLxNeP8GvE6j238O+SDKnky4e8i9RssKGz+4m9IAICv4yUqeR7bJngV0GCu/NIXrX0mSv07skwHlfwZkvPiVXZeMyA/M87ODeabbl4NfWsn224/kArfYNd+VWq/FgAAoJrrVfLQN0nA7GUqWVy5h74xo22jSMzdlzyqzWMr3Rv6NcaT1FwM2bGVt8jn9X/Xf9mL8Ty27WjNrWk6a3vRrOZSZU21m2GPZtvt3s1P5E7GUBLu2g5cxiH1c8e0qLnOUaQYshOXG2R9OuoOr7G+9ai2zcyqq40UKqvO6dORWQzagORSJkSzxelwLl02lS5l2JJPyqsud8Kq1h9MRvwaeYGhyUQx4OKyH0xnZzfbzn9X6N9gyZ+cc0dOrpx55QsZAACquFYl5y4YL1PJkwl0wHoxGPrlwiPt+vCSjDP5CrmaTbNu1dpkL2w689g2NzOsY7IGdRRDek0ZZBKfM92UNXeHunBh1oJwW5uPA6Pr7urGLoMJhHVBlu25VOqOyw1dxiVFFGo9qnYpb70ulixWnep86GeyGFx+fWoyN/bngEo+4lKBQn6IXwyqvlSsrw2qs3OpofULYfuZnWMy/gf2WlP/BlPtVp9cJdZvGAAAOMZ1KrmU9pdccibTpAEStVBvTQnlKpeTIHIZxNW2wPAmR9KaOcVQrZL7QUrhVfvGhtSakaLyvVOvmrJHFQGn0P/MKMnpaIRKbm6xtHrEL3f1n8zKLavknEs13UnEaFFn6FOs9KjapYL1apWsrTRlOnJdq1TJqtY/opIPuFQgbDbTZnzCZmo+yvXQ6cWG6pa9MHr3SRf6N5h7/Cn4qtStPPH9GctxAADY5/pY8uszL/XItHJ5zl0vH5crEXPSa75AJWuGzqvktUeVMftELuh9T+PTy4EiJCxZLtKF2a9XyceecrteJSs9qnbpNSpZv13wUZV8yKUCstnMXZH0hM3fP8k7cLGheWzbbm9Cd39+x2T+tHtyFSGWDADwHG/JS77+HRd1Ktll9NxyFYyfpyneZE+uxLshW10la4byUWc940IVAUPf2tHUXUdTuaOG4WVKa5Bxkb1vUM732NpcYtLRbe6o8IDYiqfjWMZFal3tUbVLF2RcxLf1M9NRWAzq+ozmfbadmnGRG5D0FsQBl/KE0VatTeWEzdW8y5P6lYYev5p2HgOIZlxLu4rI/+nZB17JSwYAeJq3vOPiYyo5jOXIS0Xw/E2uZj6utlXevfMeqWTFULbmdgu1mFiS65HmlHySqdEev5NJpevdW2silbyaa8c593RUdkwe1bax9YXCUH7iVNLp0Iau7FLUTaVH9S5lrB/IS9bmPR2l7GKIByQz70F5YTr0w4+5lCUQ32qbzinLO2c9r1mvMySzF+62zWaIqTkqyxMI6TeY+ia4AyeX3mfecQEAcAL23vtfeNO7eOHVXPwusK/nba8X/KE32QEAwFeASv4/OJaiAF/MH1PJwdtj/gtDAADwv4BK/nmWO8LcV/1f+Bsquf7l079iCAAA/jtQyQAAAAAAMahkAAAAAIAYVDIAAAAAQMznVPLddrem/8FMwcncbs3t1txevn3KK7DrnDfO2Q/7cpgv/E1nnGuca5yLFsOsFcKX0/7OlL1igX3bon3iy2p2bfNFPQCAX+fluuM+tp36YFmtSp7H7gvF9H1sr1PJQ39rbt36/tUrW1ZsrXPeopKLHBJMaeVvExz1eN3/xO+oZXUtp/tHRsCeW9XqpDfi30cmVPXqzPDmRqm+zff8nDj+ZTVb1/7c1xoAfDGv2VXEusY8PmdVcnVjf0Ilt13XjvfLW1ZsOdc6534qbOb5IZX8H2COK04rBI19qoWTvEglL8ziN8A7uXx1nRwl90aVfPDLyjTOvzQexQwA53nBDtXGNe12KVFV8tQ3S9ZCH+5+190e5csh97G9rSW3W3O7PYSkrLm2MPQ3M671N4tKTTf1TT/68p3XQ/n8itDZWMuKaqJ8Hru1sBP7FMeFQ39rx8l2/RC0nLZ5t11nx7653dpxNMKWaPMZhT1r0TKz3vFsxDIZwtBa4SJktDYb0aYt1ozK/eFDcrjqfI1XOes27KMXRjk/XXIVV9MwDvW90vn6iTs0SrKdQ23aVRz7z7ZYs3GuXfs1HOmRXfXTgpTm6ZrMtZkWtuEaWD7L70hfoX5ApJ8mPyBOWyG7S1FOZWWbuVHabbPsUr31+kV7lGGLzjwKwosRAMBRnv5C0jFN/PM9H0uOg8RTr8aM01jy0N/ERrMP6Tz0XiFOZtW+ak039ZtozRhdXTI5FZ2P+Ap/J6PUUQoX1+axM5Pe8trmmqXy6MHddp29h52Y+uU3wuzaxjXiX/YdvHNyqfNXYn+BN0IxPDawDi//BeZQ5prEkFrTrDUl/vAhbFNWKFwS1TZV664YvpqT80atHBWqzhfajEidPzpx0pMa4RCp5Jo2rXPDKsIGocbUms36v15PP7cU5dCp+q/cd3n4MmUmXNv+r8NTgywtlhdtboXklqIszw2d2mYhlpz+3ts1fbRHak11PA9iW5fuPjpb15CpDADPcp1Knl2rSbF6lfyIHOcU4lZvCw+LALMQxHfbLZ/1mjvKWLAqToVEyw69MPVo/mE/1NlK4SrgJ9ONs2g5aXPt2cOxh0oWgeQokl6FDeWXv0Sp16p6lRxFnf3hHn+hzdVMexEF7fyHNLKlov5Vte40HZCrqVZOC1Pny23uOl8/cYdGSTYoVXJNm0s130GpfaOa3nn/v/bgUjQiulmIkub6ro58K4SdRx23+kGWfppiTXWFuDqVnBs6tc16lWy1AUmr1feoMEonleyQDxsPrmkUAQ0AsMt1Ktk555xp4nte9Sr5wWTSrIWg2mRE+oJHU8l6zVeoZFFTjX2nmR2yUAbEzbi2rLSpq+QtSi6ojyUflSaVSksN9anX/lzNGpVcH9IutJlad5lomVpTrZwWqnql0Oau8/UTd2iUZIMFlay2GVUb1pK05nmVPK/NynFL9V+u7+rIt6t6VidOUj/I3s927xfmF6pktzocaeU2mejKHuVqnlbJg9G/4oglA8AZLlbJLkkFO6ySnZC5zjlFqw698nIMTSXrNetV8n1s6zIu5rFbfZxMnG69VsgXbjL3PrZdt7SstamrZDf1Z15LV7jNnUbLcmIr0hZRO6lK9ndgczXbTMaFbN8Xqn1P5U7aZs66S548K9R0z6rkQptHnS9PnDsySr7XsryyTVUlqzVVlXyoR26dIzksuYwLNe6rrjofC5fJtarp+kFuE3Wo1syp5NxDkJUZF2mbR1VyjUv1PVJrnlTJs2u1QDJ5yQBwkutVsnPxOy5ucS5CnCKQFmZSLJSn98QTcKlKVmvWq+TI/eWg+JHC6Em7zo69VnNVsVqhDAZH+dVhmxmVHA5eGlfeRd59LtxTdmEsOYrhRRc/X9OGF0jVUFrTrbe/m/DwhTn5vPyTQiR1SW0zZ31OXFVrtmGnhnyh6nzOeqXz9RNXP0qDcMlT2WYaYkxzDNrVbqqSD/XIV04zBKKRV/uem02ZBZQmVR8dkJyfas2cSk6XorrA1KHLqeTKRdsmJTmX6nuUm44TKnkwyusseMcFAJxHvQIAaAzhesmFuAqw3OBCnsskgf8MdhIBgJeBbIFqIpWcBjt3YbnBhTyxAgEAAKpBtsAR5B3YJ+5mstzgEsyzKxAAAKAaZAsAAAAAQAwqGQAAAAAgBpUMAAAAABDzOZW87rb8c/gXtD3/iuIPEu0M/Ft84W86/0Ix9Y28r14hPzQgKfXO17f56+SWTXviYYBKzg/ye9Z8PU981/G6DAAIefllNrurSK1Kzm8+8kmSHarPMPTibc6XtqzYWue8RSUXyW2vUFn5j6jk3Pt0a0bvqPPpLi3p64F/hdy+HuqyeecL72om7pDzT1s5z/HvOl6xDAARL7nMRruK5HZ5rmzsT6jktuu27fderJLVDSB+gh9Sye/hsypZ3R/R/+kNKnn5XrE/+Nbkwu53auXcOF/OGZV8rZXzHP+uM42z68UKxQwA7hWX2Zodqqe+vMfeY2vmeJs7be+9tYWhv5lxrb9ZVGq6qW/60ZfrO1Bvrppb0oBLtayoFu1cHW38pxUO/a0dJ9v1Q9By2ubddp0d++Z2a8fRCFuizWcU9qxFBE24R9fCEMbwClcRo7XZiDZtsWZU7g9Pd4ZTna/xKmc92pnMq7Gcny65DKs3rw/1PcKux7brIX4/v8oBqZ8OeXhhfqOXZ0dEA6K6pDpfP8hNuOtbwZDao5xLLmlTPRGctpbqratCM1026VIsGEpdin4/tJlxdmGd3YmrdF7te+7kyk1HeX2Wv6yOMmzBnUcBG1wD/Hme/kbRMU38+zsfS46DxJmNo9NYstiMetvcOdrZeamg1nRTX7tb9dZSTD7iK/ydjFJHKVxcm8fOTHrLa5trlsqjB+sO1bITj82rlwS7RvwzORE2J9cqLwrT/WP9X+vvAkvB0YRbFs/5mkaLn/nDh7BNWaFwTVPbVK27YvxpTs4btXKq6lLnC21KogxLL1PU8SwPiDodQzjyNT+0fIDTJpLFhX3PLbD6xZC26cKFakShWkHNh1FdSq2rJ0JufdZYd8VwbLqW0lhyzpDqUvpbonAipIOcNlXvfG4tpX1UDdWf7+ocHcS2WyDZM1vXkKkM8Ie5TiXPrtWkWL1KfkSOcwpxq7eFh0WAWQjiu+2Wz3rNHWUsWBWnQqJlh16YejT/sB/qbKVwFfCT6cZZtJy0ufbs4dhDJYtAchRJryK6BksdkF4c6lVyFHX2h3v8lTJXM+1FKmLm8NiySlb/qlp32oU8V1OtnBaqCqzQpsTP0dIFqZIjc7kBKU+HdMkKdVIgWjZtXiXnFlj9YlBN+Dp+Heb6nvZo16VIUxZOBE+9dXdOJecMqcvbiCCut1g4TdKfN2qPKp3PraVCxDrqkaxQqPmsMt4Y8mHjwTWNIqAB4C9wnUp2zjlnmvimVb1KfjCZNGshqDYZkb7g0VSyXvMVKlnUVGPfaWaHLJQBcTOuLStt6ip5i5IL6mPJh1SySa5POdQgliqMcjVrVPKhB5tybabWXSbcpdZUK6eFqgIrtCmpV8m5ASlPR2p92NPKkaGrVHL9IC81l2pWcyl12PfoFSq53ro7p5J3p1gyr5WbvZqp9ZyhQ847bS1F1Qo9Wtg930+r5MHo35DEkgH+OBerZJfkch1WyU7IXOecolWHXnk5hqaS9Zr1Kvk+tnUZF/PYrT5OJk63XivkCzeZex/brlta1trUVbKb+jOvpStkXKT3qXM6YLkQqjfZjSbL/C3UXE31ybCc0FT7PiR/StvMWXciCLdb0z2rkgttRs7vquShOCC706Fq9LnokhPyNO1sZcZF5PyhQY6Ctb6wcCKoIx+5NK+2yio5tz5rrLsrMi4qXXLrSjYVNVPrqqGjKtkla8kkLaiG6s/3kyp5dq0WSCYvGQCuV8nOxe+4uMW5CHGKQFqYSbFQnt4TT8ClKlmtWa+SI/eXg+JHCqMn7To79lrNVcVqhTIYHOVXh21mVHI4eGlceRd5m9tfE3ZjyXLt2OTq5WtGIkY1lNZ04VvG/OELc/J5+SdFfOqS2mbO+py4qtZsw04N+cJcnFK1HjlfUMnpeKoDkpuO1KXcy93U8UwdUPuuLrD6xZAbT9mUzfdd7ZHqktWsF5Jro7VUb91qPVK76TSVnFvzqUu+p7sngmpdNVTvfG4tpSeXakhdn7nlfUIlD0Z5nQXvuAAAF36bAhQZwvWSBoR2YbkBvJlDWUl/EHYSAYA8yBaoJlLJaYBqF5YbwJt54jwFAADnHLIFjiFvoT5xO5LlBvA2zLPnKQAAOOeQLQAAAAAAKahkAAAAAIAYVDIAAAAAQMznVPK62/LP4V/Q9vwrij9ItNfxb/GFv+n8m8vUVxT/4gpReenIl3dUOU9ujs5Q2MD823jFUvy25f3E1xqvtgCACl6uO7K7itSq5PzmI58k2aH6DEMv3uZ8acuKrXXOW1RykUMyKK38bTKikuhVuI14MfPrqNxu4yTp5slnDKnLQ33b8TtRvTqzFHOjVN/me35OHP9a43XIAFDDS65+0a4iuV2eKxv7Eyq57bpt+70Xq+Tl5ak/FAzz/JBK/nWa4v9ey/+kkhfkfn7v5PJ1eH463qaSD36tmcbZdYJQzACQ4/qrX80O1VNf3mPvsTVzvM2dtvfe2sLQ38y41t8sKjXd1Df96Mv1Hag3V80tacClWlZUi3aujjb+0wqH/taOk+36IWg5bfNuu86OfXO7teNohC3R5jMKe9ZiYCaMLC4MWqBRxWhtNuH2ZoWaUbk/fEgOV52v8SpnPY2nzpmanjbjebqfc2XfK52vn7hDo+Q0lZyOfL0htZuyZlkl55yvmU1PjUqud74NV0u0vaKsUDlKNtz7w2/Zo7qUrqXdRZvb+q58bqqjtNtm2aV66/XL+yjDFsd5FLAZNQBoPP01o2Oa+Ed5PpYcB4kzG0ensWSxGfW2uXO0s/NSQa3ppr52t+qtpZh8xFf4OxmljlK4uDaPnZn0ltc21yyVRw/WHaplJx6bVy9Zd434Z3LaaE4uYP76mm4A6/9av6GXjBQ26167arAt2ro52pVXHj6EbcoKhQud2qZq3RWDUmkerVo5KlSdL7QZkTp/dOKkJ7tyIFXJqfNPGIoWw5AUprKs0M362XR1Krne+aU1E54F/q/DU9MhLZaXd24t5RatLM+Np9pmIZac/jLcNX20R2pNdTwPYtstkOyZrWvIVAaAkOtU8uxaTYrVq+RH5DinELd6W3hYBJiFIL7bbvms19xRxoJVcSokWnbohalH8w/7oc5WClcBP5lunEXLSZtrzx6OPVSyCCRHkfQqbKg2/IVHvQLVq+Qo6uwP9/jLZ65m2osoFOc/pPEqFfWvqnWnXd1zNdXKaWHqfLnNXefrJ+7QKEXeFpyvN5R2U66fskrOdfPQbLoKlVzvvFu314lkujrC9aNkRBTWFGuq05H2US0vjGfaZr1KttqApNXqe1QYpZNKdsiHjQfXNIqABoA/y3Uq2TnnnGniO1n1KvnBZNKshaDaZET6gkdTyXrNV6hkUVONfaeZHbJQBsTNuLastKmr5C1KLqiPJR9SyUbTASpRvMoXetpE7kQ1a1RyfUi70GZq3WViYGpNtXJaqKqQQpu7ztdP3KFRiryN/resknOG0m6+SCXXz1FqqN5531qTmWJJ/SjNIrm2/Fv0C1WyWx2OtHJUrb5HuZqnVfJg9C9DYskAkHKxSnZJgtdhleyEzHXOKVp16JWXY2gqWa9Zr5LvY1uXcTGP3erjZOJ067VCvnCTufex7bqlZa1NXSW7qT/zWrrCHe00BpYTW5FiiNpJVbK/r5qr2WYyLmT7vlDteypi0jZz1p0I7O3WdM+q5EKbR50vT5w7MkqRtznn6w2p3ZSFbVGW5bp5aDZddcZFjfO+tTk8pFIlq4Zks+1ezZxKNhlRW5lxkbZ5VCXXuFTfI7XmSZU8u1YLJJOXDAAq16tk5+J3XNziXIQ4RSAtzKRYKE/viSfgUpWs1qxXyZH7y0HxI4XRk3adHXut5qpitUIZDI7yq8M2Myo5HLw0rryLvKdcuFPswliyXDs2uaT5mja87KmG0ppuFU9NePjCnHxe/kl5kbqktpmzPieuqjXbsFNDvjAnNFXrlc7XT9yhUXKhMwXnKw2p3bRifNJCOXRqN9UBqZ8j1VC981G+UOF9eYemI/3RotbMqeR00ap9V8dTbVMdpd01n/N/TkrKPcpNxwmVPBjldRa84wIAcqjf6wAaQ7hecoGrAiw3APgU7CQCAAdBtkA1kUpWY5BlWG4AAADwIyBb4AjyvuoT9yhZbgAAAPAjIFsAAAAAAGJQyQAAAAAAMahkAAAAAIAYVDIAAAAAQAwqGQAAAAAgBpUMAAAAABCDSgYAAAAAiEElAwAAAADEoJIBAAAAAGJQyQAAAAAAMahkAAAAAIAYVDIAAAAAQAwqGQAAAAAgBpUMAAAAABCDSgYAAAAAiEElAwAAAADEoJIBAAAAAGJQyQAAAAAAMW9RyXfb3lp7f62RoW+aW9PcGjPtVDQ3M1zcJgAAAAD8V/yoSp5t99CvoYSdbXelSq5uc9PTza1px9k55yazffaNTMZXazY3BrMVynIAAAAA+AwvUcnz2Da9VHpHhelO87ZrwvaDP31EJW+t90Ild23b2Vk2MpnmUeLmsQ0F8bWjBAAAAADPc71KHvrGC0FfdqX+m0w+2poo2rtt45DzYG5mWGO6a6w3CAaHmviMSrbD2JrJqSp5KfQOVI7S0Ddm9J1a6yvdDAo3K7kB2f76+KwbCgbquHUAAACAH+FalTwYXRJdqZJ9oHoe252MC5npsX0ezG0NRaupIEIpKm3uEank+W7bfsioZFHZuXqV7FsY+sUxeeBg1h6tf426pg6IrpITQ27o0yh+tXUAAACA3+E6lXy3bfYpt0T/ifTcTSaqhQlhOkckYYP/jRI/NE0p6usZw6mJHWKV7NzQt/Z+pUrWtK9Ma37o1MevCDEC+wMSxZLjXm8i+AnrAAAAAD/E9bHklwujJGnhCpUs+Zb5pQAAIABJREFU9N+1seTlQ29zGRei5WdVcqi8Yxb176Pvl6vkausAAAAAP8Rb8pIvfseFzOsoqeT9BAOf4ixqDv0TseTZjoP3bQtOb4/utW2ikhNDz6pkaVTFa9/sgCwfljeHFFSy+txktXUAAACA3+Et77i4/k1w8tVpUuElT+BteRTegfRY58RDae1oV7WaaVMleRwwCLJO5nG4zOvYfksceBOcnu8r0x7EWzUUz5UB2TK8Rd9zicWyWeXpvR3rAAAAAD8Ce+8BAAAAAMSgkgEAAAAAYlDJAAAAAAAxqGQAAAAAgBhUMgAAAABADCoZAAAAACAGlfw1lDYv/CjqC49f8RbktM1DYxId/rXj+Vqu3A3+/db9Cxn/3sQBAMDX8YMqObuV9Gep36IvU/NNqu7YVoLOuXlslQ3DX6CSFUOo5MOcV8mHV0iF9UNtnnEAAADgMn5TJa/7ccxj+zVC+bRKfhNHrWu7UrtXqOSMoXrY5M85VDIAAMBV/LZKXi6ojwCk2AFOXmL9PdxVT4sL+aqr5rFtR2tuTdNZ24sWlDYHczN226xudmLvumhbO2H6cfhuzUAc1FnPUW99Z7TjbRRLe+8VRz6oGTsfGFK37sv0XXOp/sb90Ddm9C0Ue6Q6n5mjaIFlDe2N0o51rUPmZoZ0J8i4zUSJTqbp7JBbIZkprrGurrrsGec03wAAAD7Br6tkN/RNO87BJtji89A3gchzLqeSm5sZ3GBuTTvO661/GRjzkc7B3NY2JyPkTvHSHoQ5czXDcr1HOetFqqyrzLaTSnowwe8HM2T9VEc+t+t1akiWS/WZ9l1z6UhPh37bKnx1T513zfnsHOkqOTG0tz7L1jMdUkZJ8/Nx4qzmxK7yybhlprjWutZm5ozTKwMAAHyE/0Qli2v8o3CVO+kVPaOS+8HXf1yzgyClj6vpGki/tOsp1FUqOd8j1XpmoA5Yz7Qghjr433joUj8VLfUIKybqOTYkjghVctJ3zSXt2NVKEo7NaF8lnpo6f2iONJmrjVK19UyPCss78POxyCfTdu32v9q4ZbqpUnt26GdcpjIAAMBH+HWV/LigvkQl69KtXiUL68djyadV8lHrWhN9ojLPqeStnVDwFWPM16nkmj66gmSPnX+JSq62nutQpUpeUlzm0djJtv0g3EMlAwAAOPfrKnnom8I95Ud6q3JHW/y1oJLl3fzgcF2nrrewV6L0g0LNB5UZF3Uq+bB1rYVIrkUDe3jko6ZER7K6cE8lqy4px2bJiNfigTvZJsoCyxjKrc8665kOFUdJfL7btjOmt7ObbW+MyHgprOQ442IyYUpx7dmBSgYAgO/nN1Wyvx8d5QMoD6XJ58Ae1+x5ewLMmpJKDm9/P2zldepWOX4mzxvK1AweVttkh9KjAxkX1dazh6di2g+dmYQntSOvPpNXVu17Kll3KTOemW7m3soXzrvuvNr3dIFlDWnr84B1rUP6CtHXknzArrhC9Cl+9LRGJUdtZs64AxMHAADwan5QJcMbeNtb1XYMEVYEAACAz4BKhi+m/j0eAAAAAJeCSobvo/btvAAAAACvApUMAAAAABCDSgYAAAAAiEElAwAAAADEoJIBAAAAAGJQyQAAAAAAMZ9RyeFWWwAAAAAA38XHYslDH+6cBwAAAADwNXwy4yLeFxcAAAAA4Du4VCVPplk3g9gSKtTC4JDW3q/0AgAAAADgJMSSAQAAAABiyEsGAAAAAIjhHRcAAAAAADG8LxkAAAAAIAaVDAAAAAAQg0oGAAAAAIhBJQMAAAAAxKCSAQAAAABiUMkAAAAAADGfUclT39xuze3W9FO54tDfzE6Vw20e5G67y9sEAAAAgO/mDSp5HruHfg0l7Dx2V6pkpc3J3G5N93gxc405jedV8tDffMfbkV24AQAAAH6Hl6jk2brGPD6OXXPr1V2o36KSu7br7L3W3LUM/SqO72N7e7jxM8zWtfbTTgAAAAB8iOtV8mBc07rHxnqTuWVlbiJb77aLQ85DfzPTZJbCNSq8JVck+RWpSrbT2PZT8Kf08PvYdqPtb82ts2O/lWtZHEN/M+PYRi651UlRvqlkd7edHwelm0Hh1mZuQFzc5tQ3/egrbwMuenrcejSVAAAAAH+Ji1WyaYIA5H1sl0DyfZWV2YyLu+0CTbl8HvrbGoqWFZw8SqpwRSXf77brBz2WvB5+H9vbzUxu6G9NN873sRViMTpQuLT9BhCCeDEaFk69D6jL6HhQQfNNHRBdJftYtW9KGJXO11n3nbeuaZx6LwAAAADgP+Y6lTy7tnEm1FNeJS81QrkZ/G9Y0+s2qepE/SBwu6eSnZv6dryXDl+tP4TjnkpOdWpOJa9WfLqFiNrKfOXHrwgxAvsDEsWSY5krXNoarbUetuSaxllCygAAAPCXuD6WvGYkO+ekZHTXqeRMJkNqwlufzK23hcNPq2SZ2+C16WrobjufyRAMSMIi3330/XKVXG3dQywZAAAA/iYvzktecxicc2WVvJ9g4NMbRM2pr4olOzePXdstf9IOP6uS77ZT1Gf49N4WdS4+RCjb1Adk+bC8OaSgktXnJqutL7XJSwYAAIC/yqvfceG0F6IF74bbkpW3RAgZjlVepuYDt91oV82qtSlDp5NJn8nzh2dUsurnbiy5UZKV5a8FmfYg3r+hPI+oDMiW4S36nkssls0qT++VrfOOCwAAAPjLsPfeFYSv8pj64E0RAAAAAPBzoJKvIFDJe1kNAAAAAPD1oJIvIUhaIJAMAAAA8OugkgEAAAAAYlDJAAAAAAAxqGQAAAAAgJgvU8l3297a/L4XrzAntgu82/bWmGcevBvMzaRbbwx909ya5sk2P0E0IM+jD8i7+Kz1s7xg2XzNgOwssK/xEwAA4L9XyV5wNLemSS/A+yp5tl2NWClc3Stb+A72VfL5Abmc1KVD1r9zgq716mvUJyoZAAB+hw+r5Hlsm2B/uIsvk0NflBrvEIXfKcIyoJK/BVQyAADAh/mkSh76puls+Na0t6jku22TAHN6m3seWxGHbpo1yC3j02vlwdzMMJmlsA3eBJfIHWG9KIPEUEhtIQ7fDGltDn1jRl9eHNXigPg2zw+IVvNAj1IyLtVaz/UoOyVbC9lRWqzbteW2+FpAfUCcKy+bo6OUXZ/vWorqAqv0cx5b8S0x225nSAEAAK7iUyp5MLqAuF4lbxroca0djL9+x5GtNIBXDOlthw/m1jyC4nHSSNSC7OBgSrJMlyaa7tfblD9CijH1woCkhecH5PkeZVBjyav1yexl2tRGbYe+Ce975Nrcs75zuO6VMkpyYHdSldTpeNtS3Ftg+37KbhJsBgCAN/EJlVx6SC5RyWtgKYhXqYVqc+mFfDJbaOo5lSysN5swyqmu8H+DoFo5eKlLk0f4U8q1TJs72Sa7A6J08/SAaG3W9yhDMePiuR4pZHRkue+7qk53SfEqHaUoW2nvh1DS37ctxdIZV+Gnc0O/xZUJJAMAwNv4ZCy5FJm7ysz1KlmNbFWrZGl9z/eS2FrUlQ9Yam2eU8m5AN6ZASkGBSt6lKFSJdf3SEVVyXt93xeFuQHJeCVG6axKfttSPK2S3d22nZ3JWgYAgPfyZXnJL3jHRf4+9Wy7nQCeE3Gs1MOh18KH8U32NOOi8qksL6FSP70n2y3+tM1alawOiN7Nx/8+OSD5Nit7lCN2SVV19T3SmW2X/K7b7XtZFJYGJK/dtR5VZFyk6/NdS7F0xtX46ZxzQ9/a0bzhdzUAAIDny95x8ZY3wflntszkr8rL9bv8bFn8sFo7WiPEQXLnOtOmvCtdDObN2xNgVvVTT+SoykXWDYkBUbt5ckDUmgd6lCV2KZtHW9mj3DgJVwttHsi42B2QdUwyo7QlbJQ916fjbUtRXWAH/Fx7+n2vIgEAgP+ZL3tfMgBAyrEkHAAAgAtAJQPAl3MsAwcAAOASUMkA8L0sSSm82gIAAN4PKhkAAAAAIAaVDAAAAAAQg0oGAAAAAIhBJX8D37hdgn9J2Q8+NfWy8SxtGwkAAAD/Ff+1Sg7eHlW5xVpFm/qWwir1+7pdruryr549wJlBu2jAnzF0fjwzzp9SyW8bEAAAALgAVPLzbc5juyeUP6uSH+J4Httn3zWLSr4QVDIAAMAv8SdVstgebHvDlCj0UmboGzP6cjNobS4tyE3+lsP9fmNRQDet+VB1a5Tau6TVrHd+U8nBDnCZbiqGokFzbh7bdrTm1jSdtX0pGSPXd9W6SnaUtl6YIWtIH8/MKBm7bSw310xcuod5bkO+3cVQPSCZ/fzOrOTc4QAAAOCc+5sqWdu6WUYfN3059MmGz+EeYEOfyItgU+Ji+HCrOZhb89ipW92jO9xmuc75sBePbcD1bmacj/1fY+eDuTXtOM9jW5RWSd9l1+q3Ig9GSd35WY0lr12eTJMeHoxSWlNtUy8XY1t2PudncTrUms8sBm0lH9nDHAAA4A/yF1XyI7AnxY0IqkXhw1hG5FSynq+siS2lplQ24hCtzWrnRV6ydzjTzXyydaKS+8Frr6MqeT18G7qSRCuPUr369DWzo1TZplqekbaViyE3HQq6n6dWsno4AAAArPxFlbz9VcYRtczdPZXs28ykN+gCLq2pquRcm5XOr4ffbXsTUr5QUzH0KZW8N0pPqORs3y9XydWLIbPqNHJ+ru08sZLVwwEAAGDlv1bJ8S3+5ImuMOchlRFllTz0a6RQGNoK1zqBlNRrCg3k7/vn26xzPnx6r1CzZOiMSi71fSfjIjtKS+Fsu+Ig65oyN0q6+lRyaZIBeXgS6cv6xZBZdRrZvgujB1eyfjgAAAA8+K9VcvDUlNdki84oPRWXZnBuyJvpYerF+hSUDV6wsDUbPwQmaupvbdNq1jsvw5yPTOJCN8uGFltHVXLadzF6O0nJ6njO22N25UHef9ZNjFImRhu3qQyIiwcqfnpvdzGo06Gi9f3cSs4dDgAAAM65/14lAwAAAAA8ASoZAAAAACAGlQwAAAAAEINKBgAAAACIQSUDAAAAAMSgkgEAAAAAYlDJAAAAAAAxqGQAAAAAgJhvV8n7W1cAAAAAAFzNt6tkt+xkVtyWDAAAAADgWn5AJbvH9rxip18AAAAAgFfyIZU8mebWLP+2hAq1MDiktfc3OwoAAAAAfxFiyQAAAAAAMT+gkslLBgAAAIA38+0qmXdcAAAAAMD7+XaVDAAAAADwflDJAAAAAAAxqGQAAAAAgBhUMgAAAABADCoZAAAAACAGlQwAAAAAEINK/jXsOmmNc/bDvhzmFcvtTQMy9U0/fZdLeWbnGucu3Ibn4z0CAAB4O9+jkof+1twe/9qRnahzDOuktateGZxrRYX2Cnm0WPH/dqk0+orllg7IBdzH9tYHPTqiknMuGTGkT7wEvH5mL1fJLxlkAACAr+bDKnm2rjHLx6FfxfF9bG+dRSfreE3sNdOLVLJv01Ysk8+q5GhALuC0Sk5dap0z55y6soMHeckgAwAAfDWfVMmDcU3rY2qbSnZ3293MQ5HcbbfGmDeRIgo7vzOfUnPog3Yen6e+6Udf2fhWp94Hs4vWta64xjjbuqZxTeP8dtqmeZQ0zUNb2NZZ65rGtfbx16V8tnHNA+OYUcmziFz6+J8s9IbMKoV95Dht0641o8NtGHX2UdK0pls/Ry6pNeudr2YyN3+7YlXAQvvOY9f0UzDncolNfdNP6w2Pwz/i5syppvaoEaO69P3QIBttiNI2c9bTxQAAAPAn+dhl0DSuDW7dbip56r2KETI3rBBr1rvtApG9fM6qZC9zfFPCqHRJsa4xuKZxZnBu0f5JzNDHzG3rGvOob2dnW2fnh8jemmrd7NzsWqGxffOqcV0lG01KNuFnL7Z8C8tRUZsmuc8eyb5CiFHWbNZ46qxlHcia9c4/wSqIVZXsnMvEktdfT0P/+NFUP0c2HM+HRdEL+dmP0vDUIKuV1TYrFwMAAMCf5BMqeXatoidEXrKP1MVhPZGScQtEbSRqVu2TjyXHgWFNBGesawiZK5JI3GCEhlpVshk2KbyoZBlIbhoZYK8ip5Kt0EYP3/IhyfgHQkYl5/KVUwGn1lQPUWvWO1+PTH1/RiWrNetQVbINO+hnwQ/C7k+RQvp4qpKjNusXAwAAwJ/kk7HkMOS66tS77XwexWRK97aXO+j94F6kksvWw8M1lTxselfGklOVPJgoru7cFbFk/1cZR0y1mqtQya0QcDL2mTOaq6kekmuz0vlapt6n5zwZS05qHpqj9FQ7r5ILQ7erkusXAwAAwJ/kk4mHubzk+9gm97YzeO2bzbhYPsxjt2Ubayp5Hjs146IyZqip5Nlu3TPFWPKSgPG0NElv3KsVFtSM3rJKNmH0cQ4LfR2p83M1/Yehos1K5yuZx078+BKx5KVwuT+xzXbyE+lcLNlpT+8VMi5kBU/lIHtzZZXsqhcDAADAn+TDj+eo77hY5OlD0ci0h4dsWSRv8lDd9nDWFhV+5Gbcmm60fUklR80qT+8V48qZjAv/9J4txpJd+PReGlfeRT5u5fMQWu3ZLHmfvZB+OmjVnHgyLHrxxZw4oNZU8yXUmvXOV+MXSGdHvwT8DMtC5+RyEE/vbX86rpKd1v1BG5CcSq4c5DY0VIhPVy4GAACAP8mHVTIAAAAAwBeCSgYAAAAAiEElAwAAAADEoJIBAAAAAGJQyQAAAAAAMahkAAAAAIAYVPKv4d/51SS7Rn8/X7jcTPjGNM987vXMv8sr5uinFy0AAPxVvlC2/Ciza0/sDFKP34+j/UHB8c7llu5Ud6jytSq5vD/i023K9yLvUmn0FXP004sWAAD+Kqjkq3ijSl701iVK6838kEq+lhepZN+mrRjbz6rk3120AADwV0ElX4Ftt53zmmbbV2/bRW92bbNuRm22+nbdb03uvfeEjJCbqPnDTbgn30IUgCwE9ozWZiPatMWaUbk/fEgOV52v8Spn3YZ9THeqSw21Gc+jTZ7r+x6RU8my7+UBSWczbdNeMSDqHKk1650HAAD4QVDJV5HGktdtqJ3ctnpwTePMsBYuFcQG1/6o2bVNoL1NTnPMQvfMoQZKtx1uxN7IlZs8yz2NG+dMYkitadaaEn/4ELYpK8zxQRtqm6p1VwxbzsnCVyu3iUpOnS+0KcmpZHU7aHVA0tmM2jTJb57nBuTQFFc6DwAA8IOgkq9Cy7gwa7TYtmvYWAri9RAZSPah6HpsqB3NngKrVMlq2ququnI10174v3qxNYfHlnWV+tdcem4qCguJvJUqOXK+3GZkWlXJVqhS2bga9027o6rkkwNSP8X1zgMAAPwgqOSr0FTybF1rk1BxopIHI3Izgj9WxZIPqWRTrWCi+LQv9HgJlatZo5LrQ9qFNlPrThOFuZpq5bRQVcmFNiXlvOQhDFSrA7KrksvTkRrN1ayf4nrnAQAAfhBU8nUYkWe8FbbOGqFwhUoeTJCG8XQSZyHjIn1vQ07EDFrKqcxeXYhiqIWabSbjQrbvC9W+D8mf0jZz1l2SgVCo6Z5VyYU2C+Op6undASmrZFPhUuWA1E9xvfMAAAA/CCr5OrbECZEyMZhQAQ96ZoVMukjjyrvIG+K+zd1Yspx8m+gbX9OGGkg1lNZ0zrX5u/lz8nn5J0V86pLaZs76nLiq1mzDTg35QtX5nPXUeZv4ExlSn4pLM8s9g1bt/IDUT3G98wAAAD8IKvnFxNkUMuPi/c4Ug4s1sF4AAADgb4DqeSlpKsU3qeQnbo6zXgAAAOBvgOp5GSZ8I/KDj6pkF94lf2IXNNYLAAAA/A1QPQAAAAAAMahkAAAAAIAYVDIAAAAAQAwq+Wq2zahfauLM+5XPHZ7i3w72XK7zVZT39TjEZ0+LXzkp3+/nhVP8c20+Z/1Lzk0AgN/kVy7Iv8MXqWRtO8ADh1fjX53Rik2SC1vNvYgaaVLpyTtPC3VLvDOHv43vVMlHB+T/VsnpuQkAANWgkq/mDSq5loxKvhyvib1AQSXXg0quB5V81Hp6bgIAQDWo5IuQm+d5lSwLB62mfE+cSQ43jbNWKYwaXN4uZ9ugTf+/0T5/yuGqn1qb9eRUstyYzUe2ZKH3yoSb1RWQh6db4vk2bVgt3X9OWm/EznY23+ahHqXkXKq0njs8h2yh0KNGtFyOPqp+VvbdCTeiDa5T6yenWHVJbVOlfpTq21SXjdqjaFdFe0WPAACgDr5NL0HsHrLFkuWrkYdApyobRzfOJKVG7FYdHBUFiQfXrIfPVmx8nYslh+XykO2zaHMwj47Mrm0C7Z267D3SVbK6aXYTfvbitbA5c3S4lOBJX4PCQkQt0mpGFM75mvU9yqHGktcVdKpHErO2qaL2XbWu+ilHqb7vOZWstnlmilWXym2q7I5SfZvlJR0ZmsXn6IM71yMAACjCt+kVyG2ovUoOossimrsEaAOBKTS0RNXTzmkq2Wh/qlPJtg2ceRgdwoj4wRySnEq2Ql6svujxv7KMUA2l6ZhpXC2VUGpN9RC1Zn2PchRU3XM9UlHdKPd9V2ylbhzqe04lR22enGLVpVybKpWjdKjNdNnkDPn4sQ1/P5zpEQAA1MG36RWoKlkWqodsWvlHVPL5WLL/qwzFtU7hpEr2+qwm0JjWVA/JtVnZoxyVKrm+RyqqYC33/QmVfKjvJ1Vy5YCoLh3SlJWj9IROlcsmZ2gWicXzRT0CAIA6+Da9gi1RYRGSPuOi+PDcFqOdXZvJuDiqkn12hG9BSSmuzLg4EUuei5rSJYJDSUGpE3/SULu2KQtNaN2Euba5mlHAstxmZY9ymCT9N1Vg9T3K0SaRy92+16tkNetgl3Ti1DZPTrHqktqmSv0o1beZtl/uUZso4zM9AgCAavg2vQj/oNsw6E/vtetzNzIeG6Uapw/qxYIjCec+4r5JXkfsgBTxiQNLYDs4/JxKduGjVN6lVhSqTx1V5iKrhqRW8w9C2XCNz4lXas1Gc16tWd+jHKlLqk6t71EO6WqhzUMqOTVd33ebsZ62eXKKVZfUNlXqR6m+TXXZ5Ho0JLL4ZI8AAKAOvk3/A4avefccwDn4QgIAgK+Bi9J/ACoZ/hf4QgIAgK+Bi9J/ACoZ/hf4QgIAgK+BixIAAAAAQAwqGQAAAAAgBpUMAAAAABCDSr6Q+9jebs3t1tw6e/+0Mxn8S6aauvfsfhVfuFpN8j6vhVkrhP+bL1yfr+Cnv0MAAI7wR77X38LQ39rxWXV8H9tb/wZR5d+l2v7gFe6dq7VyT7tc5f9JJQ/Ju4ff2a/yPo5PtylfzLxL/QaHl2MOuppyyYhJfvo7BADgCKjky7jb7mamp49+n0r2G97+nIb7IZX8P2GFHrLVu/1dxYtUcrQZR5nPquST/X2FSv7d7xAAgCOgki/gbrsl0WL91y9ieTJboVTAoryflMO78RG3G7vk8MnceuvL18O3GPZ9bI/ne8itvOROYDYJYkVBuIJaMlqbTbjjWqFmVO4PH5LDVedrvMpZt2Efm2SXvtRQm/FcFh7qe4q62Zvse3lA1NlUD0+xqzj2n21y+CD+2qwbYvvySpdsIohtXiWf6Xvapl1rnlkM6vpUax5yXt2/veaUyTl/ZjoAAP4SqOTLKMWS57GT0lmplsSS57EL5PLj82RuXhNPZjlk6oOa/eSUvahNToTNyeXT64B0v2j/10hnFJCqrlnFljSk1jRrTYk/fAjblBUKuzSrbarWXTFOlm7drFZuE5WcOl9oM0JVyaqEUgdEnc3KOOUiVW34QTUUZawu/55bYL6bOZV8pu9Rm2l0/LnFcGh51zvvlWt6xu2eMqnzJ6cDAOAvwTffZSgqeeiTALNQtOHRkUqOWlsF8fZBMplH/Phuu8OBZBteXMsSql4lq6mfqvLI1UxHKVWKc3hsWSWrf82lqKbCqJDMWqmSI+fLbabOp4dboczkX9XYZ+pherjKcqy3K7VvZMivJf+/9uAC84LVa/GcSj7T95xKPrkY6pf3yYmrP2VS509OBwDAXwKVfBmJStZCvK9RyW4eu3a8u6lfI9YHYslHr5o1etRlolCqjMjVrFHJ9SHtQptqtCwVRoW42tMquT5Wpx6+MAjJlRuQQthYHq4SHTusJamh8yp5XpuVPyQKecnP9T3X5snFUL+8zzhfsH65Sk6nAwDgL8GX32XEKjlKk3jo1/vYqhkXWzw4PTxqSn3IbzLdaPtnHh8s3IEdkpo5Sbpc76O0S3nLeCGKoRZqtpmMC9m+L1T135D8KW0zZ90ld+ELNd2zKrnQZuq8r9lqZ+3ugJSTK+aidVUlq4ZUlVy/wLw5qeTSwwvOV/ZdSlJTMR2Vi6F+eZ9x/tApU3b+iekAAPhLoJIvI8248E/pdXbcorzitcq3rdCJZ/VWcbwlbGzh55xKXio/+ZYMeQPXh6N2Y8ly7djkGu9r2lAHqIbSmm6Vg42mQubk8/JPivjUJbXNnPU5cVWt2YadGvKFqvM566nzds969BMlGhB1NtXDU+tp+FZm30pDqkp2RxaYSzS67Ls8/EzfB62aO70Y6pf3yYmrP2VU509OBwDAnwGV/L9w6m3NlSbC9ZI+87QLyw12OZRFA6+G6QCAPwyy5f9g6p8OJNcTqeQnIkwsN9iFyOVXwXQAwB8G2fLzLHkdb9oTW97SfeKZd5YbFDDPrit4BUwHAPx5kC0AAAAAADGoZAAAAACAGFQyAAAAAEAMKvkbELuBfIRoY+ELaTNJzGx4ewn+jWDpe9PckdmcXdvwjBYAAEAAUuX9xNvsfV4l+5dXtJeq5MI7pKINb9VdOV7B2wy9E3U7OndgNmfrWh7SAgAACEElv5+vVMmLnL1WRBa27JLbGVxut8AfUckHZ9M0zq7TgWIGAABYQCVfwtQ3/Wi7dae9x0vZ/N57fle8+1on3FRv6pt+WnfaWw8/0GZnx7653dpxNFu52Mzv2Vcpy532FuQ+Xr7NJtwZzoWbpTXJKhuEek5rzhlDdq32+XjKAAAgAElEQVTcro7JLZQjQ0Y7XDWkEvU37bvVCqU/NnFJPTwl2uqsWTue67s7Lf0H14Q/ZgbjmrY0PAAAAH8BVPIlTH1ze2xPPY+d2FD6wTx24Q7VSSx5PXzo122r1UKlzbvtbk0/ualvbp29323X2XsYn576xaXZtY1rxD9TUFcmiQTPiYpdPjdrzWjbkVwsuU0UaqTzVENRuq3P2Uj9TH3OGcqhqmR1C99omxW/fXG6w3BuB+AUP4wm/NXhkr4vnFPJtt0CyZ7ZuoZMZQAA+Nugki9BSlIhgtfw8K253XZU8vrXTU+rhUqbd9vdzOSl8EMli0CyCFofIY22RqrXyz5VU6b1H/5rycqRzlMN+UIvmm3GT7cKzTSSnQpKWdNLT7VHVvwekH9N49OqIE4PLxBVzvU916l6hnzYeHBNowhoAACAPwIq+RJUlbxGcF1NLLlSJStt6ip56G/tGG/HdyiW/CKVrCrIy1VyFIrOGcqR65FbVbWPnauPJxbCxkOdVrZrcoX/39eo5MHoa4BYMgAAACr5EoSi9dkRIvViMjKW7CYTbShdrZK1NnWV7Kb+6XTkhTYRc4WMC1nBk6rkOS8rbVhNzbhQlWLZTxO6FBnK4Q9vtVNEdrPRFGo5uSIapSFpRD5+5zMuXqGSZ9dqgWTykgEAABwq+SKmXstt8E/adXYM3mKxpUOIp/e2P5UyLtI2Myo5eHpPiSvX4N927JeJzE/wMqpeJedE6pw0mxoqKMXUT//0ng1dSg2pWO1wacWrUtlgmossUQ/3tnzJkPxCsMVfCE2m2QoGo7zOgndcAAAALKCSL+HTr3L7CdhJ5KtgJxEAAIAiyJZLQCUDAAAA/Fegki8BlQwAAADwX4FKBgAAAACIQSUDAAAAAMSgkgEAAAAAYt6okveeqfdvU9vL8B36x8bN+1S3eZB1V2gAAAAA+C95n0oO38MabKAcvUn4QpWstDkZ8U7jGnMaz6tkucH0cy8xBgAAAICX8xKVPFvXJHvwmsbZxz4O89jl9oV7i0ruWrnxxntDwtvO0fexjbbg+37YcgIAAAD+CNerZH1720Ho5sncsjI3ka1328Uh56G/mWndg87vdCe3vwuFb6qS7TS2fsdnv9NddPh9bLvR9us2d75cy+IY+psZxza7+d5Wvqlkv2lepptB4dZmbkBc3ObUN/3oK28DLnp63DrbFwMAAMDf4GKVbBo91mhbH0h297FdAsn3VVZmMy7utgs05fJ56G9rKFpWcPIoqcIVlXy/264f9Fjyevh9bG83M7mhvzXdON/HVojF6EDh0vYbQAjixWhYOPU+oC6j40EFzTd1QHSV7GPVvilhVDpfZ9133rqGbdsAAADgv+Y6lTy7tnFGlU5DEH30Knk5LJSbwf+GNb1uk6pO1A8Ct3sq2bmpb8d76fDV+kM47qnkVKfmVPJqxadbiKitzFd+/IoQI7A/IFEsOZa5wqWt0VrrYUuu2VJoAAAAAP43ro8lpxnJgwnV8yYZ3XUqOZPJkJrw1idz623h8NMqWeY2eG26GrrbzmcyBAOSsMh3H32/XCVXW/cQSwYAAID/ntfnJc+ujdNYHzkMy58LKnk/wcCnN4iaU18VS3ZuHru2W/6kHX5WJd9tp6jP8Om9LepcfIhQtqkPyPJheXNIQSWrz01WW19qk5cMAAAAf4CXv+NiMGqmcvpCtODdcFuy8pYIIcOxysvUfOC2G+2qWbU2Zeh0Mukzef7wjEpW/dyNJTdKsrL8tSDTHsT7N5TnEZUB2TK8Rd9zicWyWeXpvbJ13nEBAAAAf4QXvy95byeR/5nwVR5TH7wpAgAAAAC+GXaofhmBSt7LagAAAACAbwKV/DqCpAUCyQAAAAA/BCoZAAAAACAGlQwAAAAAEPOvvXs3c1aHojBMWzSkOtwBoasgJacKB5QwRWgCg9Blb5C42Nj+3ucEc/gxuoDHa2SBSMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRekpL/mvpWN3+vKCoy9HV1M53tzK2q++Hcwv6a+laZx5aXltVzR0Fn6NqqulVVWCVx4wFe1/ahuY9NOP3K+UwvfXO9z75mduZmulPq9a6CAOCHfGxKfpis+PIw1c10dmju3s5/TX0bA1DVHvfJsifAifU8o6CzDM09rZK4cc8BX9j2h6nuzddGv0MoF637A6l6w9/Gey45RcF7My29KLzuqTwpGQCOd0pKHvo6TJ/H/wbv2rp5NPVqjhmzjvfx876B7SVpPT/Mq1LyqyTXMBLCRTs090P/8ix2TkrOfW+SkgHgqxyfkru2SgbhDv8N3pnxc6s872op2Rtgdh9UXVuZ3m033TM8ea3r2nF4SZtg4I2rTT0gFZRPLsg75vJwl1ef9dJLKp+XkpWXRwUNfe0q6Q9JrrZ92t6Zm2mmg6yM/yUvT0pfvHTzS88/73mXomjo67pvzK2q7k3TekfIP+ae6/OvqcW65fZSWddlXjbb2l46uUIpvTM30z1MdMz0bahWXu3nKu26nIJy2v6Zf6gDwPGOTcna1L2jU/LDPEsZ+nrDhMjxAymI8n4NO+PHsmm3rn1+eMz/mrQrDoVdm46ryQWVtiAt6LBA4x0zrrz/B0b8x0ZOStY7WRh91MbVwu1ylTrj5tKMX5cr9BZljSUXlJ593pUqSZeiIJpEO75BCo656/qM/oZcbJHWS7ldl3vZlPTnlvfRcumrl2LwNswdS5bqWVDQ4ecdAL7VcSl5acJokpKnMY9gzEbcKAinT2ydPBpkZX+mcjh4mbbIjR8nQSoNhcmHjVJQad2jT9OxLTnfdHudvDhKKlQ+am/YORkpWW679pGclZKVKnnX2+IfAwstyknJBaVnn3etSpkBbnr52KvPlFxwzH3Xp5iSS85RftflXjZF/VnwPpItzrjwL0X5bZibkqV6FhR0+HkHgG91/Fjy6bMSj/yF3plnsldu1ZKjyRjN0/keGSn5mHvClE/T5yfiUv97VVoZSz4hJctt/42UnH3e35ySd16f0ijm3pS877LZ0p/r7yNNZkrW3oaF85KDehYUdPx5B4Av9ZJ5yYfeMBd97G2bdJFUbIrLIeWjdGju4r2D0YeceCeTXFAh/dN0OftG3zgvpWSp8gfMuJD3EROJG7NfOqb6bX5WSj5txoWYV/LOuz5DYHNKLjnmzusz/7LJTsk7L5tt/bk2H0mTXLTa6Lj8NlSu+Zx6FhR0wnkHgO/0kmdcHJmSkzS2PPE0FXwFqcwHWJ0A+jDhPS7zs3XDw/rbhbtkysdvxIKCjcsfde5unrpv1iaLS5Wfe8+d0PUqVdI9ZF7bpYKCnZ9lKccUqpSdkuWXW5v/jIv80vPPu1SlXSm56Ji7rk87fqEUlZXbS0Vdl3nZ5Le94H2kikuXW6S+DdPKC8R6FhR0znkHgC/E2nsAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADEfjUlL60UuMI9XGnby6M1hLccYqcdbRe9v0Uv8dJm7jhHZfU8+mI4wNFV0t+w8yPVDjmh738j8NYGgEORkrcpXCXLNz7geWjuwQeP+yzftJpgSX0OD0ZKi6Td3A6rFd7Rw6WCii3vljTTf8rsgatO7jlHmadjf0EFdl6f+y8G6QiHLzj3s29tAPhSv5qS99qXkscFrsPFR3ZlrBdmypTQIm23elqw8EIpuWvFlRQTaTMPXVTyMJmn46V2VuaUlJy7cEy+n31rA8CX+siU7I3NrP3u9ob63FiI9A1sZ26m6ev469dwoT5vNCX52PAKKv440daHE44p1HOY/jcarxJ7qaDtUou6tjK92164hO/DVPem62u3OF+6IN9zi9YitZPjpRCLdGbMAeV5V0vJeV039LU/lulWJ9ZmCHgnVFiUbkPz5YKkt4z46szLRj2beVXKuRiWL9rnYfw3bHLMpSu54LdN6kfe2gDwpT4yJc/W1h/W1/WNYm5n3Dfm85LX4zK/48ZgrDF9uauG96o8UVoa+Qls/lmsZ1qf9FB+L2W2XWhR12Ys36159uFfU7fdXAe5mWKL9E7ek5IfxiWSDd8pjzkmOH35Xee3ojNL58h2bTokueuqWygoryely6bgbBZUSXy5VM+FDjliLHl1tfPEr7y1AeBLfWZKDoZ4lz63xhAjfBbqMXf+4MlOyf7k1PLZh+JHafQR7uWqtJ5pc6Y6y72U0XalRbs+Pqc+7Nq6+RvroDRTatG+TlaEQ9pbZ6kGWbmk69z4cZLY0nOUtPeYDon7WX/LxHVPL5uCs1lSJTXjRvVc6pAdKTn7t43Qkh95awPAl/rElOwlhszRneeHykoKET6i9NtuwpfvvA0oGDqaCtj7UbrQSxltV1p0SEq2D1O1TXFKPvxeK3ts8u7Mczy7qOvGaJ7O98hIycd0iJJfhbdM5M0pWajnUodsTsnlv23i6v3AWxsAvtQHpmTv+8quzR7d2fBxsjS4KHyzufPmpPgDW/1aVvwonUcl05cnvZQ5ji6PfR6Qku3Q3Ot6ZcZF0qKFTt464yLKK9smXYzCr86zu25o7uK9g9E5Em8C23nViQV5VkKhNk6ZeTbLqrT08rWLVjtmVkre9tsmLPcL39q77gQAgI/xgSnZG+Kt+8YsfW7Nz0P1fqcHG6ftq2PJ7tNIfHk4KrllhK8z6Yjm/L2qNHs1CjFzBeJbfLxeKmi72KKDUnL4KSs0U26R2skbP7Ol4eqiGBTe3CnPwFnturjyygUWbF86R9nEgsS3jEi5bPLPZm6VxJcr9RQ6RD1m5oyL7N826gG+8K39PMKxTwgBgOv5yJT8ImFmKhkMA4Avdsj3GABwdaRkXZCS+VQAgPG+SYYMAPwCUvKC4EtMPhUAAAB+BykZAAAAiJGSAQAAgBgpGQAAAIiRkn9V1hIJ88zseVr2X1O/50bGbtNzuGBf2XVDX1c309nObJrK755xduAFtrNK++g9v+N9dEYvnXFMAPh0pOTvULS2mbU2LyWLy3SRkjcqP0eHeWHXjU+GGZr7M5JuWEPx6I6Kq1Qqvz7iOnnHp+TCWr33mADwwUjJ3+GUlJy57MKrkJI3e21KHtfcHhubLsi8FlVPSMlhlQqdk5L3IiUDwOk+MyV7a0dFMwFWvzQc+tobyvKGl4SX66thJces+8bcqureNO18BH/pvjkxiKULOnMzTV+vNnOY9pHXPNO7TlzCTTlmvBhhtApuTj1zqjS9XFtZ13TTomV+v3n9vNQi6RzlV37Xnuo5Eq/kXb0kdojadan0oi2rp1xz/7nj8QJyyRUSZLXwLeOFbPEC21NP7Q2b9+ZS9pR7Xp7eUFb5JNGK7+L8rhOPCQC/7SNTsrCY6l9TB8ljISnOn9Pz57f88oKU7E98HPo6/pALol5SulrPaQ1Yt76J2szMjzdvbZQofaado44lR2VJ9dSPKdRJWBpXS8lTQV7buzZZKVfqJeUcScdUL4bMZop7pv2mtX1nL0kdolZpUXjMY+YGqHN4/CqlF1i6jLN8ge2rp1alnWPJWs/HOxdWPu0l8VLM7Tql/gDw0z4yJY/DNl4USL/VXfhd78ZUXJxVXl6SktvOfeTMKXkaQ4qGY6PStWqmpevNzPt48zNK8BeCPFqWnZKTXtKPmUrP5tJYclwHIYKLvaScI+GYBReD3EztshHOkdT2/b2U9nbulWytfNHm11OtfNvZaLqFVNBz9zQ+xu9T5QLbWU+lSgfNuFj5Y6C08uHLlQ7J77rClgLAT/jIlDx6fqS1nS1Myfavqe/N4H2AnZOSlWHjpHTFq1KyfjfV9pS8foeWVLc5InxISpabWZCSpbbv76U9KXnxu478ekbGQ0VDm1pB0lyCcWLx9JLlC2xjPbUqvSglF1Y+fLnWIWVdR0oGgMAnp2S7OmVC1bV105v5o0j9kv35w/OBaIUpOZoVEEwbDUtX6qgMXsrNzLgpyn+J3yJvGobcrnjzekrWj7lWvSjqRfWcCpq/vB6ae/aMi+WUvDKtJb+ZS9OF1XOU9WC+nF6SOiQ/JesXbXE9A0Nzr0wb/ZGmFZRmtaG5183jGfhci9b+Ei6t59IbNneWc7JneUrOrbww8Uk6WlHXSVV6mPVbCwDgS31iSp4f4hv8+p6/LV2JyG7n+AFV4pSD8WaaZmHoV5tx4e7RiV+e9cGjfL5qzZy/SM2Y3nCrzCM6/tSl3jhTkpKDnvdvgBPqqRwzrZF4NqWe74z+NXH8LXnSS3pKlo4pdHJ+M/VgFJ8j5Ure1UtihxTMuJAu2vx66g3o6+i1qwWl727tZrWp5/fWU33D5r25pD3FnhebufFiqII7DaR3XHnXpdcYKRnAb/rElHyEDVMCvqZ0zD796XIAAOAsv5mSN80H+JLS4SMlAwAA2c+l5OeXqi9fqPYSpSNBSgYAALKfS8kAAADAKlIyAAAAECMlAwAAADFS8mX8NfU17+oTnx228bm55QVtNz/cap4IXtrJZzRTKOLA8753prV7GtoVL0UAAF7oA1OyurDte+1ZoMta+7KUXLy8lryS9gnxcW3J7kLi4/YKO/ngKolelJKLzjtrsAEA8KEpeUo/Q19fJijvTskvUlq6uOLxGSlZKWgrZeHAIgdX6SVIyQAAHOOzU/Lz43wc7fMWlBKX+FpYh2zo67pvzK2q7k3TystZTcfszM0085png/WWQIsWbPOKHl++uqe2RNZC6Zr80ld628+a/qpd0vpziz0f7BlX/hEv2b388pLTMb5c7uTgq4mwVnrboykc0WG7tjK92z5eYP7AtlvHWJvekNd2UWduppsatXB9qte8taRkAADs56fkKXD8NbXLfN7PXVslA4pySq5uprOduVV1P3jLF7thOTes2JnbdMyH8UayF4NFMPKq7Rlul1uklb4oq3TR0Nz9JO2th+KOWdDztmu1oqOCpJcXdogylhw13xstjmdoCFVKKi9eIbZr5yWCp1f5w9LRcG98RlYu2pUR7tzrU7nm5Z0BAPhBX5KSo0gkRZP5H+WU3HZu/zExBOOmbuRVeLm1Vg4W8hTqrJSst0gsXemogtKVI/jB0f/fuOvSegpJbhzUTMNrnFCFl5d2yN6UnExrFiovXyHyHwNu/DipmF6ltYIkudenfM0rOwMA8IM+PSWPH+enpGTx9q+ClOyVXj6WvDsll5YuHSJKe7tT8nycMG4msfJlKdmf27A6cpxUXr5ClNf+NfW9GZIh6qyUrBQkISUDAHCMz07JXTuNkspfxw/NXfzy2vvXhZTsTzAIXi7HMjdYaOd/9acd63uOMmdc5KXk4tKlI0TJLOrY4p6PDuU1JI6A0ssLOyQrJQtFL26PCxKvEC1hD829bh5yY6M5wdJFu5Taw5CddX2SkgEAWPaZKdl99Rx9RS4MCs4PzXVJcZhv9mrMUkoOv+key9Jz6rxzfE+eK0jZ06+kdx+V0KKCGRfZpasvT8O06zrz8GqS2/NBM/173bS/GeLpIiUdIk5sSDvZv8fRv88vqZJceekKWRmHjgNxet7FtksFuTOSk5Kj865c81qVAAD4OR+YkvECL1hN48UFicIb/rw7QS/yeEEAAPA2pGT8sCAl67MaAADA7yEl45cFEwxOX2YPAAB8DlIyAAAAECMlAwAAADFSMgAAABAjJQMAAAAxUjIAAAAQu1BKDlf/AgAAAN7mQinZPhdCW1gZGAAAAHiJa6VkO664y8pnAAAAeKfzU/LDCKs2iBuDl9TN3+lVAwAAAESMJQMAAACxa6Vk5iUDAADgCi6UknnGBQAAAC7iQikZAAAAuAhSMgAAABAjJQMAAAAxUjIAAAAQIyUDAAAAMVIyAAAAEPvYlPzX3G9V+3h3NTZopl6vrG3OLMhYW1lbWRut0TJIGzO9rPIAAABvdX5K/mvut+r2/K89bk29z03J3dTrdRg0XaitrF1+bHRdknHTnfekZK3yAAAA3+WUlDw0tjLW2meWrfu/Mwr5WJ21tbU2zK+1tSb7CDtT8h5S5YfG1iRmAADwXY5PyZ2xVT0Nhmop2RtgduPBj7Zqe7fdPKz96+vbvXGvfrTVvR+eP0SvdTvcvJdrBYm1tpWxTW2rylaVdYtkm2rcUlVjKGxq2zS2qmzdjP/63D408Z75BuU8+KPLY+neFn/UOd3TiVKyOA2j8o7cJHtmDDwHJx0AAODzHZySTRUPK/719e1W+WHX2q51KdZ27RSjH+2826N9htr5X8NXWWuH/h4E30ebzuiQC5J0tqqs6ax9Jr5kXNcNjze1rcy4fzPYprbNMIbs+VC1HawdbO1lbHd4QTMN0GqiGL0wPJwGbnHnOknJZqy7cEVoIT7aq9nyBwIAAMA1HZeSB1vrQTDIyv5M5Vt181JyOtzrxo//+joMwVFKlkKwUpDEi7nzfJFnYnY5d0rJppuj8DMl+wPJVVU8rKql5C4cNnbS4KvtKe6cbnQv8QPxwjE1XTAQDwAA8LmOH0tOx2EnXfuc9vAw4dDySEzJ9q+535s/O/T3KONmpGSlILFuUkru5rzrjyWnKbkzwszc/LFkcQTXehMqVseStT3FndONYkpeOKaEsWQAAPBNTp6X7JvnKE9xOSSn5Gc+fjyzcrTd33/o7+KMi8znYEgpeWjmlpjFseTnIOqehJjevTck044dEz5fYmFPuzUlLx8zwbxkAADwZU5+xsXDeBMevMDqz4WI5yInHia8927o75V0WH+7cPfe4riyMuPC3b3XLI4l2/DuvW1PfFi4J68JT9SQt2cdHrPTN4pjyVrpCZ5xAQAAvs/HrioCAAAAnIaUDAAAAMRIyQAAAECMlAwAAADESMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAEDsYin5r6lvdfN31OE6czPdUQfDZzv5Yvhrai62i8s6R0Nzr6pbVd2quh+8F1bmcXb9sNuWt+Fn/2bo2vFy5foEzvAlKXno6+dvCvdf3Q+fn5KH5s7vvqN89mdhCS4bRc45epjq3gzRRlLyp1g/xem74wt+M/CWB87y5pQ89HXV+r9Adv7Cil5OSobzBZ+FmbhsFBnnKPmNhI9CSj7kcH09f5EC/LZ3puSurZJhmxNS8sOI359mfkvlvs+q3JGFl3fmZpppPHsqSNyolh4VlIyOT0Ps0su7tjK92y7Uc/VXXtpMb8tyM+XjmaAai1XKPh1SlRRCQfLFIB5ztT/n0r2N1fKlm778YcK+nWqVd4WInXzAZZNn6GvvzTs094XKKxeD4uhLUTlHST2TrotL985F2Vt7uUorLdp1zNxTPPR13TfmVlX3pmm9I2z6bbNYT7mZ6SkuqlLm21B5d6i/GTKbKf9eyv3NUHLe1U5OUnLJL3+5WsKnM/CL3pWSvUwQbz82JVfjyNDDCNnCdmZxgkfXVvHAkj8nZP5ZKyi3dKEga5XffWnpwW+0rh1f4n5YpZTuF7rQIvmQYjCSqlRwOqQqKcXLBS1WPqxn0p9iPTsTfHjndYjfzKkmXRum+WRP6Rxp6XPXZZPNa4UrXX135Kbkcy7F9BypV50ylhx16b5fLGW/Q/YcM/cUD31d3Uw3/VoehxILjpn/Ls59G8pV2vs2tMpYslClLc0Mr8/s3wxT6a6TxZ5XTofYqPK3s2A6BcBPe0dKXprkl6Tk6U/84G9icaPwcunjOfgT3xtskysT/2v0ISr89hQ/iVdK1z5X4t99Suny78Rx4GT962OldK+TFwYv9WMKewpVKjgdYpVkUtuVykvHFPpTrKc/h3W5Q/RmxlUtuEJyU3LRZZPPJXv3/WzJu0M+5PGXoniOlk9HVkre/ouloJf2HjP3FE8vH/v/eUILjln2SzXrbShWae/b0NqVGRfLf9JrzUyvz4Iq+Z9ZY93EntdOh9go+Zd/2Yep+9cD76cHPs87x5JPmP+XkZLFu3PUox2dkuXST0nJo+cvwaWu1hJYMlK4OyULVdp2OjKn+gVt186RcEyhP8V65n8W6s0c+rq+e6e14Ap5c0q2f019bwavGuek5H2XoniOFk/HxpScfSUX9NLeY74qJZe9i7PehnJK3vk2tHZXSl59b4on7h0pea7wjs9ZxpIBe7l5yfEXScWHXE/J/ndhK4bmnj/jIi8ly6VLBT0b0IZ/3+vfgS61aOXX9Eozu3bbWPLz5c/nai1Mb8g+HXKVcl61PLQvHFObsCGNLS02c/nl1n2aevN6C64QtZP3XjbBhOklXVs3vQkHwsV3R2YvnXApyudIveq2p+RNV3LG75A9x9yVkkuOmf9LNfdtKFdp79twLEL9BnJ9ethC6d71WfabwR9Qjztk24yLsHpbki7zkoGniz3j4hUpOfzibOUXwfzw1Cr4XRZ9sZifkrXSpYKCndNv9+aOkn6h+wdc/QATSne3pNR9Y0qjiXejjPdypUrZp0Oq0mpzVu4hE48pZwupnq6Z5pFMFlp9uf9t5l9TS3fvLV8hUidHZZVeNt7Lc4ag0jwtFaTWU3DipRicI+WqS1JycC1Njd39iyX3d8jOY+5LyUXHzK1n7ttQrdLOt6FN3x35KVkuXfwdkl2lzogzVaSelzaK12fRL38Bz7gAnIs9LxnA+2UPDRZ81Q4glRHrAbwPKRnA7DkGljeSlP89OwARKRm4NFIygGLPb5n5WhbYh5QMXBopGQAAAIiRkgEAAIAYKRkAAACIXSwl730SHAAAAHAAUjIAAAAQu9iqItzwCwAAgAu42ArVpGQAAABcwLtScmfkh62SkgEAAPB+70jJf02tLtmVpDzPJWUAACAASURBVOR55XovVYsbAQAAgIO8cyw5nJEMAAAAXMXF5iXzjAsAAABcwMWecUFKBgAAwAVc7HnJAAAAwAWQkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgp+cMMfV3dTKcu8X0RJ680/tfUBx2/a8dFHP3FID+kkxcMzT1ZnHJpzcu1w72qQ8TTYe2uyr/X519LAPC7LpSS3QdkdauqUzOWHZr7R37iWvtcndt0dmju/ofuy1oUFzT0tXfWXCx7WUrujFf01h5Iek/u5Nc4okUPE6/XY/cFzb0dUnR9Sjt/bEp+67UEANjlQquKdO3LPgU/PCXfmyFuwttS8iSKxa9MyVNB25ekkVKy0MmvcUCL4sV69tvbIbtT8ud657UEANjlQitUCyn5YbzhNO8ry7+mlgbbvNFoMUKZThj7nFKIdMyurUzvti/Evs7cTDMd2Y0Y+aPjz2MOfV33jblV1b1pWq8spUU58lukli50nVx5uaCoq93/PkzaIUJ/Kj0vjKd6ewqn2A8iYn+qnbw5wZxx3uUWZXZdco7iszk3U3tzFbV/x2Ujn+Kw1VEp3sbcnlelPb/3tw0A4Nu8KyULn8rBjAuXnsfvK23Xuv39GNEZ/0M3Hj8TUrK1VkhF/qCd97Of4xeHujtzm0qfKhwIMvo8SXHo62R+wtSiIBGufupntUgpXew6ofJyQXO1o5QsdIjUn/LZlErvTBAuk5T8MNXcdcnZVE7xYqNWnXDexRYVdp0ylqxNLPHeXCVX3RGXTbqntnO0MbfntbrLXbfrtw0A4Nu8IyUrUwy1GDqORbnPpPiD3GWL9Lvp3JQcpQpXk+xJIEpB02CqG3CaChprO6YluUVFslokly53nVB5sSChB/QOEfpTa3tauj/XVp6XPL52se3BRq33sp1x3oUWlXVdfkpO31xlbd932ch7KjsLKTmr56ONyh8DYddt/G0jFQQA+GTvHEuOPpsXUnJ99z71xTuTrpiSvSr5Y4ppWtLvtdo8lrw7JQuVFwsSekDtEGVSzfLZdC9XU3I8ZPjulLzvvCtTurO7ztrClBy8uQquup2XjbanXM+8lLxwzNBi1239bQMA+DbXnpdsg3tfvO9A5Q9RacbF88Ps+WCs+VPT+0bVWrs042J7So5mbiykJblFZXJapJQudZ1UebmgtAe0DpH7U2q7WPq80T+bUqZ86YyLw897dkrWL5uCGRfxmyvfvstG33N7Sl46ZkTpul2/bQAA3+Zaz7gQvmQP70UTvjCdc/b8jFj3ATnM9/c0QfiYj5B+xb/4NbdMDYVR6Upa0lpUIqNFaulS16WVVwuKemCxQ4T+lNoulu7Opnm44ysP05DOprTRb/jqgH3qjPOen5LVyyZJyVIztTdXgV2XjbSneDrEjbk9r0q7bvdvGwDAl7nQ85IBAACAiyAlAwAAADFSMgAAABAjJQMAAAAxUjIAAAAQIyUDAAAAMVLyAuUpY0dZWURXFq11fEhFDjimsp7ilXz22VzZc1PpAABgASnZWu9BvOECs1fMVfZhqpvp4pUgxqe3RuvJzS0SFleLHiScHrO0LRkp2X/07GmLMnz+2bR2asXcpYvnyHv0NQAAOAYp2acvjXGGzblqWh5silDPtSqixcnEBcy8hcT80oVjniBe8e5sH3o23XZj7mFKVs9RsGAyiRkAgEN8SUoe+rruG3OrqnvTtPOoqr+e35gtHsYboou+v5Zy1bRgm9utayvTuzFRfwGweP02ofRwT/HlWyNORkoek9bYY6VLza12crSAcDMvfOjWMEtTsrSn0nX5Pe+O/JlnU/yzR/cw0cB8tPY7AADY4HtSsj9rUxhOi4ZOb6aztmujEJPmqmliwPQSG0aQad1g/4XBwF5SujyaK6w/HMSvnMWThZSsrFA9NqGJm79isZOj0uWuG+dCBAHO21OM0dH6wwU9/6lnc7osM1Py0NyFEfrpZAEAgI2+KCW3ncs0c4Cbxg6DoT4X1+Kpsfp39GUZaEotaeneaK5/TKU+ZX2ghSoXmJ691LWVy8rFKVnsZKF0ueu8+rhs6ve5dxDpxBX0fHxktUqXO5vzwHBeSvbrkP7TS6e4AADwVb47JXsDgWFWG/q6vteHpWQ5qUilK7lqPk4wsLpnLNnjxmgfxpsDUDwL+aiUPO2QDty6g8gnLrvnkzroVbrY2QzvuXz+tzh3Qqj/80CMJQMAsM9Xp2TvG/yu9caSvRuh1mZc5OUq/5t3Ryx93vjMQ0mO2f5ILzX1epMKvKjnzTrILeDAlDz3g7enq5Jy4nJ7Pq2DXqWrnk2b9WfMX1NLGZp5yQAA7PfVKdm746ruG+PG/4JBwbW796zbcyFXhYOF3jzXuHTvOWXm4Y4fjCCWP2WiM8I4pXdMPzCJT4LLo3RyPPwZjxD7I6/CYKpf+blKYtfl9/x05E88m856ShbnzPCMCwAADvElKRkf6+QHtH0xVhIBAOBMpGS8FykZAABcESkZ70VKBgAAV0RKBgAAAGKkZAAAACBGSgYAAABipGQAAAAgRkoGAAAAYldPySyRAAAAgNe7ekq2LLcLAACAl/uAlGzHdYB5qi4AAABe5E0p+WGqW/X8b55QIW4MXlI3fy+uKAAAAH4RY8kAAABA7ANSMvOSAQAA8GJXT8k84wIAAACvd/WUDAAAALweKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIiRkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIiRkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIiRkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIiRkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIiRkgEAAIAYKRkAAACIkZIBAACAGCkZAAAAiJGSAQAAgBgpGQAAAIhdLCX/NfWtbv7eUPLQ19XNdLYzt6ruhzfU4Gjf16LP89fUN9NtfGFlHkfVozPbqrHtmFmVP6NK2OeQq27zNQ8A1/MDKflhqpyY+DDVzXR2aO7Bzl1bVbfnf6+P70Nz3/GhpbTok+3rkNc7PSVndggpeY9Pu+o2IyUDQOjNKXno66r1f6Me/9nZtXXzaOp7s5ITH6a6N0PwiTg09yqs3ovtTslxiz7dp7Xl9MRwyZT8ipe/0qddde9FSgbwRd6Zkru2quLwevhnZ2fGpFg+Eqz9uv9r6nF02X12duZmmr5+bpwGbsWN4sutDQatTTfOl6i8/6b6Sy/v2sr0bntxB8ovz21m/suDjYsdIhSU0yHLQ+ZeD6+0SJbdIf6eU4cUXAyunt7lUdIhUtPNzXQPE798fvctfOGQZMTxry/hmErlg+1+h6Qvl2u/6QILCpr/tez6POeqK2nRzg4Rej73qguvENu1U0tzex4APt67UrI2WfbolPww7tOudNZB9CEx8ueEzD935jaNOo/zHBY2ugZ2ZjpU14qD1klAkUsP/t7o2uJxL+nlYj29Fq2UrjYzqdtaQXPXSR2yqb1eWtIKSuXXszMuPYgFua5TzqbU0oIOUSqfnrj5vCyP/03xaOyB6fufha6LayVd3vk9X3Z9Sj2fpuT861Nojr7nIq+T898yoqJ3nNTzWkHpVef+1b0qv+cB4OO9IyUvzX5LUvI02hSM2YgbBd4v/b+MSRfRi6WUHE0RET6ilj+egxEXNzSlfSjGH89K6Zs+sz3Cy9V6Cvks++XTyJz/sb1aUPChK+QV4Zga77JZGWhM5ddzHGqNjil0nXY2pZYWdIhEPXE5f0OO//ow9b1+VtsPzUmVxMqnl3d2z+dfYKs9v/I21K6lw6+6grfMrg4Re36pIOHPm3lMff4rK7PnAeDjvXMs+fQpvyUfPAJpiGtvSvY/TmbXS8lqPfNSsvxy71/9ccTlgjJDoX9MmTh0mp3V8uv5OSl5+tNx7Quch6nabuhN82jqtlu85rXKH52SxdORn5Lzr0+hOQt7CnUXB+yL3zLRQQvesEnPLxUkfXkVzVgr6HkA+HgXm5d86DMuohRSPulCuntPnXGRl5L9ryaXC7LW+nMBl0o/ISXL9fRa5P0Jkf1yz0qHqBEq7hD5mNq/el9Dl6bk/HrOBQ3NXSrIdV3ZjIvyDhHrGf7t17V105uVv1f/mvpuTNsMdmhaY+7L4/1p5cXLe19KFk+H2vPixszrc6zAoVfdpreMv2vuy7We1wpK/x4Ymnt093N+zwPAx7vYMy6OTMnSXUfFv747kw5Fz1+hppP2MsYp/RHu8PYp4d6XeeeF0s9IyWI9pd4oeLnfRuW+n7kgJULFHaIcU2nmNEunESZZro6BZdfT3fJlHv5sTuk7DeFsBi2aGpXfIXLT5dKnCmQ8tc2/m22h68TKW+ny3pmS5feR1PPzRu+8l1yf9vCrrqBFOztE/sWy1vagUekVkt3zAPDpLva8ZFwan3+bXbXrSr7o/yR87w8A2I2UjHxXjXof4JpdV/At/4chJQMAdiMlI981o95HuFzXPWcCfMuijAlSMgBgN1IyAAAAECMlAwAAADFSMgAAABAjJSeY0fj1OMXO0kKYAAD8NFJyggj1apkLyB1nwymW1hm+gPyuU/Z8UUp++SkGAGA3UnKClPxqH5KSgwUULnKF7E7JL0JKBgB8ni9PyW7hK2/5qM7cTDMvxzU9CctfUGp1JbDe7SwsZyWuKjcVtF56fj0XX67smdtLJc3c0Utuya5wZTh5YTbpmPn9WXCKBcHqG0Nzn8pSOsTrUnWpuaGv674xt6q6N03rHSHvYlC6Tjibq3tqK6utXIqS/NKXuppJIACAC/jylDwLFo6uxmWx5zWrveUVMtbLdYFpWirWfxpuZ7wUknzYe6W75bj9dbnnn8V6asfMLH1NGEkzmykqeXk60KimZOmY4tlMCyo4xYJwjbqurep+UE6c7doqWHddadE0Jj2u/zz0dd0PC5VPL4aVMdqgmdqe4faSS3FFVukSUjIA4Bq+PSUL00mlBOZnoIyUHH+EB4OU82jZOIoWBCY/A43RYehrfx8hU3pVEo5ZUHp+LxU0c2cvFaXkpb8Q3J5iQSWnWCClZP3EpT2jpOS2c/uPKVnuJblD5PQpT6HOSslFl6LaUQWlAwBwXd+dkr28EowlH52SwwgVe+aGMXzsTcnCMQtKlxsk9VJ5M6ODFrz86JQsFnRkSl49cTtSstxL+SlZPpuvSsmlpQMAcF1fnZKjL8EXUvK859DcM+YlS/MolkKAmNHdl9fq19yL0SScQ5JXuvavaS9taqa/a8nLxwkMwZ7C6chNyWJBC6c45yt+L7zOvSSfuKG5izMu4tLllCz3knoxxF2nnE1hz1HmjIu8lFxcuoQZFwCAa/jqlOzdS1T3jVlIyd49RubhD/fKx9SeqDV+0TzGqWceSm+EkmYszN9Tu41iPcVj5pee30v5zdzZS9H2cLrIepWUACcVpJ3i5/b1lCzWXDhxNuz8+AJzLVJSslh5PacmXSeeTWnP4AqZeyD3UpRll77S1aRkAMDbfXlKvp6VCA4AAIArICW/GCkZAADgA5CSX4yUDAAA8AFIyQAAAECMlAwAAADESMkAAABAjJSMa1t5VvTJBW03P2dtfk7wX1MXPeNMfMz2ufYW5J4El99M7wF/cukbjunRFzQpPR2r3NPucha8PNjndN1fU2cvTgQA7/XlKdl9SARh5XDawmzBUsPTmsbJxvAhyuufPV6j1h49e7xXL6I2P0XYd0JKlgvaTFxCrzBbeFXSwqt4Ovaco6KCNAU7h6v9LWT0zY16WUp2BYmLL57tk7qua9/yhwQAFPvylOwULP21gZSSXcnSp1e0MVq1YeEjVlzX7ZVenJKVwHF8Sj442URLPW/iV+lLU3J8Hl8b9Q42NPd5uZaXr4ryWV33lj8kAKDYL6Zkf4D5+Rkw9LU/8ud2TveUHZiSlz+ZtHTordbmf3ndzOu9DfpG8eU2bP60VlwwEO4vZRy/vGsr07vthctB+zv7WdNflE5aZm+h8tGe8Z9MUUFrL1/o5KSX5oUDhQvJX9IvqlVQpc7cTDftrBQ0LuAnnSPlvAsKCqr7xtyq6t40bdSu3HQlrUwel64eM/e8zy/0F1mUTofSSwvnKGlO1XbzyvN6u7PfhrtO3JW77og/IwHgdL+YkmfBvM/FcbvlwcvwwyD9/ChIyQ+zMI8iSvNe3fzA6oLRNOo8f2xrG11l5n5QvhUVP3HT0m3Xzis5BytLF6RkNzjn6ja90J2OhdKTysuLZgsFSS8v6GRr1RCQ/gU1HTOeoSG0XSoocyzZe/nKlxW5BQ19Xd1MZzszTSXy3l+ZKTkdUFyoZ3jMgvM+vtC/IJV6au8O7RwlxvS5+i2HVFDhBbZ0zI/oujNuLQCAo/1kSg5C7TzUN4+cuU8LaU/BAWPJWVONxZQcBbIpC0azOJJAHARNcfRRrImUloTSFyJptuiT1f/fqfJ624XKj2OiaXiNP8KFl5d0srC/25ybkoUqiQXlp+S8LyuyC5oaODZha0qO3hoL9Qz+t+S8T7dRZp0O8S2Tl5KfibMf/whcvP6FgsouMO/3kjRz/SO6jkkXAD7AD6Zk77ez/8Ez3nntj+Epe6aOnHGxSBpP2puS5c/+96fk+Ai7U/J8nPCDP6nqy1KyeiOmVCVS8vaoZx7eFxHxP620PfNm2eDP7Ftd3xd23p2Sl4/5GV1HSgbwAb47JQ9NP/66Dr+s975kDD5a6ubhPaVI3TPxspQs3r2nflebl5Kt+ikoThyM567oX+DKOSlzxkX6uKj54M8hroXvqdfucRT+OvLt7GRrM1Oy9kgsYbtakDiVSJ7v+/wx+kMrPh25BR2UktMZF0o9s6YNiOd9eqHwWIaMqJf92DL/jEtTFJRmrswd2pSSP6LrmHEB4BN8d0qev5r0P+DdCEfdN2YpMeh7pqW8KCVbeXrG/A2sNLt6JSWHky7ChgizTeadF0rfm5LF8OduIzOPKBOk41Vp5f0twV2G0k1RUttzO3mqapA5gtLTG6HEyT9+f6hpKT0dwkZ1So9/V1ZRQUpKlpupkdJ8Wk/lmCXn3X+JXs/VAdHlOcfeMdumuS8E5dV5FOsXmHTMT+o67t4D8BG+PSXjE71snOm9A1rhmN8YGU+pUtGfYS90/QFF8Rwhx1LXMd0CwGcgJQNvEsQIcd7LUa6akq8/pvi6c/R19K5jVREAn4KUDLxL8OX1mYOU103J9ogbPc/0snP0fZSuS55NDgCXRUoGAAAAYqRkAAAAIEZKBgAAAGKkZFyb+BiEM56NcPAx50mZ84xM4bmzR1Sp9LCjvZOV3XO+LjyrGACA7b48JfsP7Dz9zpv5kaILpfuPNd0YLzIXAztH5oIRx5UXLFcxOSElywVtJq5oWBhnc6t0cEouOsWvvh4AAHiZL0/JzgsedNq14dJ9cunR4/dLY+7aqnKne3EqUp6renxKPvgBrkc84OzsZ8qSkgEAWPKLKdkf4n1+wA997Y/8uZ3TPRdKMPdmeC5znSQbOSVvSBhaOvQWz5sO2JmbaabF6vzSk43iy23YfNN5S9/FI9nSy7u2Mr3bvrTA4ZLooVH+GoHSwoELlY/2jP9kSp5OtfzyhU5Oeilehyxo+7wKWlKrsErSpSiuJqicYkFnbqYLF6cUT/HQ13XfmFtV3ZumjZpASgYAfK1fTMmzYOlmaVVYYU/Fw7ickRYkp+SHKZ0yEaV5r25+YPUWJX7GrPnx/tpG/+H/46GUJ/8nqUgu3XbtvEJv8EDcgpQc/cnhLUzgTsdC6Unl9efyxn/bCC8v6GRr1bHkdPVyb5Xv4MzKf24FbZcP61Vp5csKrfLxKR76urqZznbmVtX9EF7hpGQAwNf6yZQcDODNQ33zcJrLN9KeEi8r/AmTLsKUvH1WsZiSo0A2ZcFoakcSiIOgmY4Qa1/3SxFKKP2IpSKi4Oj/71R5ve1C5ceB0jS8xglVeHlJJwv7u825KTmd1rx0KUYpOfPLCq3y2ikea0tKBgD8iB9MyV408cPBmG79MTxlz5QcNLXSd0yoDQcsn/amZPE+swuk5PgIu1PyfJwwKydVfVlKVm/EXKrS+lgyKRkAgAN8d0oemn4cKQ6/rPe+lw/CQXj7nbpnUkwYiaYYIZW+9/Fb0t176mSAvJQcVG+xoGcDorkr+pwHOTxlzrhIh+Tngz/n4y7MuFi7x1H468i3s5OtzUzJ0tcOa20XL0UlJUd/U8U9r1Y+OsWkZADAb/rulDx/Ty0+oK3uG7MUI/Q9A0lQcOlEKH3vQ2rlORvz1/HS7OqVlByOhc/5zL85zKvzvPNC6XtTsjiP3N1bZh5RFkyHY9PKi/e6aQ8/kdqe28lTVYOUHJTuKuDfk5dO/ok6RL8Uk3nJ0vj0s/dyUnJ0ipWULLcIAICv8e0pGZ/ojEVD3luQKBzrHcPxlippMy4AAMB2pGTgTYKULM572XYcUjIAAAcgJQPvEkxaKF71Rn5QNCkZAIBjkJIBAACAGCkZAAAAiJGSAQAAgBgpebsDlpfLdOCjGLRn9ELs5DMegnHugzX2zkt2j5zjyW4AgB/3Ayn5YZInFqcPeS1eODpeyDp8zLB5zA/39W/PEjcqVQrKCm7tilsUPHZXWgo7eQj0woobHm1luJd49XIVcSc/nZBo5YIOo6Xkov5krRAAAH4gJXdtuKJevJiCW0RtDIJDX0srNoei8CSlZFe+lFqijWKV/H+Nli+OWuT/k7QUdnzMxQWcvVZkhulzvDioKX1yfErO6fydxyclAwBwgK9PyZ25N8Nz9el0vbQ5DXjZJSMYxaujHZiSxZX8grSatkis2NIxlfWTPVonCE8f68zNNNMYuV96slF7eJk/aG06mw7D+6dGWDzP9G770kqKS6JO9hcjlFYoXKh8tGc8bBwW5H8JsNifejNjnbmZLlz0UezPoa/rvjG3qro3TRs1ipQMAMDXp+SHcUFBiI8PUyVjyRkTEpLhwHnt4szn1+opea7SU5KGhRZ5BxJTcnzM9b8E5AF1f0w6GIafemxe3kLb6C9+sdzhSVCTS7ddO6+qHcwUL0jJUSd7C3y4jlooPam8PmFd/tsmKMjvupxmxsSet/JfSjfT2c5Mc4G8y4mUDADAl6dk78N+vmtNnILsbVy/uS0JvgeMJSszgIMjay3yDtSK85LTZLbyvb+YkqMR6CmrRVM7kkAcBM10hFirycr4t0uKB9xDGXWy/79T5fW2C5Ufx27T6B+fzejvq/RvibkTspspng6r9+fYBFIyAACRr07JaiwTY2vd/I0vWbu56oyULI/sxtlIblGwvzTjQmzC4uzYYBhytDclpxlxqSavS8nxEXan5Pk4YVZOqirO8yElAwBwCd+ckqNkM+WAxZQ8fxO9QJpxcUZKTkaLlRYNTd9Nxwmmt6qtWJ97Ld29p864yEvJQfUWC3o2IJr8rc95kPNc5oyLdEh+PvhzBemFGRdr9zj6/bxU0HOCctJ13t8q2c3UUnLcn6RkAACWfXFKlm6DGydiLqVkO83UXDj0mXfv6aWoLZq/uA8feKfm4PW798YjJIPW8wwB6W7IlZQcjoWHPRbfABfsvFD63pScdLK13u1u5hFl1nQIP628vyW4y1CcRz6duMZ4f0vkN/NZ1ZyUHPWnkpKDyhfc/ggAwNf54pR8pnMXhji7iLMfRvY5XnAeiwvauywIAAA4BCl5o7zh2CvKX1UE70BKBgDgEkjJ271uheoDxU9fxtWQkgEAuARSMgAAABAjJQMAAAAxUjIAAAAQIyX75sdgzQ/t+mtqnoeVetnTIc7w0ZUHAAAv8dUpWVj+d23/dHG4L0vJ/hOL3W180sZwmYmY+1f3aGH3n9suvFwsPSU9f1osSCndf+SwcO7SFTTyHgycv+f8IGRpefCzfd+aINkt8t/ywuXtnYv8PQEAv+rbU/IUtjJW1Pvgh7vl8heQW964kpLTJy7HT2YQXq4UJDhwlRah0GgFmbr5ywlh+XuuLch3up9Nyf5l4M6yt+KjvAz48p4AgN/1Kyn5+UE75jZvRPP5oZgMSc7LAifjkZ25mWbaP5qYkbNcmTfKuLxnfkHKnqmjUrLwOLmrpmRxwcK48vmxMmNPLWDlnriyC8y7nEwnXMn+qtrCcoCmd9sXQ+Geq66kRWmV1BYJvPe4u4TiP5WfZeXvCQD4Xb+Tkt0SweIwkrXqWHKa0qaRQrdAtH7MJSvjVVJBftCcfxarJBszRzixRNuoRJ+huacNzEjJSkGCYKqM8FdKQUp+mGRB6bTyR6bkoa+VeTuZJ67gAlMWiEkqKZduu3Y+F0sP/9571Xl7upeXValgdHz8s8GbOPT8+XnkxlsnPH9PAMBv+r2U7E+NDYemslOy/22+C6+Zw135s6WFgqIaTjFCqlJYUPR5n5OV1ZQszt7OS8kLpetFbBtLVs6FXPnTU3LJicu/wLS/x+JKKqXnLotTdtUJhKH9wiplnqB5rotL28+C3J8T05/K+XsCAH7X76Tk6YNWzknW7knJ+jETXrLJzxbbUvJ6TdLkMW/UYq6SYwpSsl765MgZFzmVP3TGhTSwujclq3+ZkJI9QTWmC+xhvL8Sp+Pk7wkA+GG/kpK7tvK/0RY//7an5OXM54u+XC5Myfp33+UpeW2OsvqQCvnvgcKUvDxH+aSUrFZeikQPI81M3Xr3XsGJy7/A1NsE43FQfXpD6UW76aqLJsAsXMlqlbJGdtV6ThvXZy4lewIAfti3p2T3JbUfj/zvr73tSUqeH5/szY5VwoFyzJS73aruG23I87nj2jwK/0ENeXklnO87xhFxY3LXlBvqU8KKkJLjlysFyfU8ISVLlQ+eGZc2P56Pnll/ccpH7okrusD8S9RrcvpEM6H07JRcUPns3iitUt4z2vyrbj6O9Nr8MDIXsgAAF59JREFUPQEAP+urUzKO9dGPx/royn82dQIMAABXRkoGcCpSMgDgI5GSAZyKlAwA+EikZAAAACBGSgYAAABipGQAAAAgRkoGAAAAYqRkAAAAIHb1lLy20DEAAABwvKunZPtcrG5xNTsAAADgWB+Qku24nCyPXAUAAMCLvCklP0x1q57/zRMqxI3BS+rm78UVBQAAwC9iLBkAAACIfUBKZl4yAAAAXuzqKZlnXAAAAOD1rp6SAQAAgNcjJQMAAAAxUjIAAAAQIyUDAAAAMVIyAAAAECMlAwAAADFS8ldopjNZWdt8RUEneJjbrbrdqlu7uj7N65s5HPde/ORzBADAdVwrJT/aagwyt7p/9WLUQ3+v2seLC13219cZkc5a201nsvaC0XPj8z8zbRy8jcPWPaOCTpHd9jMOmzazs7b2dqit7aY86v/XKBttuCWtQBP2Z63slkr3fN05AgDgm705JQ+NrcZYNvT3nFG+E+vy2Sn5meFqLzD559YlXZeo/MHL/D3Fgk7x7pQcNVNMyY74NqqU/x3CPzzcvw7hzzk9LO75unMEAMA3e2dK7oyt6ikb/DX3mxEy6l9zH0eXXYTt2pvp+/q58T6uzCduFF9ubTBobR7P6HSrvP+mkWzp5Y+2anu3XaqztOO9mcbGh/5exV/9P8ytbdz29hGUHLcpVzoO6ke9xsvB+XvmktueNlPsELXtUtdZbyrFwjEnW8P3gSk5fXnnDeFr+ywgDQMAcIK3pWRT2dr7Ovivr70g6bY29yCwPn/uWpd9HmbKqdpGl2K7djrUoxUHrZOxZLl0+2jn3PdoF4afH61L0UN/f0Y994MNfn6YOZk/jKtdEukGW1e28v4zy/HIhJMomulnY21trfG+kc/fM4vUdrGZSodIbde7LvpTRT1mctj8/uzCKRPVjpTcJWPJdTK0bEnJAAC82TtS8mDrJI6IKTkKSlMk9bLvPAItbYzHJF3IFic9xylZKX05Gfv8HceDRSPmLhB7yXihAwrVYdK1U/Y13vamcM9cQtut1EytQ9K2K3s+2mSUXT+mcNhch4wlp/O80yNrRSwgJQMAcIJ3jiVX/rfMwpDg7pT8MML49Een5Pyxz+iZCc+xzy587sEzXeXvWeBDUnLRWPKBMy58RulbUjIAAG91mXnJ4t176oyLvJRsu/aWJlr1NsE4cOkzLopTsquIPm1AHOCUc34O/xYx/2f3g3sSQv6eBaS2i83UZ0fEbZf3/OvrHTMu8p2UkgdlIDktwk4nIq08KRkAgBNc5xkXdpxbHN0/N9+Z5QaA81NyOOlCvIHOT1jzzgulF6Vk6d67uZVBIpSj21zT8rv3/EeSeaOnwvf++XvmktsuN1PqEGultst7+vde+tE82jO+RbMsK5+UksWpLNoE6PQ2yoWp0gAAYJ9rPS/5u2TH6S/0y23PduBKIgAA4Gh8Sp/nl5PiL7cdAAB8A1LyeX45Kf5y2wEAwDcgJQMAAAAxUjIAAAAQIyUDAAAAMVLy71EfGH2xY+7RTJd2Vbpq4OeXDgAAjkBK/mLKChpbE2284HfyBOrzU3L2miBuJZTay6niE6DP2CiWDgAAPgop+YttXWduxRufX1GSkp+LgPjLf7hlQRrvZ7cYh//04p0bxdIBAMBHISWfa168zyVLb+G/KfA92qrtp5HaaYBW3Ci+XCgoGfedl8IWVp7LrdL8T35KTo/519zvTd9Wt1vd98b7J7HySuledy21aAs31tuF0fkZeXduBAAAX4GUfKKHCRbAtvaZ+aZ4N//8aN1S2V075Wlto0uoj9bPviYd3tVGXsPtBVVy5aZjycEx/5r7rWof9tFWt3vz99fc782fXHm19Dglyy0abF3ZyvvP5OTUxloT/mCsraf1onduBAAAX4GUfJ45xTp/zd2Psw/zzHxiKJQ2esOu3niqUNCztJyUXFIl166MlGwermJjSpYqX1j6EXNIOu+qf8Zc44XdZvdGAADwFUjJ5zkhJXftre7/bORDUrJU+b0puXQsuQkv+S58DEU9zaPYsxEAAHwFUvJ5/vo6f8ZFXkq2j1Z4lIRUkLXW2oeJphTP+2fMuDg6JYuVV0t//vDX1zd/vofSojyNdL27Z1N04T15ezYCAIDPxwf7qZ4hL7x7r2uT+8/yU3I46WIempUKCnb2Q+f835hZc6uU/FNc9HhMJSUrlRdKn+/Vuzd9u9SibP4j26rk2RTHPgkOAAB8PlIyAAAAECMlAwAAADFSMgAAABAjJQMAAAAxUjIAAAAQIyUDAAAAMVLyxUSPXRv6u/CA5I/lnlhcnbxM3YaCBltXrAoCAABGpOSLOT0lpwvyPdr0Ccp7j6lwS2/UXnjtvEcOm3D/xnuwsbbRSE8sFgtaNDS2Zn1pAAAwISVfTLyEx+HElOwvIFK4Wod8TEVnbW2tDRdz9q/BKOnWybLP4sanZjq4VtAiU9lmKprEDAAASMknephb27i14oTF88JlouPF8x5GGN8tOKZ3hOeebkG7cK07fy09L+9Kx0xLV45Zwg33dl7MtVNijmKuuPGpSYai83W2Cl/bGVvVrKYHAMDvIiWf6GHmdZgf5pk1/Ug6LuD8nPPgZdN4/ec4+GYd0z7M7WbSUenFseSuHWOuP6js/SyVLh1zsHVlK+8/szyga5LpFmaKznU4uSLdaKfpFn7CLtTU80Dy3IjGVsxUBgDgV5GST+TlyEkwZjyNvHati545KTnrmF5cDi3PSx5f8tfc/YTtChVKl49Zop7ysZmSbuclZheIxY2+buvl3OnDxp2tKiFAAwCAr0dKPpGQKf1ALG7ckJLFY5al5Hgm9N6UnD+WPCTzkp/zLqrwv1rZGPGnNWfrjFw9xpIBAPhlpOQTSZnSm1zhzFMa/vram21sbVZKFo/5PJQw48I+zO3e+KFaSMkLMy7EMePkmNkGL9oOUswVh421seQNky4GW0sDycxLBgDgx5GSTyRnSn+CxDQG7O6BazuXWZ+JOX5GW/4xwyPET5dT7t7zdG16Q56WkpNjlmi84eHMQBw9ImPHvOTOCI+z4BkXAACAlIwfxkoiAABAQUoGAAAAYqRkAAAAIEZKBgAAAGKkZAAAACBGSgYAAABiF0vJf019q7c9eHenoa+rm+lsZ25VXfwwsys6q0V/TX2rpAcxH6gzt5U1ra9xTM9fUxcf/4JVKtC1VXWrqtMvBgAA3uMHUvLDVDkx8WGqm+ns0NyDnV0UqN4Q34fmviOCKC3a6/iUnDbzK1Pya5pZVKX99l2iAABc2JtT8tDXVbBMxfG5oWvr5tHU92YlJz5MdW+G4FN/aO5VJa+i8Rq7U3LcomsiJb+rSvttv7qGvv6OL20AAN/qnSm5a6sqDq+H54bOjEmxfCRYCxl/TX2LvmvuzM00ff3cOH32ixvFl1sbDFqbbpwvUXn/TfWXXt61lend9h3f+/tN9gpylZe+ZFea+TB+/bU8pDSzMzfTTUdY7TqBUHn5mF63r/WnWLq3caHni5qZX7pY+cwqlV2fas/v+htM+g0AAMBVvCsla5Nlj07JD/MsZcPA1dDXwke4Pydk/rkzt2nUeZznsLDRNbAz06G6Vhy0TiKIXHqQNrq2NLXIKVk/TlQrrZlTPcch7QXiIGtu18lNEiovHtMTtj3pT7H0zrjUuHEsWahSduli5fOr5JXuriXxAlOuOqVRZabZ8wAAXM47UvLSxNYkJXtDkuI45WL29T7C/zImXUQvllJyNEVECDFBXkk2BuN8/piimPniCKKUviEZ++SUPA5/rmd3re07U3Jm1ylHFCqvDJkHY976Xwhi6X7Tds64WP77RGt7WvmCKvnvtbFu4gWmXXVyoza8YR/mHZP+AQBY8c6x5NOn/JbkKoE04rg3JcuR8YopefTMN8GZyknJRXc95sXH9bSdCCq/luaXc6pY+stS8uplI/bSW1JyIcaSAQCXdbF5yYc+4yL6dC+fdCHdvafOuMhLyf4X4ssFWWut7dpw7E2fcbEvJT+PMzR3aSZrHLYyUnLhyH3czIKuW7M+tO/NWlmabSKVPr9c6botzdxQulf5gip5pbs/CF8744J5yQCAK7vYMy6OTMnid8Eb7mxb+JrbVTU/JYcj3HNEeGaa5I6reeeF0nem5Pnesrpvpjr79Qkf+nGLtq+OJWfcUBg3s6jrhAZJlV+pp9d2pT+l0l3XmUfGlPq8ZuaXLlY+u0rStW3lC0zaKF4MBXjGBQDg4i72vGR8h/APkmQMFVdw8nPoAAD4cKRknCBIyZtmSuB0pGQAAJaQknGG4Ot4BpIviZQMAMASUjIAAAAQIyUDAAAAMVIyAAAAELtYSj70eckAAADANqRkAAAAIHaxVUW47x4AAAAXcLEVqknJAAAAuIB3peTOyI/RJSUDAADg/d6Rkv+aWl2MLUnJDyMsTiFuBAAAAA7yzrHkcEYyAAAAcBUXm5fMMy4AAABwARd7xgUpGQAAABdwseclAwAAABdASgYAAABipGQAAAAgRkoGAAAAYqRkAAAAIEZKBgAAAGKkZMiGvq5uplPXEr+Ik5c0/2vqg47fteNqkf6qkx/SyQAA/KJrpWSXJKo3PDV5aO7autnXd0LlH6a6mc4Ozd0PcC/rpbigoa/dsuTe4uQvS8md8Yre2gNJ78mdDAAA3u86q4oMzf29a1aTkkMPU92bIT7y21LyJIrFr0zJU0Hb176RUrLQyQAA4P0us0K19tX2X1PHA3iduZlmGlmcRuDEjeLLp6LH7aYTximnDCS9vGsr07vtixEtffnDhA2ZqppXzySrnVn5RH5BQ1/XfWNuVXVvmjauQNgif8v8crmgqAfc/z5MdN7lZiodIowQe3sKPe+HWvHEKWfzw/8SAwDgt7wrJccTMYe+nhOz4w/azT935jaNOo9fWC9sdMmmM9OhulYctE4SjFx6EO67diH0yKW76nVtEPHz6imk5L2VDxLh6nSCrIKi6bZDXz9bqvS8fyi9RWkPjP+bnnfxHCmnQyi9Mzc/BCfX0sOMwV3sZKXnFxsFAAAu5x0p+a+pkygmpmRvPoa1YtxRvxA3nU3znwvZ4tfl0kRYofTlZBw3UxwQHcdK3cEL6pmbkvdWXpVV0LRxbMKUkpWen0aCw+Ht8hkXXocIzdROR1r6OAsiOqY/L3l87WLbg41a7wEAgMt651hyMKzoDQQ6e1OyH3eCol+SkuXSxyPXd+/gBfU8ISXvG0venZK9jRvHkvNS8moni5eNeIFltT3Y6F5BSgYA4FNcZl6yePeeOuMiLyX7X53P1NsEvSkQC6XnD8eKpQc3bHkzLjLr6VLd0NyDicVHV15vVUZBSkpeOcVdu9iiuQc2pWSxk8XS541+J0u3CTLjAgCA73WdZ1xY8Utt7wtxlzbyU3I4UBol8vQOtnnnhdJLgmZaupvSOv1revfecj2H+Q7Fxpxa+fVGqQUpKVlukbt/br1F1u5IyXIni6W7TjYPd3zlYRpSJ0sb/YavDtgDAID3u9bzkgEAAIArICUDAAAAMVIyAAAAECMlAwAAADFSMgAAABAjJQMAAAAxUvI3iFaE/oKCzuAe+rb6FLY3NDNYUWWXjz5HAABcByn5yrIXoRhXLvRXKgnXXhZWwxaf75uzZ1LQKU5agCPvsGkzg6X7xoO4xyq7/+p+EDeGzwIXKuA9Utq6hytnNF/a83XnCACAb0ZKvrKSlDyt5zft76+C4Vbs89afk9deXt5TLOgk707JUTOllDwRFxxZXv0kWqnbX7v7+XNOPZU9X3eOAAD4ZqTk83TmZpp5qbwpYnkrwLkQ07WV6d1209l0nDLKVaukcVAv6j2Pbx5Fe+5te9pMsUPUtktdZ72pFAvH9LtlS3Y8MCWndXiYZCny/HqShgEAOAUp+TydcRMY3PChP47o/dy1wZrJU+hJApC/xnLGFNsxPk4JzK0H/iyuaYP8mrnn9raLzVQ6RGm70nVRxFSPmRw2vz/9SSnxnoUp2V+lfKxS+icQKRkAgDcjJZ9HGD506XPcYwrEXjL27QlAQ3Ov/KQ7TNnXxcpuzL75e+5qu9hMrUPStit7+nMVVo8pHDbXAWPJytcCwZE31JOUDADAKUjJ5zkhJeePfQbPTJgmGT+MN/9hOnj+nvvaLjbzzSm5aCz5sBkX4X57/0AiJQMAcApS8nmiL9lNZ5emDYhBp3wQdyIX5GXKlSpJexaQ2i42U58dEbdd3nMeCM855jXmJYdVFQaSlXo+jJTjSckAAJyClHwe5Uv2eYZrkAjloCM+ji2Pfw+cNHo6HzB/z2xy2+VmSh0iV0Dec3waWnD3nrCnv1vmc9bCSp6QkqW/goJnxvn1TG6jVPcEAAD7kZLPo37J/gN+ue3ZjltJBAAAHI6UfJ5fToq/3HYAAPANSMnn+eWk+MttBwAA34CUDAAAAMRIyQAAAECMlAwAAADESMm/56+pD39q2BnH3GHo6+pmOtuZ29YHTn9s6QAA4BCk5C+mrDexNdH6j1V+/jdHwBel5OwVNMalTIbmHlcyftzyGRvF0gEAwEchJX+xk1Zle+PzK0pS8r0Zgv2H5j5We+jraYmQaUVu6z+9eOdGsXQAAPBhSMnn6tpkWbh59NFFqM7cTDON1E6jj+JG8eVCQcm477wUtrBOW26V5n/yU3J6zKGv674xt6q6N03r/ZNYeaV0r7uWWrSFWzTbW1FvXtlu50YAAPAVSMkn6tqqasNR17+mdvFu/rkzt2lPF+DUjS6hdsbPvm06vKuNZYbbC6rkyk3HkoNjRhNzh76u+0GuvFp6nJLlFnkJO3+V5qGvn01zP3TtGOiftd2zcb14AADwCUjJ55lTrONy1bhH+0x1YiiUNsah0GVKcWA1KyWXVMm1KyMlt52r2JiSpcoXln7EHAYv9D9Ld39jdF723bxxX+UAAMBVkJLPc0JK9r7iXy7oWdq1UrJU+b0puXAseRrknjyMN59kOvjOjQAA4CuQks8zNPf8GRd5Kdm/XWy5IGutOrqZOePi6JQsVl4t/fnD0NwrP9fuGa+NI7K1wR8YwbSWPRsBAMA3ICWf6hnywrv3Hia5/yw/JYejp/PQrFRQsLMfOpOR19wqJf8UFz0eU0nJSuWF0ud79eq+MUstyqaNOp/xJDgAAPD5SMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkXEz127a+p81Zd/gjRytXXKih+4B0AAPhppOSLOT0lp0vEdSZ77brsYyrGpTeG5u6F1/l5yfHaKM+nJkdHjjZ2bZU+blkuaLkN7qHOAAAApOTLOX1EU0zJ/gIiG1bHKEnJ92YI9vfXKAmX2n6Y6m5MdGRx47MSfR2sVBIXtCwomsQMAABIySfq2sr0bm02YfG8cJnoePE8N0rq57yCYwbjrKbzFrQLB1/9nOrFSumYaenKMfN5w71jtB2LMre6+YtirrhxOtC44N8mDxO9tmv9pQ0BAMDPISWfyE9aXfsMduLQaWeCBZPj9Z/j4Jt1TNu18QQG8YDByx9mjLn+oLL3s1S6dExtOeiFjgqnW3TtMzoHRxY3zjNGtofaobkL4X6a3AwAAH4RKflEXo6cxPGxbv7CMdSMlJx1zGj2gn7AcF7y+JJoXNYVKpQuHzPf0NzHfDxH8Hlk1zuyuNE3zkUuF4xhp8fcMAUFAAB8PFLyiYRMKQaynSlZDnlFKTkOl3tTcv5YctDe55j60NyrcBZH9ZyLnGyMWq01eYXSKMaSAQD4aaTkE0nxy5tc4cxTGp4BsTAli8f0xmjTWoW3pgkpeWHGhRgok2NmUwryWyE2TR5L3jDp4q+ppVcxLxkAgB9HSj6RnCn9cdYph7l74MzDZdZ4SHVpNFc6ZniE+Olyyt17nvkBbXNy1VJycswC/v1/eYE4ekSGNrScRcz3POMCAACQkvHDWEkEAAAoSMkAAABAjJQMAAAAxEjJAAAAQIyUDAAAAMRIyQAAAECMlAwAAADESMkAAABA7OopmfUdAAAA8HpXT8mWtYIBAADwch+Qku24iDFrpAEAAOBF3pSSH6a6Vc//5gkV4sbgJXXz9+KKAgAA4Bf9A7JnVFkl1s7oAAAAAElFTkSuQmCCAA==&quot; alt=&quot;&quot;&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;3. 아래의 소스코드를 추가한다. &lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;HTTPS통신을 할 포트번호를 정한다 ( https는 Port 443이 기본이다.&amp;nbsp; 혹시 기존에 해당 포트가 사용중이라면 , 다른포트를 이용하자)&lt;/p&gt;
&lt;p&gt;keystorepass에는 키스토어 비밀번호를 입력한다.&lt;/p&gt;
&lt;p&gt;keystorefile에는 .keystore의 위치를 지정해준다. &lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush:xml&quot;&gt; 
 &amp;lt; connector port=&quot;443&quot; protocol=&quot;org.apache.coyote.http11.Http11NioProtocol&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxthreads=&quot;150&quot; sslenabled=&quot;true&quot; scheme=&quot;https&quot; secure=&quot;true&quot; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clientauth=&quot;false&quot; sslprotocol=&quot;TLS&quot; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystorepass=&quot;password&quot; keystorefile=&quot;C:/OpenSSL-Win64/bin/.keystore&quot; &amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;자 &lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;매우 간단하게&lt;/span&gt;&lt;/u&gt;&lt;/b&gt; HTTPS / SSL 통신을 위한 Tomcat 설정이 끝났다.&lt;/span&gt;&lt;/u&gt;&lt;br /&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;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP0AAAAlCAIAAAAGOnjpAAAFOElEQVR4nO2cv2vbTBjH/efEf0ADGt4pZGswoR0CpYV30NB38tit0MEePXjs1CVqFuOA6dKpGEfKmwQJCze0g4fSVmC7g00hHgr3DtLpfususvw6tp4vGqLT3T3PyZ979NxJpLIwkO/73W73DATaFVW00A+Hw36/P5/PEQi0K9Jzf35+vlwuN+0nCFSk9NyfnZ1t2kkQqGAB96AyCrgHlVHA/QPV6enppl3YZRXG/fzmcn5zuW53yyPgfq0qjPvr44Pr44OV/ZmM6vZoZlY3bAxagVg87dleb1Jsnzrdx4SZ1NxPRvWqHxZpK7/cZqXmRMX0FTm1StMtvFu5iuH+x/t3A6s6sKo/3r8ztTzreFY1bjWod6ZJKQ/QtGcP0mr4SH71vNxL+0yaaLmn3SY1VdwHPm+oMdbcl0QPi/tpv93uT6mCW+e1c7uV3MdDKYD7P4u5d7if0HO4/2dh8IZr1vEsAsq0Z2P0lYFToJljVCQsnVG5+9S4PW6l6EtNBL4lFM46nhn6Obif9mzaee50FSWUk67xNHjA3FPd0UqGUgD3X9+8olH7+uaV1qdxq6oIyUpGSZOwMZBE3AwVxr3gduAnEE9G9dgl2tDOcK/Efvu4x0NZlfvfXz7HCMan8d+/v3zO9imTexGgNLtgiZEwSkV9de5Eu8H3kJ/7/znPIT3Hc2DcYnI27hRPQr4VQnTmFvs27bdf00nNtN9msb910usMoG6zkorFllzBJEZOTVZEc++mVZjO5FZIf01X7QoZyqrchy+fi9yH/7zIaILvtXmeE/hW1Q/parFtjtGkmlmfCEOpnUtKt3V5zkrK5j51m74nmfGeHSwZCPX0mHVGIRK4V6X2CCGae7dZ4aYA5pn+O3IcFyEUOU1clVxluSe98X1JrFBNEwvSeE8NZSXuf336mAaVuCQ9/fXpo6pVIrN1bfyDpVF23KIqc4zyyIrPECY9iLHgQ3gh61q6jvLQzBPjPCd95mi55xf3Xm+iXyVnYk+4d5scZPiKIs1mKsq4p6J05NTI5JJakRkRy+ihrMT99fGB6nfNu6fJcT8Z1bnUgk30TbnPWHQSbmSd6CVZJBQhFfdD+4l3uOc+Oxna8XHkWn/9a58M7ZObp48Gj49wOXd65FqPvL9P6KsXT5/gS3sDay+uzJlTp/YIoSy6MayKVJ3Kc3AE13OvtkIym/S6UJkZSn7uv71t06DHhXTJt7dtacNMrbLXbp7nMDVR2CAJgI77cYtkBWJQZwKnMuobDXDd8V5Yq8hWOzrss+M9TkEE7vlVgSn3ait0gfj4kAwlJ/fLn9/TvUsV997h/vLnd7EtFhtoE8m5l29N5FzXyp7sYSOpb869VvKtG9kmj0w5uM98AAa+xaaISavAx3XwTSb5fXaOg5BRfh85NS6/p4mkMnkD7lVW3KZ8cUy454eSk3tu71J1ZO5pSrmXa7UtuSLf17Lc09s1hluW6+Qe+4MDOX0a+JY96jVEb8lbvGRWpNzrsVfv5zBROOJ3Zuj9nfvEe6UVwQJVs+ZE4lDycD+/uTSBPj7UH+1sPffMHBAbrov7fDK1S0RtVyKEJPuZ2yN+KBv9HlPxhlX2Nkr6ZYHxdnjB3FMhUxvv15Hf59O9udel9lsk8TkF3yE/VG2c+90WcA8qo4B7UBkF3IPKKD333W737u5u036CQEVKz/3V1dXFxcWm/QSBipSe+8ViEQQB/J9A0C7JiHsQaMcE3IPKKOAeVEYB96AyqvKh9wEOOMp2VO5AoPIJuAeVUcA9qIwC7kFl1H/bh0WXvxrG5AAAAABJRU5ErkJgggA=&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;비록 인증서가 공인CA에서 인증된 인증서가 아니라 &lt;u&gt;안전하지 않음 &lt;/u&gt;이지만&lt;/p&gt;
&lt;p&gt;SSL 적용이 완료되었다! &lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995D724D5A78736702&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995D724D5A78736702&quot; width=&quot;820&quot; height=&quot;484&quot; filename=&quot;ss.PNG&quot; filemime=&quot;image/png&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;공인CA에 인증서가 등록되어있지않아서,&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;[고급]&lt;/span&gt;&lt;/b&gt;버튼을 누르면 &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&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;[localhost(안전하지않음) 으로 이동 ]&lt;/span&gt;&lt;/b&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;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAtCAIAAADDbgUDAAADtklEQVR4nO2bvU/bQBTAvecv6H9QZga6Z2DripoRiU5ZGGBDykQXS8cAgkqtIjogRSzBVwE7ClJEJFssZLOXyDEMFukQb9fh/HW+80dwjHPo/fQWO+fDej/f87NllLPffwrGqTB+sVFwGMTyQpkBkgMKpQcUSg8olJ6FFeq63u/3e8DKsJjCx8fHu7u719dXAqwMiiPi+fnZdV1e4dXVled5dZ8zwCBW6DjOy8sLr7DX69V9wjWz/nPlIlWh4zigkKd2YaCwLLULA4VFubi4EO6vXZhAoWVZVBhCCBSGyKRwe3sbY4wQarVa5RW683/7tydrR621o9b+7Um5NNqXqH1pFxuro0bX4HcPu01Vf8ucGQpHHjHH9ZuLFLZilFe4d3O82d21XNty7c3u7t7NcX62CCG2ttVpNmggbZqS7iluN8JhQfiGPrbCAZl5RI3t0dzoHJSDg4MlKvz046vl+hmyXPsz+pafLVvb6kRpneJ2YDE13VPc3sLsD4xCQ+VMBxdHhQrVCSFu6maZiAvjjS55FTY6zYxNIcNuk/URZjk13dEhOooMiVYhh5QKTUI09g/NJtUU0o3THf7a/3L2PTtZmQrpJGzS/aqLhvFZ+EIatxvNkDInR65CM9hDdWpuNGY2SW5SDaNB8ih/SQU7qaeRxxjiLwU6FT1QW+5DhaB2dZr5C3GxQmqonaaqx4cRQjiFOmJ+JYbayVnZCbIVkiDd6oSQoKZlr0KTREfR7I8G7JoekNFYoHDk+SP9GEfT0p9WQCEp2s5Qf+GSHXZjg99XYbyQmnGdmQrjJsJimNMcZTYydBLFcRzLsg4PD8/Pz2tTKCaRbvsSJUoue1MsWkhXS2G4QIU3zuxGhm4qjuPQh8Lyj/YVK8wk5aHizVStUHOZaunfTTmLZmYjQ09GwRjTXubp6ak+hYaaaE8ISVM4xW2BLYHCsHNJRFWrMH6X4jdNEt0118eEBEeZbqSHjg/vhbwwkzVKxfsdKca4/L1Q2JFunO7kJ0ysUIxYoQDhFVBhIQ1LYqJCRh3pJJonXJFquDMQHCrMaGTiO/0XbEtpZ0ogk8K3hckW0vwYx1ZtoFbY+ESvuetWKC7CvC3ha7YG/6RYWSF9H4U5jUxc4RIfKj4StSssHqBQekCh9MDnT9Kz2EeI/X5/Pp/Xfc4Aw2KfAj88PNzf39d9zgDDwh/kG4YBH+SvFPBvMdIDCqUHFEoPKJQe5frvNYTUodTdEgNlAYXSAwqlBxRKDyiUHlAoPaBQev4DLmHmBSdloDgAAAAASUVORK5CYIIA&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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;br /&gt;&lt;/p&gt;</description>
      <category>개발일지</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/25</guid>
      <comments>https://namjackson.tistory.com/25#entry25comment</comments>
      <pubDate>Tue, 6 Feb 2018 00:14:57 +0900</pubDate>
    </item>
    <item>
      <title>[SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL)</title>
      <link>https://namjackson.tistory.com/24</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;먼저 HTTPS통신을 구현 하기 하기전&lt;/span&gt;,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;SSL 이란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Secure Socket Layer의 약자로 SSL 프로토콜은 &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;br /&gt;&lt;/p&gt;&lt;p&gt;HTTP에 SSL 적용을 하여 Https 통신을 하게된다!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이러한 암호화 통신을 하기 위해선 SSL 인증서가 필요하다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;SSL 인증서란 &lt;/span&gt;&lt;/b&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;인증서에는 인증서 소유자의 email, 소유자 이름, 인증서 용도, 인증서 유효기간, 발행기관, public key 등이&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;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Https는 이미 많이 사용되고있다&lt;/p&gt;&lt;p&gt;구글 크롬, 파이어폭스등에서 이미 HTTPS가 적용되지 않은 사이트는안전하지 않은 사이트로 경고를 보여주고&lt;/p&gt;&lt;p&gt;실제 많은 사이트들이 https가 적용되어있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SSL의 장점은 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래는 https ssl 이 적용된 사이트(공인된 CA의 인증서)&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAiCAIAAAA70xesAAAD5ElEQVRoge2ZPU/bQBjHs+cT9BuUT0D3DGzNGJW9nbIwwEq2LJGMFBAglZqXYieykEI8gMSCFClRxOAItTVYgiR2rIuUIaIdwnYd/HY+Oz7nDcft/fUfsH2+3D0/33OPTaKtqh1NM9zt9Qyrum5Y03VN11Vdty8ZLdua9qyqttuq2lbVerNZEoQfsiwriuEH6483869Ae9s/IH5UlEdlnmo0GtVqVZblufaqKIqSeFLVtqYZ7vR6hru63rXIqbre1XX70rOmGX5SVcxKu12+uLi6uQmOHdE/LU9xC9G+FDFy8+Iny7Ioire3t/PozKXE6Tl3xvOGv5dKts/dNs/zpTOOP+P4U44/Oedsn1o+Oj7ZOzjcOzz8enxsmg30pM3CNA7X1RHib5bZmDjxmyqGothiKYotlqLYYikyNkmSKpVKmWqZRMB2f39fq9VeXl4g1TKJgO3y8vL19TXqQVLhImArl8tRj5DKRxRbLEWxxVIUmymO46IewgSi2Ez9X9iGoz9b13srO+srO+tb13uzDQYITFYA4dpKTJJteU832VRBmqbP8diAwGB9Rq9ZsW1e7a6xG50h6AzBGruxebUb6mdBNZNLJQ0z1b51FgtxX8wm7WaWzQj+29gGtWKxNkBOyPw2LzuHs2J7l//YGZpR6QzBe+YTeUygmsk5oeyLWYvc2BD3xWxGdF9wYWsVPHStB2KB2PpiFn10sMNZhEHyUpwVWzKXCjj0VZNNuRnYkR0bYucWiXGohIpRHLERqc2GbXX/s/cZ/3DwJXhQgdiMTtyBNjMq00R78SZJlKjTw5g+PSJhcxa0gbDJOlPOiAA7hLBVyGUFgN+FTMee0aBW3EapDGpFNzWZN64DPp3INyCEM2LzyUu5FHnBTZYkW4VcqiChzSCEHmwS47pqRm1cnz4KxmY/NOgwAlebAcx61JwpI2sXVAUJerAFbGuAT6d5AGE02GDYksSYvL00myzS+G2xIUmyVUARBmHDy6uMCMgFTmAxYnOLCJu/sBADgcHSqXuTC5sklwobdAoov42QsK2Z3MAyYwvUmBeAqbVobJ4dHTZZLzliMQL4dJpv8FFhcyaPjskXm3+F5oPNrj4wL2q1+SRqbG9DU7p5V6tgtbHm5extpLc1CCFs5BP5fH7+leTq/ueAW3wmT1LowtqX+gKTpJ3usOznVJIi4310nG8IJlQbWxhqEDbyiUQ6qm+SMcI2nfAkSZZV51vyvAggihCbf4L1EvL9xIW899haUJKcThNjI79jI6L/ATAVObaJRLHFUhRbLEWxxVIEbJVKZTQaRT1IKlwEbHd3d/V6PepBUuH6C0959pYdgzNsAAAAAElFTkSuQmCCAA==&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래는 https ssl 이 적용되지 않은 사이트&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAgCAIAAAB2G7anAAAC90lEQVRoge2bO46rMBSGvUN6t/YizAqovI2gSEYiS0CRQkGRKJtAoouFlOl8CxJi/MCGwGW4138zAr+Oz8c5fswM4EE7FOh+XK/XPM+PQTsR4Jzf7/fz+fx4PETQTgQ456fT6efnZ2tLgiYIcM6Px+PWZgRNU8C2SwVsu1TAtpkOh8Pstm5sbdtmWRbHMYQQQhjHcZZlbdvOHjKo04rYiqLAGEMIKaWMMcYYpRRCiDEuimLWiHUaRWntV7dMQFJ6dLFAny5NGcJPa2ErigJCSAhpmkZ+3zQNIQRCWFXVWN91GoG3PlNW5y/X6vVy7Fxsxj5fNZzY5MafmjZsZWKx3alVsLVtizEmhPRvuiTZPxJCMMbWbFmn0ZDV+8n62RoKBi7WHdTTmN2nw+wy6SkYhygToL2s08iP3CrYGGMQQjnOFGxN00AIGWPGfrUJ9dO2uvjTRAbk5YHFsGlm97X7GJTLfx82QgildLwxpTSOY2PRKDZ9/v3r4YQNLpaQ2hPvoLbSw3xsfy1JduTfPUdpLQ3TGWHFpkeSEm3iHZH2of2T5Mu9w0a6iwcUPBJvN1nnp2A125Ukv9I4Nnl9B7IVIErr9bCJ4do+FhllIpWrD7KLVY/rETwo7z/awXiLbEmMex7TqjsiV7RJBmvem5AkdWyUUnnP4icFmxpgQlnkfLGN7BeGzaYfAJYPNCHEfGwgKVfbktj1zRnLP0kOFzX5yYXtU24KKfWzmRVnnVbB1rYtQkjecegHAITQ6HWJ0UNmbOb918wtiakzS+x5Gm2W1ejtsIn3cTuOY/243d11OY7b33vAV0vekmgp1R5DvxObEKIoCoRQd7mVZVmWZd3lFkLIxUz8A9jU477ScC1sbnldJTPGutus7q6LMeZ3lWy519D25GJsa+YDc2FsUng5o22Ntc2t8IubzRSw/XcK2HapgG2XApzzPM+fz+fWlgRNEOCcV1V1uVy2tiRogl5/TH673cIfk+9IYO1/MghaQwHbLhWw7VJ/AG2ITi6JXQc0AAAAAElFTkSuQmCCAA==&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래는 https ssl&amp;nbsp; 적용되었지만, 인증서가 보장되지 않은 사설인증(사설 CA)일경우..&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;자 이제 Https 통신을 구현을 위한 ssl 인증서를 발급해보자 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 ssl 인증서를 발급을 하기위해선 openssl이 필요하다 .&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해당 툴이 없다면 아래링크를 통해 설치하자 ( 저는 Window 기준입니다.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;설치가 완료되면, C드라이브 바로 아래 경로에 압축을 풀어주고 ,&lt;/p&gt;&lt;p&gt;해당파일/bin/openssl.exe를 실헹합니다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;(안되시는분들은 cmd 로 해당 경로 이동 후 ,&amp;nbsp; openssl.exe 혹은 관리자권한으로 실행해보세요)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;1. 개인키 , 공개키 발급&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실행이 됬다면, 먼저 PrivateKey를 생성해줍니다.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWoAAAAYCAIAAABcJyDKAAADIUlEQVR4nO2c2W7bMBBF9cHpgu6pf05f4SZtgKIoUBRo4yWrTc5DH1qnssjZqMVWcs+TItIzZ4bWIMji6uI2rCO9ms0qAABwcbYKy0AvMT4AAF7mi7DY0IuPGB8AACfz3xgfAIAi/o2PU4wPAICT+SW++wAAFPEJP/sAAJRxvgrL7f/fvNQ7hshVN1Dvc5sfloYwPGa6H43Q0kfAY60rxfIcZVthf8SsXNyE1e7vPh4CDXESzZiWa1nj6bxXmnSpWujzCIyQrpeijv9NVfzstCZFP++Hb9twRfR6NrM/umX0Oz6GMDx++ip55NZN5aQm4Wl/jtJHqf/x8SOEG6K3/PhoXchOrZuWWSCoq1UZy27KZLts90+DcHGE+15UJW/ejkqCDHdtb0WryWmc1N/lI+9Xl2R5wb8grz1XNi+31MpbdXk//Arhjui9+N2HUUW+rnINtdyX/dU9Xk/Vv+Jbz8nYC2nRr3/Ft3o4H2P5aWrhOluFkJQTsHha4lheYinKnkKQb8VRz8V7OnssQ9gQfSgdH6mB2m5ON72fKhlDcXvSa5d/c6daZppC9uzLX/Cxbyj2ycb3plNLzsYUkmaXjH0T+uzy5+I0N3AOcorUU87LbVCTZrgOYdthfMiFdbmWlwSBAh/LfjWjS96O199iO7SPq29lKeRX9ehZ0KtsCi5Oc4MxneAp96qssRLXMf4dHxVfqtqOIa7tSyr1Pr34qJJCHBcj9HlQn+aXxrxl2ulq3UANznnKAml87iVqTGOLvD0veK2DdYyb3fioxHZwJyF4W/bLcbKpi6vt4s/JW+rq4izEcfVTLqHMx16vK2+9jypfJ7SWuP1GT0tq1Z+LYxF2FWvpklqXlUWM90TvxH/Y75Tg0KT9OqQNMDD1Y5q6v4OfMd4SveHHRw8j6tA8ghKeDlM/rKn7+/ge4xXh08YAAH6+xrgmfNoYAMDPlxCXRM8xPgAAXj5v4iLSM4wPAICX8/u4iHSCz/sAAHg5u4uXgU5O23/3cfw/Nx5Isk7ILo0jM3IKu8ZBTLj+c+fV2qDGkZPKG2wVKCmO4XxVmqp/AP9cnhuUcQmjAAAAAElFTkSuQmCCAA==&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;genrsa -des3 -out 키이름 2048&lt;/u&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;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb8AAACBCAIAAADfdiNMAAANpElEQVR4nO2d25bcNg5F9bPJSlacOJP43j+nn5kZr0nixI6v3XyYh0qX2SQBHECURFWd/cSiQOAApNBVqy49vfmcHr+6mQghhLj480v6+eaf7jnfs0agOcOcl4zPl9ZQODLLt0Yp6QVwqXnVIPdRsxT4LUZQ/rpLv9zcTFlx1yho7hMZ6zKuc8uXZK3UeQM2CNclqfEPVfjeKRrlvufhcniX0q83N3jnitG3e66hcHx6pbxx6Y6yU4fQid9H9a3E7tmf9yk9lbtnMdC3pJhEWqGyc+amgruei2keMlx/7UTyo8x7MSV54y6UpIiRxngpiiLXfmr9Lj26vXlJF6/oD8TFYzXjSpeKuNPi83DVfEzpufrcE9wJfTy1zhMyr4s3bbw6Tf2TfPIkMXgiBX31T3Kp19MDpl+HVsbNLJSgkgBEJ+IHWYIkhYdQxBd+zH3x7g55wOeUXkS7Z70B5mmTdqueryWBriSbeuzSn1uaadYhdJ299Ct6cIOwnqZ/bzgz5aZPJWjzElg3pc4u/ZKf3EDSoIeodepxJQMzKGnwZUH3rL2ZC8GxfkkRENCD2JsRXeJxvPoRtWvrcdUtFkJf1VFnoFbNEJKf3AAMp+jUaxUrLNE4dc9J3mnzNKwxxi+ZzA/poscUqfhxsUGdV9WTPwTjxmTXV+cM07mkUxdQ+5eWmD7BEnlrHlhLHHy+756Tehqkg6hsG2Kv+2mGDm/2Ev2SeCSvJZoVP6566inE9OD5uuLODzHFzxXFJcke1ImENvVLfhDBrmSRKpl5EZRPKT270b5rdOj61sdlTzUE4OjbdHT9xMGHlJ7I3fMC/kBdQArXw9E36+j6iY936Z/vGhFCCHHwNn39njshhBCUP1P6id2TEEK8vLlLP7J7EkKIlzd36RF/35MQQrz8cZsevSw/7zn+O4YriZwrmpe2EbNxCFzGLkqk+kv7VRiYfvSgugGWgRFihP01CZTuEHkFOXfPPM9Bcl711CKez2OlONucki7+uyjc5WxI9W/uRb0QWYuEBq8G6jPIHYfgknqgvCL8fpt+eLH673sG2EuDq3sG7sa96CVv2O5ZNMqp9Yete/dcbr9k1S6we37l99v06GXZPXPqI1hMFgt1+6kqKOLfa9/UU4dW8i3G0sKmMeK8kBqrTzMuUh/THkmhOa79eEsUE1BHb9YztwHFuOqm1BlPCvfftEdSU3Sa/vNL0ljKS7EPFG1/Tu8aSaKRSoHVLLbWVWhdWEyP7rkW2ZQd9q+MzUBgXKSeS/SDdQ6EQKLXYhBt08P99UY096U5442iBPWOzXBg3cJxF+Y1OqfPe9bq82rm5DbSuLZvum0uKewl2evtSlOkHrepH1HerEMzNJhvLUnysFA/XgdFqhepLHXdaj2SgSuoJECfCaQmBfWOzXDNsnSMC+YFyh6O03eNpEyklAI7ZxbXVU1wV0BtpqS1/ZvLl+dr1h/ErIkSIhCu6aeY1P2vtF/4DMLC/fXmlW/iBOxpOC6Yl2Q/Ou9T+vVGfM+9YzXNYkn2C3dlfohUB91VIF+Xf3N5fbWZlLeevfTrfqT6NyfxoEqOgbXe0OYM6L/pB9HcXAKWNBcpaV4y7pjX0HxK6Wn1+551MmAVdHulvvXmFZearpoLpeoju9LMPVYHM4TpXMlXiSiVpc7ODK2IrwWYfpTQeFypCEj1QJ1NzWbc5iXTv+JH8VyPm5qRvCS3tZN8smmv+PHa6+IH4nNKzy/3m5rIaduYQWRsjHQ37qPm4hjwnF8FX7Lflr9IhvqbNpSYDbi2fHeEpd6Bi++ehBCyCpf9yp0QQtbiY/auESGEEJS/+Z85CCEkwF8pPWb3JIQQL398+fr7noQQQlD+9zF9/4zdkxBCnLx+n757wu5JSE+kz11658nQ/Odd+vYXdk9CesLueRX8++3dN+yehHRirojNkwPA7klId/jc8yrgK3dCusPueRW8fp++e1r+Ql1hw3nOcx6fJ9fCb5/SDy/YPTnP+W7z5Fp4c5t+4neNCCHEy+n/Gu2tghBCjsbf9//XiBBCiIOPKT1j9ySEEC/8bXlCCIlwm9JLdk9CCPFyl9INuychhHhJ7J6EEBKA3ZMQQiKwe+6C9B0V7zwhZDfYPXeB3ZOQw8PuuTFzRWyeELIz7J67wOeehBweds9dYPck5PDk3dP7S1ycj80TQi4Bdk92T0JIBL5yJ4SQCOyehBASgd2TEEIisHsSQkgEdk9CCInA7kkIIRHYPQkhJELf7ql8wnHO6BVue1bVv0FxLmALai4vI3IMuj/31I9yl4O+460ifSp+Pefd2b7XeMMF7Nk9yQ4crnuOdqt01HOR3dMbLiBvtCNBroVT98zPXz1uvtxD5ptP00A/TeaKJX7qh7kHxH8vPXW4wklMT9PVwrx0/Qvr47Wvy0LIdiDdsx7nNE+5tMRl3KRp5vWDyADv1S56EKlNPUqsLuM8NCKyNnatlew71pOQboS75/yQYr65xHSC3BVd7i6lO+RKTP26HldeulRFp5R7l7FUB0mnd76uz9r1JKQbse4pjfVLujGIcnfhPpXuoC83M8I1gLjy7T6u6+NV692vtetJSDfG6Z7gHZLf2Igelx9zuZLRQj14RDBWl3GzRLpIqZ5gfdauJyHdOL/nPt8zASfYtM+vFvbFpXrGpGnv9aPk2HQi6e+lRxGp69Fz0e2lEPrDJVJNPab9knoS0hN+14gQQiKwexJCSAR2T0IIicDuSQghEdg9CSEkArsnIYREYPckhJAIC7tnl8/fSZ83rD/iJ81P6ucWpSWIKskV7kRKFvSvx5X8g/IIIXF2755SU2i6RealsUutvhD0U5tJfrzzugw2UEK2YN9X7ku6JOJzja4332N6wP3E5hUZbKCErE79TU3wrtMbRLhPxeZBm/ByqW0VxvpDxA84j6QDbgEhJIj+KyEmyv2MtyqpL+DzxVVEKphRMTlXTbPudIoryY93HskIzJcQEiTvnkpjkkBaBrhcWthlHlelLJcapVQ0qTjN5uiaR5JybQQhxM1dSq8ePvd04W1tipnXFT7vzU7pek2D4mrAj3fezIutk5DVqbun68ZT7mfEj2TfaxzIqLkESROJK/nxzut5BfIlhLi5S+nl4neN6m4S87PG/BTtJs1W1Uy2XiIVR/LjnTf9e5MlhLg5d09CCCEOblN6we5JCCFe2D0JISQCuychhES4Tek5uychhHhh9ySEkAjsnoQQEuHUPevPD/Izgzlj1mRAVaPpIWRFzu8a1R+6Ntde1X0yWl846xlKWBcx46RDiIbUPU2Gumk3YLR8R9PTiwHzGvA5PhmCZvechW8EnlcpL/P1yQm7PQpj039gPhZ3qgol5bWqzjqc7kfRqTsvXHnzrdeCOvVLunhFfyBu0wkh0zRNdw+7Z3FQzNNfeEPswbOouNINQP3euLnspo2U1xo654eYsRCdXtlNP7geZInLD7IESQoPQa6d4ldCTpP6CWs+zCdz6kvS2qYraSz51/0gmDeYpGeJTqVuiE5TvKIT8Y/kqwTV9WxQn0Jw7Sc3kDQQUtLsnmfM06/Y45dM++L0BwTg0aUQyNh0IukJ3K5d9gv0b6YjRQkU0LWtXv2Sn9xAkuQVQC6f0+97Tq0TM2GnfMldoWCe/iVjb1yv2411mnFxt64UEFVzhksnLqD2Ly0xfdZmkn9CHvw6csG04NRK5w8/grWYOmgtD9Tjjdt8qDtfVScSd16h/mDcZnTJvjbw1se0N0uBCCak5G7X/0issNcJ5p1z4uh1OLp+cgD2/X/uEsoTjYuMOxpHr8PR9ZNjMGb3JISQ0WH3JISQCOyehBASgd2TEEIisHsSQkiEU/fM353s8k4l/rm8gJ/tmVvsLWogxqzJgKpG00MWsVn3PM+4/I9z2goliKpBlG/DODt1Inbe1qbXzdVBClnOSt2zZqhDHOCgz5o3Y7R8R9PTiwHzGvA5/kaY3XPOqCdB+9qsOV+PFedN/01JXSi06XrmiualsPjC2PQfmI/FnYRNrPNaVWcdTvej6NSdF668+dZrQZ36JV28oj8Qt+nkWtC7p7m7k1A7vfqSJejHpbNJfRq8S8y4TZ/hekp6ArGW1M1cnqcA5rWGzvkhZixEp1d20w+uB1ni8oMsQZLCQ1w+SPfMOS/MZ8xT0pyRwimrzN1VAi2kCGHGbcoI19PUMwtbpusBY+FxFT1LdCp1Q3Sa4hWdiH8kXyWormeD+hSCaz+5gaThGsGfexboFTTPTXPeXIXoXGlrlVNrStUnzUumfX649ToguxCIC45NJ5KewJ522S/Qv5mOFCVQQNe2evVLfnIDSZJXwCVw/o2lOeN8NXza6quKfTO0GVTawpU2sg6H6FFsXPXU9bhigXpccb1uN9ZpxsXdulJAVM0ZLp24gNq/tMT0WZtJ/q+C2/vflp+AFwX6ZH2p2BW9xEoIc3cVP12oxSB6mil76wlKagat5YF6vHGbD3Xnq+pE4s4r1B+M24wu2dcG3vqY9mYpEMHXyOeUng/wXaOF+1Gf4B6ihmavNK+kvCZHr8PR9Q/Bh5Se7Nc9lT+YO7oan72SvaoiKxy9DkfXPwpvU/p5gOeehBByMN58SY9esHsSQoiT3z6k75+wexJCiJPX79K3/2L3JIQQJ/99m755/GpvFYQQcjD+D2V4lO8gIcYRAAAAAElFTkSuQmCCAA==&quot; alt=&quot;&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&gt;https의 ssl 인증서에는 서비스등록할때마다, 비밀번호를 입력해줘야하기 때문에, &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;/b&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;genrsa&amp;nbsp; -out 키이름 2048&lt;/u&gt;&lt;/p&gt;&lt;p&gt;비밀번호가 없는 private키를 새롭게 발급하였다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;생성된 private.key를 확인해보면 아래와 같은 키가 생겨있는걸 알수 있다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 아래 명령어로 해당 개인키와 쌍이되는 공개키를 뽑아내보자&lt;/p&gt;&lt;p&gt;rsa -in &amp;lt;개인키&amp;gt; -pubout -out public.key&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbsAAAAkCAIAAACfTANrAAAFiUlEQVR4nO2dbU8bRxSF9y82Uj4kVZGqVKpIm5ISJanKD8pLgypVrdQ0IXabEEoq3pJACKEYCLUN2A4EgwnEc/vBlK52Z+7c2Z3FaziP/GE9O3vvuWfxkYWDE5QOaLVN/xA1lfp2aCgAAABgYv49LbZo+YDeKzWAxAQAAIbpdZpt0EKTtg7VN98jMQEAwMyfKzRVodkGNQ7U198hMQEAwMzj1zS+SjPrVN9XX91EYgIAgJnCbPvpEk2WqbavLt84Sszif2TRsRjCum7afHwqC4VZ0C21OXEp058oj/SKzm7B+MO8VIPUP4c5ui8jLz8++ZsmylRrqf7rQ0FotiwkhmtKjnkZeTFRQE8nphflvXKzPOrs1ryZ9uX9ySgxvVTww8hsezSUmPK0SobfxMxCIYjgy+FeuVO9Pm/Wfbv1eszLz09hjp6WaLJCtX0uMSMH8T3MoiT+GDusTkmsDCuR6GfWXXHyhy8SxPx3nSt+rZNOiW/WEbTH8TqMVDm8b9riTvNKhkos/gT6evRHu9mkn1m3StUem+qbVCXn93kaW6GpqiUxTccSl02OR5TI70Ecpz3hRhJb5cUjMEUS3E7hvUjfl7nEi37rIAlaMP4zXsn7SjRLfHPVn3VfUylXf6zdnYrwOhP44OoJx5NFGn9L0xupEjOMUK7Q2fiKvJR2G2+6dr8Xu9PfTt7e+FyufU3zMrfPyR+muLVvmlugrWP1QbhfWCcxJ9DXiz/W7unNKYbQLjrpTM7YCk2U6XmN6vvq8o1U7zHj46U/5k8xAnhJ1rPe7U5fX2hXsr5C//lFoX6heF+3QFtHOK91v6tvXsT77evFH2v39OZItJk6erkXR0yUaWaTZreocXD07zG1ykwKXO+o67H8lBXt5gR6kiEfSlJBfnn8bDGERM/xU7mAeH3TJcI6afx37eu039U3L+L99vXij/Yssy4pwlSW6AzXSey/hpd1mtum17v07vD/v/lhFMdPMYvaSUxjWItHzjoZwXhn1ePai6mvLSgszphgnSuygd8f38D7w5fSrghHYNTK4U2IzBs50O43+RCXys+VQH8WfbPwJ3xKsm6SZFoR1olv9sDCLi22qPSBttuWvyv33Bg4cjb9Tz/12fRNzun2x/90K4e02qY1oh32u4usQQ4y5az572ves+abK6fVnwznKhNViKr4fkwAALCySdR57Ck1iMQEAACGBlHn0VLqGhITAAAY3hF1HkhMAACw0IlLvMcEAAA7NaLOI+XvMV0/lsro47liDO2pxGJO5QeLAAApFUUVogpRU6mrvhOTSZbscidc+fhYuxh+6hqa/vQCAHqH0h4tt2i5RduH6orX/+enW8nilJhMkkrqAwDOFnMbNLdJr2pUb6n+a5bvx4ynT2B4j1aM4bQ/rJBprcWamNbNCeqb5krWAgCQU54t0bMS/bVM1W31xRXRdxdZc8G0wpzlY0hSMFIqLtJXnEV8sNZBYgJweng00y48bxdfqLebqu/LoXAcBIb3UIEsH7ubmKb9phgNTyepL6+TYAQAQE75ZazZeSyVP1z4/Ho4bgKXV3sOEzMwpKev+sJrkZgAnB6GC43hQv3eo9rC6u75zwYD83u0xImpvVCYmMdPj7FOdGKJKakfH8FaHwCQX+4+3Lz9YP3W/ep8qXnu4kDApgCTfdoN2ku0+yXJJUmcSEfrCJK+aeq76gcA5Jq7I7XbD9Zv3a+8Ku18cnGg23KiuCZabulp8QCAI4b/2PqhUL8zsjG/3Dz36dVuy9Fgfe+WZ3paPAAgys/jez+NNX8c3X6z1jrfN9htOQAAkGMevlC/TX/8dfKgVD28cOlmt+UAAECOGVui0UV6vEBrddXXj+8uAgAAMzNVmqrQZIWqO+rSABITAACM/AslUY6UNk6ImgAAAABJRU5ErkJgggA=&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&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;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;2. CSR( 인증요청서 &lt;/span&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;) 만들기 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CSR이란 ? &lt;br /&gt;&lt;/p&gt;&lt;p&gt;SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게하는 신청서입니다.&lt;/p&gt;&lt;p&gt;정보항목에는 국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소 등이 들어가있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음 명령어로 CSR을 생성합니다.&lt;/p&gt;&lt;p&gt;&lt;u&gt;req -new -key private.key -out private.csr&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;req -new -key &amp;lt;키&amp;gt; -out CSR이름csr&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&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&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. CRT( 인증서 &lt;/span&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;) 만들기 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;CSR까지 생성했다면, CRT는 그냥 만들수 있지만, &lt;br /&gt;&lt;/p&gt;&lt;p&gt;나는 나만의 사설 CA에서 인증까지 받은 인증서를 만들어보려고한다.&lt;/p&gt;&lt;p&gt;먼저 인증서의 서명을 해줄 rootCA가 필요하다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3-1&amp;gt; rootCA.key 생성하기! &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;genrsa -aes256 -out rootCA.key 2048&lt;/b&gt;&lt;/p&gt;&lt;p&gt;genrsa &amp;lt;암호화 알고리즘&amp;gt; -out 키이름 2048&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3-2&amp;gt; rootCA 사설 CSR 생성하기&lt;/p&gt;&lt;p&gt;rootCA.key를 사용하여 10년 짜리 rootCA.pem을 생성한다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(임시로 국가,도시, 회사, 도메인,메일 등을 입력했습니다.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3-3&amp;gt; CRT 생성&lt;/p&gt;&lt;p&gt;[2]에서 만들었던 csr을 나만의 커스텀 CA인 rootCA의 인증을 받아 private.crt로 생성합니다.&lt;/p&gt;&lt;p&gt;x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&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;파일을 확인해보면 CRT를 확인할수 있습니다! &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&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 style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 471px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C72D3C5A71E88414&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C72D3C5A71E88414&quot; width=&quot;471&quot; height=&quot;479&quot; filename=&quot;캡처.PNG&quot; filemime=&quot;image/png&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;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저는 TOMCAT에 인증서를 적용할것이기 때문에 pkcs12라는 형식으로 바꿔줍니다.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;1. &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 11pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;pkcs12 -export -in private.crt -inkey private.key -out .keystore -name tomcat&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: &amp;quot;Trebuchet MS&amp;quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; 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; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;&quot;&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;자이제 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;.keystore를 사용하여 SSL 통신을 구현할 수 있습니다.&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;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://joonjava.blogspot.kr/2015/05/tomcat-ssl-2-ca.html&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;https://blog.hangadac.com/2017/07/31/%ED%99%88%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B8%B0-ssl-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%97%B0%EC%8A%B5/&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;해당 본문 내용은 openssl을 사용한 &lt;b&gt;사설&lt;/b&gt; 인증서 발급 방법 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;보통 공인 ssl 인증서의 경우는 도메인 및 기타비용이 필요할수 있습니다.&lt;/p&gt;&lt;p&gt;공인 ssl 발급을 원하시는경우 아래 링크를 참조하세요&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://trend21c.tistory.com/777&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://trend21c.tistory.com/777&lt;/a&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;br /&gt;&lt;/p&gt;</description>
      <category>개발일지</category>
      <author>남잭슨</author>
      <guid isPermaLink="true">https://namjackson.tistory.com/24</guid>
      <comments>https://namjackson.tistory.com/24#entry24comment</comments>
      <pubDate>Wed, 31 Jan 2018 18:04:22 +0900</pubDate>
    </item>
  </channel>
</rss>