<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Choi's Blog</title>
    <link>https://stylishc.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 04:11:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>oh-yes</managingEditor>
    <item>
      <title>20210728</title>
      <link>https://stylishc.tistory.com/157</link>
      <description>&lt;h2&gt;데이터 중심 어플리케이션 설계 - 07장 트랜잭션 읽기&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;격리성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;동시에 실행되는 트랜잭션은 서로 격리된다는 것을 의미&lt;/li&gt;
&lt;li&gt;고전적인 데이터베이스 용어에서는 &lt;code&gt;격리성 == 직렬성&lt;/code&gt;의 의미를 가지기도 함&lt;/li&gt;
&lt;li&gt;직렬성(&lt;code&gt;serializable&lt;/code&gt;)이란 실제로 여러 트랜잭션이 동시에 실행됐더라도 트랜잭션 커밋의 결과가 트랜잭션이 순차 실행됐을때와 동일하도록 보장&lt;/li&gt;
&lt;li&gt;직렬성(&lt;code&gt;serializable&lt;/code&gt;) 격리는 일반적으로 성능 손해를 동반할 수 밖에 없기 때문에 거의 사용하지 않음. 실제는 보다 약한 스냅샷 격리를 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;지속성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;트랜잭션이 성공적으로 커밋되었다면 하드웨어 결함/데이터베이스가 죽더라도 트랜잭션에 기록한 데이터는 손실되지 않아야 함을 뜻함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;예를 들어 쓰기 전 로그(write-ahead log) 혹은 비슷한 수단을 통하여 쓰기 저장소가 오염될 경우 복원 처리&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;지속성을 보장하려면 커밋 전에 쓰기/복제가 완료될 때까지 기다려야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;더티 리드(Dirty Read)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;다른 트랜잭션에서 커밋되지 않은 데이터를 읽는 현상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RDB에서는 트랜잭션을 통하여 다중 객체(ROW)에 대한 어떤 읽기 연산/쓰기 연산이 있는지 식별하게 됨.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;비관계형 데이터베이스에서는 트랜잭션과 같은 연산을 묶는 방법이 없는 경우가 많은데, 대신 비슷하게 보이는 연산을 묶는 오퍼레이션을 제공하기도 함(예를 들어 레디스의 MULTI) 하지만, 원자성을 보장하는 연산은 아니라서 예를 들어 1과 2의 연산이 있을 때 1이 실패하더라도 2는 그대로 실행하게 된다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Isolation Level&lt;/th&gt;
&lt;th&gt;Dirty Read&lt;/th&gt;
&lt;th&gt;Non-Repeatable Read&lt;/th&gt;
&lt;th&gt;Phantom Read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Read Uncommitted&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read Committed&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatable Read&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serializable&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;고립수준은 Read Uncomitted 가 가장 낮고 Serializable이 가장 높음&lt;/li&gt;
&lt;li&gt;동시성 수준은 위와 반대&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/157</guid>
      <comments>https://stylishc.tistory.com/157#entry157comment</comments>
      <pubDate>Wed, 28 Jul 2021 23:21:10 +0900</pubDate>
    </item>
    <item>
      <title>20210727</title>
      <link>https://stylishc.tistory.com/156</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;블로그 정리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://memostack.tistory.com/98?category=806129&quot;&gt;MINIMAL SKIN&lt;/a&gt; 적용&lt;/li&gt;
&lt;li&gt;불필요 글 비공개 처리 및 태그 삭제&lt;/li&gt;
&lt;li&gt;KotlinInAction 제네릭스 관련 글 업로드&lt;/li&gt;
&lt;li&gt;@RequestParam 관련 요약 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 중심 어플리케이션 설계 - 07장 트랜잭션 읽기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션은 어플리케이션 구현 혹은 프로그래밍 모델의 난이도를 낮추기 위한 데이터 저장소의 장치&lt;/li&gt;
&lt;li&gt;현대적 의미에서의 트랜잭션은 과거와 많은 차이가 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분산 저장소를 지원하는 데이터베이스 고가용성과 높은 성능을 위해서 트랜잭션은 확장성을 해치는 안티테제로 여기는 믿음이 생김&lt;/li&gt;
&lt;li&gt;기존 데이터베이스 벤더에서는 &quot;값진 데이터&quot;와 &quot;중요 데이터&quot;를 필수적인 요건이라고 말하고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ACID의 의미 해석
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스별로 ACID에 대한 구현은 다음&lt;/li&gt;
&lt;li&gt;상위 개념은 동일하지만 악마는 세부사항에 숨겨져 있음&lt;/li&gt;
&lt;li&gt;일관성(Consistency)는 어플리케이션 종속적인 개념. 예를 들어 트랜잭션을 제대로 선언하지 않은 상황이라면 데이터베이스는 일관성을 유지 할 수 없음. 결국 데이터베이스를 사용하는 어플리케이션에서 데이터에 관한 선언이 우선되어야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/156</guid>
      <comments>https://stylishc.tistory.com/156#entry156comment</comments>
      <pubDate>Tue, 27 Jul 2021 23:28:13 +0900</pubDate>
    </item>
    <item>
      <title>MVC와 WebFlux에서의 @ReqeustParam</title>
      <link>https://stylishc.tistory.com/155</link>
      <description>&lt;h1&gt;MVC와 WebFlux에서의 @ReqeustParam&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Spring MVC&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spring MVC에서는 기본적으로 &lt;code&gt;querystring&lt;/code&gt;, &lt;code&gt;form-data&lt;/code&gt;, &lt;code&gt;multipart&lt;/code&gt; 요청에 대해 &lt;code&gt;@ReqeustParam&lt;/code&gt;으로 매핑이 가능하다.&lt;/li&gt;
&lt;li&gt;이는 서블릿 API에서 &lt;code&gt;querystring&lt;/code&gt;, &lt;code&gt;form-data(requestBody)&lt;/code&gt;를 parameters map에 같이 바인딩하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-framework/blob/f0f450a18dec7639ce8b967ed26c78cf777d4f7e/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java#L162&quot;&gt;RequestParamMethodArgumentResolver.resolveName&lt;/a&gt;을 살펴보면 간단하게 로직 확인이 가능하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Spring Webflux&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹플럭스에서는 querystring에서 대해서만 바인딩을 지원한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-framework/blob/f0f450a18dec7639ce8b967ed26c78cf777d4f7e/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolver.java#L101&quot;&gt;RequestParamMethodArgumentResolver.resolveNamedValue&lt;/a&gt;을 살펴보면 간단하게 로직 확인이 가능하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MVC에서처럼 querystring, form-data, multipart 모두 값을 받으려면 &lt;code&gt;@ModelAttribute&lt;/code&gt;를 이용해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html&quot;&gt;RequestParam (Spring Framework 5.3.7 API)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/Spring</category>
      <category>Spring Boot</category>
      <category>Spring MVC</category>
      <category>WebFlux</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/155</guid>
      <comments>https://stylishc.tistory.com/155#entry155comment</comments>
      <pubDate>Tue, 27 Jul 2021 19:50:36 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin-In-Action 9장 제네릭스</title>
      <link>https://stylishc.tistory.com/154</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;KOTLIN-IN-ACTION&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.13.11/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      
      &lt;style&gt;
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;src:local('Roboto Mono'),local('RobotoMono-Regular'),url(https://fonts.gstatic.com/s/robotomono/v7/L0x5DF4xlVMF-BfR8bXMIjhLq3o.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:300;src:local('Source Sans Pro Light'),local('SourceSansPro-Light'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:400;src:local('Source Sans Pro Regular'),local('SourceSansPro-Regular'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:600;src:local('Source Sans Pro SemiBold'),local('SourceSansPro-SemiBold'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format('truetype')}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{color:#34495e;border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(100vh - 61px);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:hsla(0,0%,53%,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:hsla(0,0%,53%,0.1)}.sidebar-toggle{background-color:transparent;background-color:hsla(0,0%,100%,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:hsla(0,0%,100%,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;background-color:#f0f0f0;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;9%EC%9E%A5-%EC%A0%9C%EB%84%A4%EB%A6%AD%EC%8A%A4&quot;&gt;9&amp;#xC7A5; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC2A4;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#xC2E4;&amp;#xCCB4;&amp;#xD654;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218; &amp;#xD638;&amp;#xCD9C;&amp;#xC5D0;&amp;#xC11C; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xC4F0;&amp;#xC778; &amp;#xAD6C;&amp;#xCCB4;&amp;#xC801;&amp;#xC778; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC2E4;&amp;#xD589;&amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC54C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#xC120;&amp;#xC5B8; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xAE30;&amp;#xC800; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &amp;#xAC19;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; &amp;#xB450; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785; &lt;code&gt;Type&amp;lt;A&amp;gt;&lt;/code&gt;&amp;#xC640; &lt;code&gt;Type&amp;lt;B&amp;gt;&lt;/code&gt;&amp;#xAC00; &amp;#xC788;&amp;#xC744; &amp;#xB54C; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790; A&amp;#xC640; B&amp;#xC758; &amp;#xC0C1;&amp;#xC704;/&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xB450; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC0C1;&amp;#xC704;/&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC5B4;&amp;#xB5BB;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xC9C0; &amp;#xC9C0;&amp;#xC815;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;List&amp;lt;Any&amp;gt;&lt;/code&gt;&amp;#xB97C; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xBC1B;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD588;&amp;#xC744; &amp;#xB54C;, &lt;code&gt;List&amp;lt;Int&amp;gt;&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xC804;&amp;#xB2EC;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xC9C0; &amp;#xC5EC;&amp;#xBD80;&amp;#xB97C; &amp;#xC120;&amp;#xC5B8; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xD1B5;&amp;#xD574; &amp;#xC9C0;&amp;#xC815;&amp;#xD560;&amp;#xC218; &amp;#xC788;&amp;#xC74C;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&lt;/code&gt;&amp;#xC740; &amp;#xAC19;&amp;#xC740; &amp;#xBAA9;&amp;#xD45C;(&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785; &amp;#xAC12; &amp;#xC0AC;&amp;#xC774;&amp;#xC758; &amp;#xC0C1;&amp;#xC704;/&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4; &amp;#xC9C0;&amp;#xC815;)&amp;#xB97C; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785; &amp;#xAC12;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC81C;&amp;#xC57D;&amp;#xC744; &amp;#xD45C;&amp;#xC2DC;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC73C;&amp;#xB85C; &amp;#xB2EC;&amp;#xC131;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%A0%9C%EB%84%A4%EB%A6%AD-%ED%83%80%EC%9E%85-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0&quot;&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xAD6C;&amp;#xCCB4;&amp;#xC801;&amp;#xC778; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;(Type Argument)&amp;#xB85C; &amp;#xCE58;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xBA85;&amp;#xD655;&amp;#xD558;&amp;#xAC8C; &lt;code&gt;&amp;#xBB38;&amp;#xC790;&amp;#xC5F4;&amp;#xC744; &amp;#xB2F4;&amp;#xB294; &amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8; = List&amp;lt;String&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xBCC0;&amp;#xC218;&amp;#xB85C; &lt;code&gt;Map&amp;lt;K, V&amp;gt;&lt;/code&gt;&amp;#xD615;&amp;#xD0DC;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xC774; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xACE0;, &amp;#xC774;&amp;#xB97C; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xD654; &amp;#xD560;&amp;#xB54C; &lt;code&gt;Map&amp;lt;String, Person&amp;gt;&lt;/code&gt;&amp;#xCC98;&amp;#xB7FC; &amp;#xAD6C;&amp;#xCCB4;&amp;#xC801;&amp;#xC778; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xB118;&amp;#xACA8; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xD654; &amp;#xD560;&amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xBCF4;&amp;#xD1B5; &amp;#xD0C0;&amp;#xC785;&amp;#xACFC; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB3C4; &amp;#xCD94;&amp;#xB860;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; authors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;John&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Sveltna&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xBE48; &amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xCD94;&amp;#xB860;&amp;#xD560; &amp;#xAC12;&amp;#xC774; &amp;#xC5C6;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC9C1;&amp;#xC811; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBA85;&amp;#xC2DC; &amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; authors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;emptyList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; authors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; emptyList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD560; &amp;#xB54C;&amp;#xB294; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xAD6C;&amp;#xCCB4; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xB118;&amp;#xACA8;&amp;#xC918;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xB370;, &amp;#xB300;&amp;#xD45C;&amp;#xC801;&amp;#xC778; &amp;#xC608;&amp;#xB85C;&amp;#xB294; &amp;#xCEEC;&amp;#xB809;&amp;#xC158;&amp;#xC744; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xB4E4;&amp;#xC774; &amp;#xADF8; &amp;#xC608;&amp;#xC2DC;&amp;#xC774;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt;&amp;#xC758; slice &amp;#xD655;&amp;#xC7A5; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xC608;&amp;#xB85C; &amp;#xB4E4;&amp;#xBA74;, &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; T&amp;#xAC00; &amp;#xC218;&amp;#xC2E0;&amp;#xAC1D;&amp;#xCCB4;&amp;#xC640; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xB41C;&amp;#xB2E4;. &lt;strong&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xCD94;&amp;#xB860;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD55C; &amp;#xAD6C;&amp;#xCCB4; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC2DC;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xC9C0;&amp;#xC815;&amp;#xC774; &amp;#xBD88;&amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;indices&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; IntRange&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xC120;&amp;#xC5B8;&amp;#xC740; &lt;code&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&lt;/code&gt;, &lt;code&gt;&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&lt;/code&gt;, &lt;code&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;/&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xC758; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&lt;/code&gt;, &lt;code&gt;&amp;#xD655;&amp;#xC7A5; &amp;#xD568;&amp;#xC218;&lt;/code&gt;, &lt;code&gt;&amp;#xCD5C;&amp;#xC0C1;&amp;#xC704; &amp;#xD568;&amp;#xC218;&lt;/code&gt;&amp;#xC5D0;&amp;#xC11C; &amp;#xC120;&amp;#xC5B8;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &lt;code&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD655;&amp;#xC7A5; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&lt;/code&gt; &amp;#xC120;&amp;#xC5B8;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xD655;&amp;#xC7A5; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB9CC; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xBA70; &amp;#xC77C;&amp;#xBC18; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&amp;#xB294; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;penultimate&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T
	&lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;size &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC790;&amp;#xBC14;&amp;#xC640; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB97C; &amp;#xD655;&amp;#xC7A5;/&amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xAE30;&amp;#xC800; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xAD6C;&amp;#xCCB4; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBA85;&amp;#xC2DC;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xD639;&amp;#xC740; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB85C; &amp;#xBC1B;&amp;#xC740; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xB118;&amp;#xACA8;&amp;#xC918;&amp;#xC57C; &amp;#xD655;&amp;#xC7A5;/&amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; StringList&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; ArrayList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB9AC;&amp;#xBBF8;&amp;#xD130;&amp;#xB294; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC81C;&amp;#xD55C;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &lt;strong&gt;&amp;#xC0C1;&amp;#xD55C;(upper-bound)&lt;/strong&gt; &amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xBA70; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xD654; &amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0;&amp;#xB294; &amp;#xC0C1;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xAC70;&amp;#xB098; &amp;#xD639;&amp;#xC740; &amp;#xC0C1;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xB9CC; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &lt;strong&gt;&amp;#xC0C1;&amp;#xD55C;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC12;&amp;#xC740; &amp;#xC0C1;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xCDE8;&amp;#xAE09;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Number&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T &lt;span class=&quot;token comment&quot;&gt;// Kotlin&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T extend Number&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; T &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; list&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Java&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xB450; &amp;#xC778;&amp;#xC790;&amp;#xAC12; &amp;#xC911; &amp;#xD070; &amp;#xAC12;&amp;#xC744; &amp;#xCC3E;&amp;#xB294; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E0;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560;&amp;#xB54C;, Comparable &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD574;&amp;#xBCF4;&amp;#xC790;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Comparable&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;first&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; second&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; first.compareTo(second) &amp;gt; 0&amp;#xC73C;&amp;#xB85C; &amp;#xBCC0;&amp;#xD55C;&amp;#xB2E4;.&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;first &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; second&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; first &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; second
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;kotlin&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;java&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// kotlin&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;kotlin&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&amp;quot;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 42&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xC640; &amp;#xC77C;&amp;#xCE58;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C; &amp;#xC5D0;&amp;#xB7EC;&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xB450; &amp;#xAC00;&amp;#xC9C0; &amp;#xC774;&amp;#xC0C1;&amp;#xC758; &amp;#xC81C;&amp;#xC57D;&amp;#xC744; &amp;#xAC78;&amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;CharSequence&lt;/code&gt;&amp;#xC640; &lt;code&gt;Appendable&lt;/code&gt; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC81C;&amp;#xC57D;&amp;#xC744; &amp;#xAC74; &amp;#xC608;&amp;#xC81C;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ensureTraillingPeriod&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;seq&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; CharSequence&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Appendable &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;seq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;endsWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;apos;.&amp;apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; seq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;apos;.&amp;apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xBB34;&amp;#xB7F0; &amp;#xC0C1;&amp;#xD55C;&amp;#xC744; &amp;#xC815;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; &amp;#xAE30;&amp;#xBCF8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &lt;code&gt;&amp;lt;T: Any?&amp;gt;&lt;/code&gt;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xD55C; &amp;#xAC83;&amp;#xACFC; &amp;#xAC19;&amp;#xB2E4;. Nullable&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xACE0;&amp;#xC790; &amp;#xD55C;&amp;#xB2E4;&amp;#xBA74; &lt;code&gt;&amp;lt;T: Any&amp;gt;&lt;/code&gt;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xB9CC;&amp;#xC57D; &lt;code&gt;&amp;lt;T:Any&amp;gt;&lt;/code&gt;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xD574;&amp;#xB454; &amp;#xD0C0;&amp;#xC785;&amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC5D0; &lt;code&gt;String?&lt;/code&gt;&amp;#xB4F1;&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xB110; &amp;#xD5C8;&amp;#xC6A9; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; String?&amp;#xC740; Any&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C; &amp;#xC5D0;&amp;#xB7EC;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; A&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; T&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC0C1;&amp;#xD55C;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; `Nullable`&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		value&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; B&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Any&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; T&amp;#xC5D0; &amp;#xB300;&amp;#xD574; Any&amp;#xB85C; &amp;#xC0C1;&amp;#xD55C;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xC600;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; NonNull&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		value&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%8B%A4%ED%96%89-%EC%8B%9C-%EC%A0%9C%EB%84%A4%EB%A6%AD%EC%8A%A4%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%86%8C%EA%B1%B0%EB%90%9C-%ED%83%80%EC%9E%85-%ED%8C%8C%EB%A6%AC%EB%AF%B8%ED%84%B0%EC%99%80-%EC%8B%A4%EC%B2%B4%ED%99%94%EB%90%9C-%ED%83%80%EC%9E%85-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0&quot;&gt;&amp;#xC2E4;&amp;#xD589; &amp;#xC2DC; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC2A4;&amp;#xC758; &amp;#xB3D9;&amp;#xC791;: &amp;#xC18C;&amp;#xAC70;&amp;#xB41C; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB9AC;&amp;#xBBF8;&amp;#xD130;&amp;#xC640; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654;&amp;#xB41C; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JVM&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC740; &amp;#xD0C0;&amp;#xC785; &amp;#xC18C;&amp;#xAC70;(Type Erasure)&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574; &amp;#xAD6C;&amp;#xD604;&amp;#xB418;&amp;#xBA70; &amp;#xC2E4;&amp;#xD589; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xC5D0; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790; &amp;#xC815;&amp;#xBCF4;&amp;#xAC00; &amp;#xB4E4;&amp;#xC5B4;&amp;#xC788;&amp;#xC9C0; &amp;#xC54A;&amp;#xB2E4;&amp;#xB294; &amp;#xB73B;&amp;#xC774; &amp;#xB41C;&amp;#xB2E4;.
&lt;blockquote&gt;
&lt;p&gt;List&lt;string&gt;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784;&amp;#xC5D4; List&amp;#xB77C;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC815;&amp;#xBCF4;&amp;#xB9CC; &amp;#xB0A8;&amp;#xC744;&amp;#xBFD0; String &amp;#xC6D0;&amp;#xC18C;&amp;#xB97C; &amp;#xC800;&amp;#xC7A5;&amp;#xD558;&amp;#xB294;&amp;#xC9C0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xC54C;&amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xAC00; &amp;#xC9C0;&amp;#xC6CC;&amp;#xC9C0;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xB2E8;&amp;#xC810;&amp;#xB9CC; &amp;#xC788;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC544;&amp;#xB2C8;&amp;#xACE0; &amp;#xC804;&amp;#xBC18;&amp;#xC801;&amp;#xC778; &amp;#xBA54;&amp;#xBAA8;&amp;#xB9AC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xB7C9;&amp;#xC774; &amp;#xC904;&amp;#xC5B4;&amp;#xB4E4;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xB098;&amp;#xB984; &amp;#xC7A5;&amp;#xC810;&amp;#xB3C4; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/string&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; list1&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; list2&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Int&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC704; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xD1B5;&amp;#xD574; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xBA74;, list1&amp;#xACFC; list2&amp;#xB294; &amp;#xC2E4;&amp;#xC81C; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; List &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C;&amp;#xB9CC; &amp;#xCDE8;&amp;#xAE09;&amp;#xB418;&amp;#xBA70; List&amp;#xC758; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; String&amp;#xC778;&amp;#xC9C0; Int&amp;#xC778;&amp;#xC9C0;&amp;#xB294; &amp;#xCCB4;&amp;#xD06C;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xBD88;&amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &lt;code&gt;is&lt;/code&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785; &amp;#xAC80;&amp;#xC0AC;&amp;#xB4F1;&amp;#xC740; &amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;inline&lt;/code&gt; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xAC00; &amp;#xC9C0;&amp;#xC6CC;&amp;#xC9C0;&amp;#xC9C0; &amp;#xC54A;&amp;#xAC8C; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370; &amp;#xC774;&amp;#xB7EC;&amp;#xD55C; &amp;#xAC83;&amp;#xC744; &amp;#xAC00;&amp;#xB9AC;&amp;#xCF1C; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654;(reified)&amp;#xB77C;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC54C;&amp;#xC218; &amp;#xC5C6;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; &amp;#xC2A4;&amp;#xD0C0; &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xC158;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD3EC;&amp;#xD604;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC54C;&amp;#xC218; &amp;#xC5C6;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0;&amp;#xB3C4; &lt;code&gt;as&lt;/code&gt; &amp;#xD639;&amp;#xC740; &lt;code&gt;as?&lt;/code&gt; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&amp;#xC740; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&amp;#xD574;&amp;#xB3C4; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305; &amp;#xC790;&amp;#xCCB4;&amp;#xB97C; &amp;#xC131;&amp;#xACF5;&amp;#xD574;&amp;#xBC84;&amp;#xB9AC;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC774;&amp;#xC810;&amp;#xC740; &amp;#xC870;&amp;#xC2EC;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB798; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xBA74; &amp;#xCF54;&amp;#xB4DC; &amp;#xC790;&amp;#xCCB4;&amp;#xB294; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xC5D0; &amp;#xC131;&amp;#xACF5;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xB118;&amp;#xC5B4;&amp;#xC624;&amp;#xB294; &amp;#xAC12;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC5EC;&amp;#xB7EC; &amp;#xC608;&amp;#xC678; &amp;#xC0C1;&amp;#xD669;&amp;#xC744; &amp;#xB9DE;&amp;#xC774; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. Set &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xB118;&amp;#xAE30;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0; &amp;#xC5D8;&amp;#xBE44;&amp;#xC2A4; &amp;#xC774;&amp;#xD6C4;&amp;#xC5D0; &amp;#xC788;&amp;#xB294; &amp;#xC608;&amp;#xC678; &amp;#xCF54;&amp;#xB4DC;&amp;#xAC00; &amp;#xC2E4;&amp;#xD589;&amp;#xC774; &amp;#xB418;&amp;#xAC8C; &amp;#xB420;&amp;#xAC83;&amp;#xC774;&amp;#xACE0;, &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xB118;&amp;#xAE30;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&amp;#xC740; &amp;#xC131;&amp;#xACF5;&amp;#xD558;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC; sum() &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;ClassCastException&lt;/code&gt;&amp;#xC744; &amp;#xB9CC;&amp;#xB098;&amp;#xAC8C; &amp;#xB420; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;printSum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Collection&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; intList &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; c &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Int&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; 
	&lt;span class=&quot;token operator&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;List is Expected&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;intList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xB9CC;&amp;#xC57D; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xCD94;&amp;#xB860;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xB294; is &amp;#xAC80;&amp;#xC0AC;&amp;#xB97C; &amp;#xD5C8;&amp;#xC6A9;&amp;#xD574;&amp;#xC900;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;Collection&amp;lt;Int&amp;gt;&lt;/code&gt;&amp;#xB85C; &amp;#xB118;&amp;#xC5B4;&amp;#xC624;&amp;#xB294; &amp;#xC778;&amp;#xC790; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xCD94;&amp;#xB860;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; is &amp;#xAC80;&amp;#xC0AC;&amp;#xB97C; &amp;#xD5C8;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xD574;&amp;#xC900;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IDE&amp;#xC5D0;&amp;#xC11C; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &lt;em&gt;&lt;strong&gt;&amp;#xC548;&amp;#xC804;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD55C; is &amp;#xCCB4;&amp;#xD06C;&amp;#xB294; &amp;#xAE08;&amp;#xC9C0;&amp;#xD558;&amp;#xACE0; &amp;#xC704;&amp;#xD5D8;&amp;#xD55C; as &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&amp;#xC740; warning&amp;#xC744; &amp;#xCD9C;&amp;#xB825;&amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;printSumB&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Collection&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Int&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Int&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;inline&lt;/code&gt; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xC2E4;&amp;#xD589; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xC54C;&amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xB9CC;&amp;#xC57D; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xAC00; &amp;#xB78C;&amp;#xB2E4;&amp;#xB97C; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC775;&amp;#xBA85; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB098; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xC0DD;&amp;#xC131;&amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC131;&amp;#xB2A5;&amp;#xC0C1;&amp;#xC73C;&amp;#xB85C; &amp;#xC880; &amp;#xB354; &amp;#xB098;&amp;#xC544;&amp;#xC9C8; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xB294; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xBCF8;&amp;#xBB38;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD55C; &amp;#xBC14;&amp;#xC774;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xD568;&amp;#xC218;&amp;#xAC00; &amp;#xD638;&amp;#xCD9C;&amp;#xB418;&amp;#xB294; &amp;#xBAA8;&amp;#xB4E0; &amp;#xC9C0;&amp;#xC810;&amp;#xC5D0; &amp;#xC0BD;&amp;#xC785;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xACE0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xB294; &amp;#xD638;&amp;#xCD9C;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD574; &amp;#xD574;&amp;#xB2F9; &amp;#xD568;&amp;#xC218;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC815;&amp;#xD655;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xC54C;&amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Iterable.filterIsInstance &amp;#xD45C;&amp;#xC900; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xC608;&amp;#xC2DC;&amp;#xB85C; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xBA74;, &amp;#xC2E4;&amp;#xC81C; filterIsInstance&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xB294; &amp;#xD568;&amp;#xC218; &amp;#xB0B4;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; inline &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xD574;&amp;#xB2F9; &amp;#xD568;&amp;#xC218; &amp;#xBCF8;&amp;#xBB38;&amp;#xC758; &amp;#xBC14;&amp;#xC774;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&amp;#xAC00; &amp;#xD638;&amp;#xCD9C;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0; &amp;#xCC44;&amp;#xC6CC;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBCF8;&amp;#xBB38;&amp;#xC744; &amp;#xB300;&amp;#xCE58;&amp;#xD558;&amp;#xAC8C; &amp;#xB428;&amp;#xC73C;&amp;#xB85C;&amp;#xC368; &amp;#xC2E4;&amp;#xC81C; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC73C;&amp;#xB85C; &amp;#xB118;&amp;#xC5B4;&amp;#xAC04; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4; &amp;#xC5ED;&amp;#xC2DC; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xAC00; &amp;#xC9C0;&amp;#xC6CC;&amp;#xC9C0;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xC720;&amp;#xC9C0;&amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reifiedFilterList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;one&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;three&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;filterIsInstance&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// &amp;#xD568;&amp;#xC218; &amp;#xC120;&amp;#xC5B8;&amp;#xBD80;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;reified&lt;/span&gt; R&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; Iterable&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filterIsInstance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;R&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xC790;&amp;#xBC14;&amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, inline &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654;&amp;#xB41C; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB294; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC790;&amp;#xBC14;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC758; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xBCF4;&amp;#xD1B5; &amp;#xD568;&amp;#xC218;&amp;#xCC98;&amp;#xB7FC; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC5D0;&amp;#xC11C;&amp;#xCC98;&amp;#xB7FC; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xBCF8;&amp;#xBB38; &amp;#xB300;&amp;#xCE58;&amp;#xAC00; &amp;#xBD88;&amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xBCF4;&amp;#xD1B5; inline &amp;#xD568;&amp;#xC218;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB78C;&amp;#xB2E4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xCF54;&amp;#xB4DC;&amp;#xAC00; &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC778;&amp;#xB370;, &amp;#xC704; filterIsInstance&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xB78C;&amp;#xB2E4; &amp;#xC120;&amp;#xC5B8;&amp;#xC774; &amp;#xC5C6;&amp;#xC774; &amp;#xAD6C;&amp;#xCCB4;&amp;#xD654;&amp;#xB41C; &amp;#xD0C0;&amp;#xC785; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784;&amp;#xC5D0; &amp;#xC54C;&amp;#xAE30; &amp;#xC704;&amp;#xD574; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;. &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xB78C;&amp;#xB2E4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xB294; &amp;#xC131;&amp;#xB2A5;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC720;&amp;#xB9AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA70; JVM&amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC77C;&amp;#xBC18; &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD574;&amp;#xB3C4; &amp;#xAC15;&amp;#xB825;&amp;#xD558;&amp;#xAC8C; &amp;#xC778;&amp;#xB77C;&amp;#xC774;&amp;#xB2DD;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xAE30;&amp;#xC220;&amp;#xC801;&amp;#xC778; &amp;#xC7A5;&amp;#xCE58;&amp;#xAC00; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.baeldung.com/jvm-method-inlining&quot;&gt;baeldung_jvm-method-inlining&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;java.lang.Class&lt;/code&gt; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xBC1B;&amp;#xC544;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4; &amp;#xB54C;, inline &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83; &amp;#xB610;&amp;#xD55C; &amp;#xC720;&amp;#xC6A9;&amp;#xD558;&amp;#xB2E4;. &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xD0C0; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xBC1B;&amp;#xC544;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; API &amp;#xC911; &amp;#xB300;&amp;#xD45C;&amp;#xC801;&amp;#xC778; &amp;#xC720;&amp;#xC2A4;&amp;#xCF00;&amp;#xC774;&amp;#xC2A4;&amp;#xB85C;&amp;#xB294; JDK&amp;#xC758; ServiceLoader&amp;#xAC00; &amp;#xC788;&amp;#xACE0;, &amp;#xB610;&amp;#xD55C; &amp;#xC790;&amp;#xC8FC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &lt;code&gt;jackson&lt;/code&gt;&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xC9C1;&amp;#xB82C;&amp;#xD654;/&amp;#xC5ED;&amp;#xC9C1;&amp;#xB82C;&amp;#xD654; &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xB118;&amp;#xACA8;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; API&amp;#xAC00; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB798;&amp;#xC758; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xCC98;&amp;#xB7FC; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB85C; &amp;#xC804;&amp;#xB2EC;&amp;#xB41C; T&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &lt;code&gt;::class.java&lt;/code&gt; &amp;#xAD6C;&amp;#xBB38;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCC38;&amp;#xC870;&amp;#xB97C; &amp;#xC5BB;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;reified&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Any&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getServiceLoader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ServiceLoader&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ServiceLoader&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;java&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// jackson-module-kotlin&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;reified&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;jacksonTypeRef&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TypeReference&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TypeReference&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC2E4;&amp;#xCCB4;&amp;#xD654; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC758; &amp;#xC0AC;&amp;#xC6A9; &amp;#xAC00;&amp;#xB2A5;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0;&amp;#xC640; &amp;#xC81C;&amp;#xC57D;&amp;#xC0AC;&amp;#xD56D;&amp;#xC740; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC0AC;&amp;#xC6A9; &amp;#xAC00;&amp;#xB2A5;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0;
&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xAC80;&amp;#xC0AC;&amp;#xC640; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;(is, as)&lt;/li&gt;
&lt;li&gt;&amp;#xB9AC;&amp;#xD50C;&amp;#xB809;&amp;#xC158; API&lt;/li&gt;
&lt;li&gt;&amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0; &amp;#xB300;&amp;#xC751;&amp;#xD558;&amp;#xB294; &amp;#xC790;&amp;#xBC14; Class &amp;#xD0C0;&amp;#xC785; &amp;#xC5BB;&amp;#xAE30;(::class.java)&lt;/li&gt;
&lt;li&gt;&amp;#xB2E4;&amp;#xB978; &amp;#xD568;&amp;#xC218; &amp;#xD638;&amp;#xCD9C; &amp;#xC2DC;, &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC81C;&amp;#xC57D; &amp;#xC0AC;&amp;#xD56D;
&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4; &amp;#xC0DD;&amp;#xC131;&lt;/li&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xB3D9;&amp;#xBC18; &amp;#xAC1D;&amp;#xCCB4; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC; &amp;#xD638;&amp;#xCD9C;&lt;/li&gt;
&lt;li&gt;&amp;#xC77C;&amp;#xBC18; &amp;#xD0C0;&amp;#xC785;&amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC2E4;&amp;#xCCB4;&amp;#xD654; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xBC1B;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xC5D0; &amp;#xB118;&amp;#xAE30;&amp;#xAE30;&lt;/li&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;, &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;, &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xD568;&amp;#xC218;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &lt;code&gt;reified&lt;/code&gt;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC2E4;&amp;#xCCB4;&amp;#xD654; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC778;&amp;#xB77C;&amp;#xC778; &amp;#xD568;&amp;#xC218;&amp;#xC5D0;&amp;#xC11C; &amp;#xB78C;&amp;#xB2E4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0;, &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC778;&amp;#xB77C;&amp;#xC774;&amp;#xB2DD;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB3C4; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAE30;&amp;#xB3C4; &amp;#xD558;&amp;#xBA70;, &amp;#xC131;&amp;#xB2A5; &amp;#xBB38;&amp;#xC81C;&amp;#xB85C; &amp;#xC778;&amp;#xB77C;&amp;#xC774;&amp;#xB2DD;&amp;#xC744; &amp;#xC548;&amp;#xD558;&amp;#xACE0; &amp;#xC2F6;&amp;#xC744; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7F4; &amp;#xACBD;&amp;#xC6B0; &lt;code&gt;noinline&lt;/code&gt; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC778;&amp;#xB77C;&amp;#xC774;&amp;#xB2DD;&amp;#xC744; &amp;#xAE08;&amp;#xC9C0; &amp;#xC2DC;&amp;#xD0AC;&amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%B3%80%EC%84%B1variance&quot;&gt;&amp;#xBCC0;&amp;#xC131;(variance)&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xAE30;&amp;#xC800; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xAC19;&amp;#xACE0; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; &amp;#xC5EC;&amp;#xB7EC; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC11C;&amp;#xB85C; &amp;#xC5B4;&amp;#xB5A4; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC788;&amp;#xB294;&amp;#xC9C0; &amp;#xC124;&amp;#xBA85;&amp;#xD558;&amp;#xB294; &amp;#xAC1C;&amp;#xB150;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;, &lt;code&gt;List&amp;lt;Any&amp;gt;&lt;/code&gt;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xAE30;&amp;#xC800; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xAC19;&amp;#xACE0; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC778;&amp;#xC790;&amp;#xAC00; &amp;#xB2E4;&amp;#xB97C; &amp;#xACBD;&amp;#xC6B0;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xBCC0;&amp;#xC131;&amp;#xC740; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC704;&amp;#xD5D8;&amp;#xD560; &amp;#xC5EC;&amp;#xC9C0;&amp;#xAC00; &amp;#xC788;&amp;#xB294; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xAC8C; &amp;#xB9CC;&amp;#xB4EC;&amp;#xC73C;&amp;#xB85C;&amp;#xC368; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xD558;&amp;#xB294; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xC798;&amp;#xBABB; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC77C;&amp;#xC774; &amp;#xC5C6;&amp;#xAC8C; &amp;#xBC29;&amp;#xC9C0;&amp;#xD558;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xC218;&amp;#xD589;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;String&lt;/code&gt;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &lt;code&gt;Any&lt;/code&gt;&amp;#xB97C; &amp;#xD655;&amp;#xC7A5;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &lt;code&gt;Any&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBC1B;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xC5D0; &lt;code&gt;String&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xB118;&amp;#xACA8;&amp;#xB3C4; &amp;#xC548;&amp;#xC804;&amp;#xD558;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;, &lt;code&gt;List&amp;lt;Any&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xD655;&amp;#xC2E4;&amp;#xD55C; &amp;#xC548;&amp;#xC815;&amp;#xC131;&amp;#xC744; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xD560; &amp;#xC21C; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &amp;#xC608;&amp;#xC81C;&amp;#xB97C; &amp;#xBCF4;&amp;#xBA74;, &amp;#xBB38;&amp;#xC790;&amp;#xC5F4;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xB41C; mutableList&amp;#xC5D0; &amp;#xC815;&amp;#xC218;&amp;#xAC12; 42&amp;#xAC00; &amp;#xCD94;&amp;#xAC00;&amp;#xB418;&amp;#xACE0; maxBy &amp;#xD568;&amp;#xC218;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC5D0;&amp;#xC11C; Integer&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305; &amp;#xC775;&amp;#xC149;&amp;#xC158;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xAC78; &amp;#xD655;&amp;#xC778;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;printContents&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Any&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;joinToString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addAnswer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Any&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	list&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; strings &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mutableListOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;abc&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;bac&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;addAnswer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strings&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// ClassCastException: Integer cannot be cast to String&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;maxBy&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 

&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC5B4;&amp;#xB5A4; &amp;#xD568;&amp;#xC218;&amp;#xAC00; &amp;#xB9CC;&amp;#xC57D; &amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xCD94;&amp;#xAC00;/&amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xBA74; &amp;#xD0C0;&amp;#xC785; &amp;#xBD88;&amp;#xC77C;&amp;#xCE58;&amp;#xAC00; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xB2C8; &lt;code&gt;List&amp;lt;Any&amp;gt;&lt;/code&gt; &amp;#xB300;&amp;#xC2E0; &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;&amp;#xC744; &amp;#xB118;&amp;#xAE38; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC6D0;&amp;#xC18C;&amp;#xC758; &amp;#xCD94;&amp;#xAC00;/&amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xC5C6;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; &lt;code&gt;List&amp;lt;Any&amp;gt;&lt;/code&gt; &amp;#xB300;&amp;#xC2E0; &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;&amp;#xC744; &amp;#xB118;&amp;#xACA8;&amp;#xB3C4; &amp;#xC548;&amp;#xC804;&amp;#xD558;&amp;#xB2E4;. &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xBCC0;&amp;#xACBD; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC120;&amp;#xD0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xCD94;&amp;#xAC00;/&amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xB9C9;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xC5B4; &amp;#xC548;&amp;#xC804;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD55C; &amp;#xD638;&amp;#xCD9C;&amp;#xC744; &amp;#xB9C9;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;#xD0C0;&amp;#xC785; =! &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xACBD;&amp;#xC6B0; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC774;&amp;#xB984;&amp;#xC744; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xBC14;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xB2E8;&amp;#xC21C;&amp;#xD55C; &amp;#xC608;&amp;#xC81C;&amp;#xB85C; &lt;code&gt;val x: String&lt;/code&gt;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD558;&amp;#xB2E4;. &lt;code&gt;List&lt;/code&gt;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xACE0; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC774;&amp;#xBA70; &amp;#xC2E4;&amp;#xC81C; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC00; &amp;#xCD94;&amp;#xAC00;&amp;#xB41C; &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;, &lt;code&gt;List&amp;lt;Int&amp;gt;&lt;/code&gt; &amp;#xB4F1;&amp;#xC774; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xB41C; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB2E4;. &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; &amp;#xACB0;&amp;#xAD6D; &amp;#xBB34;&amp;#xC218;&amp;#xD558;&amp;#xAC8C; &amp;#xB9CE;&amp;#xC740; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xB9CC;&amp;#xB4E4; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC778;&amp;#xC790;&amp;#xC5D0; B &amp;#xD0C0;&amp;#xC785; &amp;#xAC12;&amp;#xC774; &amp;#xB4E4;&amp;#xC5B4;&amp;#xAC08; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xBA74; &lt;code&gt;A&amp;#xD0C0;&amp;#xC785;&amp;#xC740; B&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC0C1;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt;, &lt;code&gt;B&amp;#xD0C0;&amp;#xC785;&amp;#xC740; A&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt; &amp;#xC73C;&amp;#xB85C; &amp;#xC815;&amp;#xB9AC;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4;, &lt;code&gt;Number&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xC5D0; &lt;code&gt;Int&lt;/code&gt;&amp;#xAC12;&amp;#xC744; &amp;#xB118;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xAE30;&amp;#xC5D0; &amp;#xB458; &amp;#xC0AC;&amp;#xC774;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB294; &lt;code&gt;Number&amp;#xD0C0;&amp;#xC785;&amp;#xC740; Int&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC0C1;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt;, &lt;code&gt;Int&amp;#xD0C0;&amp;#xC785;&amp;#xC740; Number&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt;&amp;#xC73C;&amp;#xB85C; &amp;#xC0C1;/&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xC758; &amp;#xC911;&amp;#xC694;&amp;#xC131;&amp;#xC740; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xAC00; &amp;#xBCC0;&amp;#xC218; &amp;#xB300;&amp;#xC785;&amp;#xC774;&amp;#xB098; &amp;#xC778;&amp;#xC790; &amp;#xC804;&amp;#xB2EC; &amp;#xC2DC; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAC80;&amp;#xC0AC;&amp;#xB97C; &amp;#xB9E4;&amp;#xBC88; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt; Int &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xBC1B;&amp;#xB294; &amp;#xD568;&amp;#xC218;&amp;#xC5D0; Number &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xB123;&amp;#xC5B4; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAC80;&amp;#xC0AC;&amp;#xC5D0;&amp;#xC11C; Int &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; Number&amp;#xAC00; &amp;#xC544;&amp;#xB2C8;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xC774; &amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xAC04;&amp;#xB2E8;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC640; &amp;#xAC19;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC55E;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC608;&amp;#xCC98;&amp;#xB7FC; Int &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; Number &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC774;&amp;#xBBC0;&amp;#xB85C; Int&amp;#xB294; Number&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC758; Nullable&amp;#xACFC; NonNull &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xAC00; &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD574;&amp;#xC9C0;&amp;#xB294;&amp;#xB370;, &lt;code&gt;Int?&lt;/code&gt; &amp;#xD0C0;&amp;#xC785; &amp;#xC120;&amp;#xC5B8;&amp;#xC5D0;&amp;#xB294; &lt;code&gt;Int&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xB123;&amp;#xAC70;&amp;#xB098; &amp;#xBCC0;&amp;#xC218; &amp;#xC120;&amp;#xC5B8;&amp;#xC744; &amp;#xD574;&amp;#xB3C4; &amp;#xBB34;&amp;#xAD00;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xBC18;&amp;#xB300;&amp;#xB85C; &lt;code&gt;Int&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC5D4; &lt;code&gt;Int?&lt;/code&gt;&amp;#xB97C; &amp;#xC120;&amp;#xC5B8;&amp;#xD558;&amp;#xB294; &amp;#xAC74; &amp;#xBD88;&amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xB458; &amp;#xC0AC;&amp;#xC774;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB294; &lt;code&gt;Int?&amp;#xD0C0;&amp;#xC785;&amp;#xC740; Int&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC0C1;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt; &amp;#xD639;&amp;#xC740; &lt;code&gt;Int&amp;#xD0C0;&amp;#xC785;&amp;#xC740; Int?&amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&lt;/code&gt;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xC815;&amp;#xB9AC;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; s&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;abc&amp;quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; t&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; s &lt;span class=&quot;token comment&quot;&gt;// String&amp;#xC774; String?&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xBBC0;&amp;#xB85C; &amp;#xC774; &amp;#xB300;&amp;#xC785;&amp;#xC740; &amp;#xAC00;&amp;#xB2A5;&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xD654; &amp;#xD560;&amp;#xB54C;, &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xC5D0; &amp;#xC11C;&amp;#xB85C; &amp;#xB2E4;&amp;#xB978; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xB4E4;&amp;#xC5B4;&amp;#xAC00;&amp;#xACE0; &amp;#xC11C;&amp;#xB85C; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xAC78; &amp;#xAC00;&amp;#xB9AC;&amp;#xCF1C; &lt;code&gt;&amp;#xBB34;&amp;#xACF5;&amp;#xBCC0;(invariant)&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD0C0;&amp;#xC785; A&amp;#xAC00; B&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xBA74; &lt;code&gt;List&amp;lt;A&amp;gt;&lt;/code&gt;&amp;#xB294; &lt;code&gt;List&amp;lt;B&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xBA70; &amp;#xC774;&amp;#xB7F0; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &lt;code&gt;&amp;#xACF5;&amp;#xBCC0;&amp;#xC801;(covariant)&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;(&lt;code&gt;covariant&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xACF5;&amp;#xBCC0;&amp;#xC801;&amp;#xC778; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xB54C;&amp;#xB294; out &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB97C; &amp;#xB123;&amp;#xC5B4; &amp;#xD45C;&amp;#xD604;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; Producer&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;produce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xACF5;&amp;#xBCC0;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xBA74; &amp;#xD568;&amp;#xC218; &amp;#xC815;&amp;#xC758;&amp;#xC5D0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xD0C0;&amp;#xC785;&amp;#xACFC; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC815;&amp;#xD655;&amp;#xD788; &amp;#xC77C;&amp;#xCE58;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xADF8; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xD568;&amp;#xC218; &amp;#xC778;&amp;#xC790;&amp;#xB098; &amp;#xBC18;&amp;#xD658; &amp;#xAC12;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xACF5;&amp;#xBCC0;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xBA74; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xB0B4;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xADF8; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC81C;&amp;#xD55C;&amp;#xD55C;&amp;#xB2E4;
&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xC548;&amp;#xC815;&amp;#xC131;&amp;#xC744; &amp;#xC704;&amp;#xD574; &amp;#xD56D;&amp;#xC0C1; &amp;#xC544;&amp;#xC6C3;(out) &amp;#xC704;&amp;#xCE58;&amp;#xC5D0; &amp;#xC788;&amp;#xC5B4;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xC0DD;&amp;#xC0C1;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC9C0;&amp;#xB9CC; &amp;#xAC12;&amp;#xC744; &amp;#xC18C;&amp;#xBE44;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xB9F4;&amp;#xBC84; &amp;#xC120;&amp;#xC5B8; &amp;#xC2DC;, &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC9C0;&amp;#xC810;&amp;#xC740; out/in&amp;#xC73C;&amp;#xB85C; &amp;#xB098;&amp;#xB258;&amp;#xBA70;, out&amp;#xC73C;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;(&amp;#xC0DD;&amp;#xC0B0;)&amp;#xC5D0; &amp;#xC4F0;&amp;#xC774;&amp;#xBA70; in &amp;#xC73C;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xAC12;&amp;#xC744; &amp;#xC18C;&amp;#xBE44;&amp;#xD558;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xB85C; &amp;#xD55C;&amp;#xC815;&amp;#xC774; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; Transformaer&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// t&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB294; in &amp;#xC704;&amp;#xCE58;, &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785; T&amp;#xB294; out &amp;#xC704;&amp;#xCE58;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xB2E4;&amp;#xC2DC; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xBA74;, &amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC740; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC720;&amp;#xC9C0;&amp;#xB418;&amp;#xBA70;, &amp;#xC544;&amp;#xC6C3; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB97C; &amp;#xD1B5;&amp;#xD574; &amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xBA70; &amp;#xC544;&amp;#xC6C3;&amp;#xC73C;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC544;&amp;#xC6C3; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Herd&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Animal&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; size&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int
  	&lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;operator&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; Herd &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0; Animal&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBC1B;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xBA70;, &amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xACE0; &amp;#xD0C0;&amp;#xC785; &amp;#xD55C;&amp;#xC815;&amp;#xC744; Animal&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xC5EC; T&amp;#xD0C0;&amp;#xC785;&amp;#xC740; &amp;#xC790;&amp;#xC5F0;&amp;#xC2A4;&amp;#xB7FD;&amp;#xAC8C; Animal &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xCDE8;&amp;#xAE09;&amp;#xB41C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C; &amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C;&amp;#xB9CC; &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;br&gt;
&amp;#xB610;&amp;#xD55C;, Animal&amp;#xBFD0;&amp;#xB9CC; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C; &amp;#xC774;&amp;#xB97C; &amp;#xC0C1;&amp;#xC18D;&amp;#xD558;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;&amp;#xBA74; &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4; Cat&amp;#xC774; Animal&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; get&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0;&amp;#xC11C; Cat&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xB3C4; &amp;#xC544;&amp;#xBB34;&amp;#xB7F0; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC5C6;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB294; &amp;#xD568;&amp;#xC218; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB098; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C;&amp;#xB9CC; &amp;#xC4F0;&amp;#xC774;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0;, &amp;#xB2E4;&amp;#xB978; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB85C;&amp;#xB3C4; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC0DD;&amp;#xC131;&amp;#xC790; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB294; &amp;#xC778;&amp;#xC774;&amp;#xB098; &amp;#xC544;&amp;#xC6C3; &amp;#xC5B4;&amp;#xB290; &amp;#xCABD;&amp;#xB3C4; &amp;#xC544;&amp;#xB2C8;&amp;#xBA70; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC00; out &amp;#xC73C;&amp;#xB85C; &amp;#xC120;&amp;#xC5B8;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC5B4;&amp;#xB3C4; &amp;#xADF8; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xC790; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xC120;&amp;#xC5B8;&amp;#xC5D0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xB294; &amp;#xB098;&amp;#xC911;&amp;#xC5D0; &amp;#xD638;&amp;#xCD9C;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xAC00; &amp;#xC544;&amp;#xB2C8;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC704;&amp;#xD5D8;&amp;#xD560; &amp;#xC5EC;&amp;#xC9C0;&amp;#xAC00; &amp;#xC5C6;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;val&lt;/code&gt;, &lt;code&gt;var&lt;/code&gt; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xC790; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xC5D0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xAC8C;&amp;#xD130; &amp;#xD639;&amp;#xC740; &amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xACE0; &amp;#xAC19;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC77D;&amp;#xAE30; &amp;#xC804;&amp;#xC6A9; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&amp;#xB294; &amp;#xC544;&amp;#xC6C3; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xBCC0;&amp;#xACBD; &amp;#xAC00;&amp;#xB2A5; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&amp;#xB294; &amp;#xC778; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0; &amp;#xD574;&amp;#xB2F9;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Herd&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Animal&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; leadAnimal&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;vararg&lt;/span&gt; animals&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; T&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;(&lt;code&gt;contravariance&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xD0C0;&amp;#xC785; B&amp;#xAC00; A&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC778; &amp;#xACBD;&amp;#xC6B0;, &lt;code&gt;Consumer&amp;lt;A&amp;gt;&lt;/code&gt;&amp;#xAC00; &lt;code&gt;Consumer&amp;lt;B&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC778; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD558;&amp;#xBA74; &amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; Consumer&lt;t&gt;&amp;#xB294; &amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790; T&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &lt;code&gt;&amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&lt;/code&gt;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;Animal&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC778; Cat&amp;#xC774; &lt;code&gt;Consumer&amp;lt;Animal&amp;gt;&lt;/code&gt;&amp;#xAC00; &lt;code&gt;Consumer&amp;lt;Cat&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xB420; &amp;#xACBD;&amp;#xC6B0; &amp;#xC774;&amp;#xB97C; &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/t&gt;&lt;/li&gt;
&lt;li&gt;in&amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB294; &amp;#xADF8; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xAC00; &amp;#xBD99;&amp;#xC740; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC774; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC; &amp;#xC548;&amp;#xC73C;&amp;#xB85C; &amp;#xC804;&amp;#xB2EC;&amp;#xB3FC; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; &amp;#xC18C;&amp;#xBE44;&amp;#xB41C;&amp;#xB2E4;&amp;#xB294; &amp;#xB73B;&amp;#xC774;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xC624;&amp;#xC9C1; &amp;#xC778; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xB294; &amp;#xB73B;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xACF5;&amp;#xBCC0; vs &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0; vs &amp;#xBB34;&amp;#xACF5;&amp;#xBCC0;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&amp;#xBB34;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Producer&amp;lt;out T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Consumer&amp;lt;in T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;MutableList&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &lt;br&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC720;&amp;#xC9C0;&amp;#xB41C;&amp;#xB2E4;.&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00;&lt;br&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0;&amp;#xC11C; &amp;#xB4A4;&amp;#xC9D1;&amp;#xD78C;&amp;#xB2E4;.&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC74C;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Producer&amp;lt;Cat&amp;gt;&lt;/code&gt;&amp;#xC740; &lt;code&gt;Producer&amp;lt;Animal&amp;gt;&lt;/code&gt;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB2E4;.&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Consumer&amp;lt;Animal&amp;gt;&lt;/code&gt;&amp;#xC740; &lt;code&gt;Consumer&amp;lt;Cat&amp;gt;&lt;/code&gt;&amp;#xC758;   &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB2E4;.&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;T&amp;#xB97C; &amp;#xC544;&amp;#xC6C3; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xC0AC;&amp;#xC6A9;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;T&amp;#xB97C; &amp;#xC778; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xC0AC;&amp;#xC6A9;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;T&amp;#xB97C; &amp;#xC544;&amp;#xBB34; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB098; &amp;#xC0AC;&amp;#xC6A9; &amp;#xAC00;&amp;#xB2A5;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB798; Function &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xC740; &amp;#xACF5;&amp;#xBCC0;&amp;#xACFC; &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC744; &amp;#xC124;&amp;#xBA85;&amp;#xD558;&amp;#xAE30; &amp;#xC544;&amp;#xC8FC; &amp;#xC88B;&amp;#xC740; &amp;#xC608;&amp;#xC81C;&amp;#xC774;&amp;#xB2E4;. &amp;#xC778;&amp;#xC790;&amp;#xB85C; &amp;#xBC1B;&amp;#xB294; P &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xBA70;, R &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xACF5;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xB744;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; Function1&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; R&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;operator&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invoke&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; R
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Cat&amp;#xACFC; Animal&amp;#xC758; &amp;#xC608;&amp;#xC81C;&amp;#xB97C; &amp;#xC704; Function1&amp;#xC5D0; &amp;#xB300;&amp;#xC785;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &lt;code&gt;(Cat) -&amp;gt; Number&lt;/code&gt;&amp;#xC640; &lt;code&gt;(Animal) -&amp;gt; Int&lt;/code&gt;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC704; Function1&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC758; &amp;#xD45C;&amp;#xD604;&amp;#xC73C;&amp;#xB85C; &amp;#xBC14;&amp;#xAFD4;&amp;#xBCF4;&amp;#xC790;&amp;#xBA74; &lt;code&gt;(Cat) -&amp;gt; Number&lt;/code&gt;&amp;#xB97C; &amp;#xBC1B;&amp;#xB294; &amp;#xC778;&amp;#xC790;&amp;#xC5D0; &lt;code&gt;(Animal) -&amp;gt; Int&lt;/code&gt;&amp;#xC758; &amp;#xD568;&amp;#xC218; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xB118;&amp;#xAE30;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC131;&amp;#xB9BD;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xD638;&amp;#xCD9C;&amp;#xC5D0; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC5C6;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xB2E4;&amp;#xC2DC; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xBA74; &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xBC18;&amp;#xB300;&amp;#xB85C;, &amp;#xACF5;&amp;#xBCC0;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xADF8;&amp;#xB300;&amp;#xB85C; &amp;#xC720;&amp;#xC9C0;, &amp;#xBB34;&amp;#xACF5;&amp;#xBCC0;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC04;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC804;&amp;#xD600; &amp;#xC5C6;&amp;#xB294; &amp;#xAC83;&amp;#xC73C;&amp;#xB85C; &amp;#xC815;&amp;#xB9AC;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xBCC0;&amp;#xC131;&amp;#xC758; &amp;#xC885;&amp;#xB958;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#xC120;&amp;#xC5B8; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;(declaration site variance)&lt;/code&gt;: &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC120;&amp;#xC5B8;&amp;#xC5D0; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &amp;#xC120;&amp;#xC5B8; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&amp;#xC774;&amp;#xB77C; &amp;#xBD80;&amp;#xB974;&amp;#xBA70;, &amp;#xD55C;&amp;#xBC88;&amp;#xC758; &amp;#xC120;&amp;#xC5B8;&amp;#xB9CC;&amp;#xC73C;&amp;#xB85C; &amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xCD94;&amp;#xAC00; &amp;#xC9C0;&amp;#xC815;&amp;#xD560; &amp;#xD544;&amp;#xC694;&amp;#xAC00; &amp;#xC5C6;&amp;#xC73C;&amp;#xBBC0;&amp;#xB85C; &amp;#xCF54;&amp;#xB4DC;&amp;#xAC00; &amp;#xAC04;&amp;#xACB0;&amp;#xD574;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;(use site variance)&lt;/code&gt;: &amp;#xC790;&amp;#xBC14;&amp;#xC5D0;&amp;#xC11C;&amp;#xCC98;&amp;#xB7FC; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC00; &amp;#xC788;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560;&amp;#xB54C; &amp;#xB9C8;&amp;#xB2E4; &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC774;&amp;#xB098; &amp;#xC0C1;&amp;#xC704; &amp;#xD0C0;&amp;#xC785; &amp;#xC911; &amp;#xC5B4;&amp;#xB5A4; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xB300;&amp;#xCE58;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xC9C0; &amp;#xBA85;&amp;#xC2DC;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC790;&amp;#xBC14;&amp;#xC758; &lt;code&gt;&amp;#xD55C;&amp;#xC815; &amp;#xC640;&amp;#xC77C;&amp;#xB4DC;&amp;#xCE74;&amp;#xB4DC; &amp;#xD0C0;&amp;#xC785;(bounded wildcard)&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &amp;#xC0DD;&amp;#xAC01;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.(&lt;code&gt;? extends&lt;/code&gt; , &lt;code&gt;? super&lt;/code&gt;) &amp;#xBB3C;&amp;#xB860; &lt;strong&gt;&amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xB3C4; &amp;#xC790;&amp;#xBC14;&amp;#xC5D0;&amp;#xC11C;&amp;#xCC98;&amp;#xB7FC; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xC9C0;&amp;#xC6D0;&amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xACF5;&amp;#xBCC0;&amp;#xC801;&amp;#xC774;&amp;#xAC70;&amp;#xB098; &amp;#xD639;&amp;#xC740; &amp;#xBC18;&amp;#xACF5;&amp;#xBCC0;&amp;#xC801;&amp;#xC778;&amp;#xC9C0; &amp;#xC120;&amp;#xC5B8;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;&amp;#xBA74; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC810; &amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC00; &amp;#xB098;&amp;#xC624;&amp;#xB294; &amp;#xC9C0;&amp;#xC810;&amp;#xC5D0; &amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C; &amp;#xBCC0;&amp;#xC131;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC9C0;&amp;#xC815;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xB300;&amp;#xD45C;&amp;#xC801;&amp;#xC778; &amp;#xC608;&amp;#xC81C;&amp;#xB85C; MutableList&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;. MutableList&amp;#xB294; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB85C; &amp;#xB118;&amp;#xC5B4;&amp;#xB294; &amp;#xAC12;&amp;#xC744; &amp;#xC0DD;&amp;#xC0B0;&amp;#xD560; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xACE0; &amp;#xC18C;&amp;#xBE44;&amp;#xD560;&amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xBCC0;&amp;#xC131;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC9C0;&amp;#xC815;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC774;&amp;#xB97C; &amp;#xC81C;&amp;#xC5B4;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;copyData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;source&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; destination&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;item &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; source&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		destination&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC704; &amp;#xC608;&amp;#xC81C;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;source&lt;/code&gt;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xC120;&amp;#xC5B8;&amp;#xC744; &lt;code&gt;MutableList&amp;lt;out T&amp;gt;&lt;/code&gt;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xB480;&amp;#xB294;&amp;#xB370;, out &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB97C; &amp;#xBD99;&amp;#xC784;&amp;#xC73C;&amp;#xB85C;&amp;#xC11C; &amp;#xBB34;&amp;#xACF5;&amp;#xBCC0;&amp;#xC778; MutableList&amp;#xC5D0;&amp;#xC11C; &amp;#xACF5;&amp;#xBCC0;&amp;#xC73C;&amp;#xB85C; &amp;#xC81C;&amp;#xC57D;&amp;#xC744; &amp;#xBD99;&amp;#xC778; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xD0AC; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7F4; &amp;#xACBD;&amp;#xC6B0; &amp;#xAC12;&amp;#xC744; &amp;#xC18C;&amp;#xBE44;&amp;#xD558;&amp;#xB294; add &amp;#xD568;&amp;#xC218;&amp;#xB4F1;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0; &lt;code&gt;Out-projected type ....&lt;/code&gt;&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xC5D0;&amp;#xB7EC;&amp;#xB97C; &amp;#xB9CC;&amp;#xB098;&amp;#xAC8C; &amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xBA74;, &amp;#xD0C0;&amp;#xC785; &amp;#xC120;&amp;#xC5B8;&amp;#xC5D0;&amp;#xC11C; [&amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC704;&amp;#xCE58;]&amp;#xB77C;&amp;#xBA74; &amp;#xC5B4;&amp;#xB514;&amp;#xC5D0;&amp;#xB098; [&amp;#xBCC0;&amp;#xC131; &amp;#xBCC0;&amp;#xACBD;&amp;#xC790;]&amp;#xB97C; &amp;#xBD99;&amp;#xC77C; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, [&amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130; &amp;#xD0C0;&amp;#xC785;, &amp;#xB85C;&amp;#xCEEC; &amp;#xBCC0;&amp;#xC218; &amp;#xD0C0;&amp;#xC785;, &amp;#xD568;&amp;#xC218; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;] &amp;#xB4F1;&amp;#xC5D0; &amp;#xD0C0;&amp;#xC785; &amp;#xD30C;&amp;#xB77C;&amp;#xBBF8;&amp;#xD130;&amp;#xAC00; &amp;#xC4F0;&amp;#xC774;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0; in&amp;#xC774;&amp;#xB098; out &amp;#xBCC0;&amp;#xACBD;&amp;#xC790;&amp;#xB97C; &amp;#xBD99;&amp;#xC77C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC774;&amp;#xB97C; &amp;#xAC00;&amp;#xB9AC;&amp;#xCF1C; &lt;code&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xC158;(type projection)&lt;/code&gt;&amp;#xC774;&amp;#xB77C; &amp;#xBD80;&amp;#xB978;&amp;#xB2E4;.&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;List&amp;lt;out T&amp;gt;&lt;/code&gt;&amp;#xCC98;&amp;#xB7FC; &amp;#xC774;&amp;#xBBF8; &amp;#xBCC0;&amp;#xC131; &amp;#xBCC0;&amp;#xACBD;&amp;#xC790;&amp;#xAC00; &amp;#xBD99;&amp;#xC5B4; &amp;#xC788;&amp;#xB294; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0; out &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xC158;&amp;#xC744; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC758;&amp;#xBBF8;&amp;#xAC00; &amp;#xC5C6;&amp;#xC73C;&amp;#xBBC0;&amp;#xB85C; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xB7EC;&amp;#xC640; IDE&amp;#xAC00; &amp;#xCE5C;&amp;#xC808;&amp;#xD558;&amp;#xAC8C;(?) &amp;#xACBD;&amp;#xACE0;&amp;#xB97C; &amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Kotlin</category>
      <category>Kotlin</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/154</guid>
      <comments>https://stylishc.tistory.com/154#entry154comment</comments>
      <pubDate>Tue, 27 Jul 2021 19:44:38 +0900</pubDate>
    </item>
    <item>
      <title>Netty-In-Action - 1부, 네티 개념과 아키텍처</title>
      <link>https://stylishc.tistory.com/151</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Netty-In-Action&lt;/h2&gt;
&lt;h1&gt;1부, 네티 개념과 아키텍처&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1장. 네티: 비동기 이벤트 기반 네트워킹 프레임워크&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최초 자바 API(java.net)은 네이티브 시스템 소켓 라이브러리가 제공하는 블로킹 함수만 제공
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다수의 클라이언트를 관리하려면 새로운 클라이언트 소켓마다 새로운 스레드를 할당해야 함.&lt;/li&gt;
&lt;li&gt;여러 스레드가 입출력 데이터를 무한정 대기하는 상태가 유지될 수 있고, 이는 곧 리소스에 대한 낭비로 이어질 수 있음.&lt;/li&gt;
&lt;li&gt;운영체제에 따라 다르지만 스텍의 기본 크기는 64KB ~ 1MB까지 차지할 수 있다. JVM이 많은 수의 스레드 생성을 지원하지만, 동시 접속이 한계에 이르는 순간(1만개 전후) 컨텍스트 스위칭에 따른 오버헤드가 심각한 문제가 될수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;네이티브 소켓 라이브러리에는 오래전부터 네트워크 리소스 사용률을 세부적으로 제어할수 있는 논블로킹(non-blocking) 호출이 포함되어 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;setsockopt() 시스템 함수를 통한 블로킹 콜에 대한 옵션 설정 가능&lt;/li&gt;
&lt;li&gt;이벤트 통지 API(epoll/kqueue)를 통하여 논블로킹 소켓의 집합을 등록하면 읽거나 기록할 데이터가 준비됐는지 여부를 알수 있다. &lt;a href=&quot;https://long-zhou.github.io/2012/12/21/epoll-vs-kqueue.html&quot;&gt;참고&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;논블로킹 입출력을 위한 자바의 기능 지원은 1.4부터 java.nio 패키지를 통하여 이뤄졌다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://drek4537l1klr.cloudfront.net/maurer/Figures/01fig02.jpg&quot; alt=&quot;java.nio.channels.Selector&quot; /&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;code&gt;java.nio.channels.Selector&lt;/code&gt; 클래스이다. 시스템의 이벤트 통지 API를 그대로 사용하며 언제나 읽기/쓰기 작업의 완료 상태를 확인할 수 있으므로 단일 스레드로 여러 동시 연결을 처리할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적은 수의 스레드로 더 많은 연결을 처리할 수 있으므로 컨텍스트 스위칭에 따른 오버헤드와 메모리 관리가 원활해짐&lt;/li&gt;
&lt;li&gt;스레드의 상태가 점유가 되어 있지 않기 때문에, 입출력 외에 다른 작업을 사용할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;네티는 네트워킹 도메인에서 가장 유명한 자바 프레임워크로 기반 구현의 복잡성을 단순한 추상화로 감춰 개발자가 어플리케이션 구현 영역에 집중할 수 있도록 도와준다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로킹/논블로킹 방식의 모두 지원&lt;/li&gt;
&lt;li&gt;코어 자바 API보다 높은 처리량과 짧은 지연 시간. 풀링/재사용을 통한 리소스 소비 감소, 메모리 복사 최소화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이벤트 기반의 비동기식으로 어플리케이션을 작성할때는 특수한 문제에 대한 고려가 필요.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;발생하는 이벤트에 대해 언제든지/순서에 상관없이 응답을 할 수 있음, 이는 곧, &lt;code&gt;증가하는 처리량에 맞게 시스템/네트워크/프로세스의 능력을 작업량 증가에 맞게 늘리는 능력&lt;/code&gt;으로 정의할 수 있는 최고 수준의 확장성을 갖추는데 필수적임.&lt;/li&gt;
&lt;li&gt;논블로킹 네트워크 연결은 작업 완료를 기다릴 필요가 없다. 비동기 코드는 바로 반환을 하며 완료가 되면 추후에 이를 통지하는 방식이다.&lt;/li&gt;
&lt;li&gt;셀렉터는 적은 수의 스레드로 여러 연결에서 이벤트를 모니터링 할 수 있게 해줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네티의 핵심 컴포넌트
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Channel&lt;br /&gt;하나 이상의 입출력 작업(읽기/쓰기)을 수행할수 있는 하드웨어 장치/파일/네트워크 소켓/프로그램 컴포넌트와 같은 엔티티에 대한 열린 연결, 들어오는 Inbound와 나가는 Outbound를 위한 운송수단으로 생각하자&lt;/li&gt;
&lt;li&gt;Callback&lt;br /&gt;콜백은 관심 대상에게 작업 완료를 알리는 가장 일반적인 방법으로 네티는 이벤트를 처리할 때 내부적으로 콜백을 이용한다. 콜백 트리거가 되면 ChannelHandler 인터페이스 구현을 통해 이벤트를 처리할수 있다.&lt;/li&gt;
&lt;li&gt;Future&lt;br /&gt;퓨처는 작업이 완료되면 어플리케이션에 이를 알리는 방법이다. 비동기 작업의 결과를 접근할 수 있게 해준다. JDK에서는 java.&lt;code&gt;util.concurrent.Future&lt;/code&gt; 인터페이스를 제공하지만, 해당 구현은 &lt;code&gt;작업 완료 여부 확인&lt;/code&gt;과 &lt;code&gt;완료전까지 블록킹&lt;/code&gt;하는 기능만 존재한다. 네티는 이를 개선한 &lt;code&gt;ChannelFuture&lt;/code&gt;를 사용한다. ChannelFuture에는 ChannelFutureListener 인스턴스를 하나 이상 등록할 수 있으며 완료시점에 operationComplete() 콜백 메소드가 호출이 된다. 해당 콜백 실행 시점에 완료/오류 등을 확인 가능하다.&lt;br /&gt;네티의 모든 아웃바운드 입출력은 ChannelFuture를 반환하고 진행에 블로킹 작업은 없다. 모든것은 비동기에 이벤트 기반이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이벤트와 핸들러&lt;br /&gt;네티는 작업 상태 변화를 알리기 위해 고유한 이벤트를 사용한다. &lt;code&gt;로깅&lt;/code&gt;, &lt;code&gt;데이터 변환&lt;/code&gt;, &lt;code&gt;흐름 제어&lt;/code&gt;, &lt;code&gt;어플리케이션 논리&lt;/code&gt; 등의 동작을 포함한다. 이벤트들은 크게 &lt;code&gt;인바운드&lt;/code&gt;와 &lt;code&gt;아웃바운드&lt;/code&gt; 데이터 흐름의 연관성을 기준으로 분류한다.&lt;br /&gt;모든 이벤트는 핸들러 클래스의 사용자 구현 메서드로 전달할 수 있다. &lt;b&gt;다시 말해, 각 핸들러 인스턴스는 특정 이벤트에 반응하여 실행하는 일종의 콜백이라고 이해하면 된다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인바운드: 연결 활성화/비활성화, 데이터 읽기, 사용자 이벤트, 오류 이벤트&lt;/li&gt;
&lt;li&gt;아웃바운드: 원격 피어 연결 열기/닫기, 소켓에 데이터 쓰기/플러시&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2장. 첫 번째 네티 어플리케이션&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;책의 경우 maven 기준으로 설명을 하고 있지만, 예제는 gradle 기반의 프로젝트에서 작성했으며, &lt;code&gt;4.1.65.Final&lt;/code&gt; 버젼을 기준으로 실습 편의성을 위해 &lt;code&gt;netty-all&lt;/code&gt; 디펜던시를 참조했다.
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;dependencies {
implementation 'io.netty:netty-all:4.1.65.Final'
...
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;EchoServer 코드 작성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 &lt;code&gt;EchoServer&lt;/code&gt; 및 &lt;code&gt;EchoServerHandler&lt;/code&gt; 코드 작성 후 기동&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;public class EchoServer {
    private final int port;

    public EchoServer(int port) {
        this.port = port;
    }

    public static void main(String[] args) throws InterruptedException {
        if (args.length &amp;lt; 1) {
            System.err.println(&quot;Usage: &quot; + EchoServer.class.getSimpleName() + &quot;&amp;lt;port&amp;gt;&quot;);
        }
        int port = Integer.parseInt(args[0]);
        new EchoServer(port).start();
    }

    public void start() throws InterruptedException {
        final EchoServerHandler echoServerHandler = new EchoServerHandler();
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(group)
                .channel(NioServerSocketChannel.class)
                .localAddress(new InetSocketAddress(port))
                .childHandler(new ChannelInitializer&amp;lt;SocketChannel&amp;gt;() {
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        System.out.println(&quot;initChannel&quot;);
                        ch.pipeline().addLast(echoServerHandler);
                    }
                });
            ChannelFuture future = b.bind().sync();
            future.channel().closeFuture().sync();
        } finally {
            group.shutdownGracefully().sync();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부트스트랩 하는 코드를 포함하고 있으며, 서버 연결 요청을 수신하는 포트를 서버와 바인딩하는 코드가 있어야 한다.&lt;/li&gt;
&lt;li&gt;NioEventLoopGroup을 통하여 새로운 연결 수락 및 데이터 읽기/쓰기와 같은 이벤트를 처리&lt;/li&gt;
&lt;li&gt;서버가 바인딩하는 InetSocketAddress를 지정&lt;/li&gt;
&lt;li&gt;새로운 연결을 수락하고 Channel을 생성 후 ChannelInitializer를 통하여 EchoServerHandler 인스턴스를 Channel의 ChannelPipeline으로 추가한다.&lt;/li&gt;
&lt;li&gt;ServerBootstrap.bind() 호출하여 서버를 바인딩&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Sharable // 여러 Channel에서 공유할 수 있음을 나타나는 마커 인터페이스 
public class EchoServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    final ByteBuf in = (ByteBuf) msg;
    System.out.println(
        &quot;Server received: &quot; + in.toString(CharsetUtil.UTF_8)
    );
    ctx.write(in);
}

@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
    ctx.writeAndFlush(Unpooled.EMPTY_BUFFER)
        .addListener(ChannelFutureListener.CLOSE);
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    cause.printStackTrace();
    ctx.close();
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;telnet을 통하여 Echo 메세지가 다시 telnet 클라이언트로 다시 전달이 되는지 확인하면 서버 코드 작성은 완료&lt;br /&gt;&lt;img src=&quot;https://i.imgur.com/jvDaSSu.png&quot; alt=&quot;텔넷테스트&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 들어오는 이벤트에 반응해야 하기 때문에 &lt;code&gt;ChannelInboundHandler&lt;/code&gt; 구현체인 &lt;code&gt;ChannelInboundHandlerAdapter&lt;/code&gt; 하위 클래스를 만들었고, 여기에 몇개 메소드를 오버라이드하여 메세지를 처리하도록 했다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;channelRead&lt;/code&gt;: 메세지가 들어올때마다 호출&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channelReadComplete&lt;/code&gt;: channelRead()의 마지막 호출에서 현재 일괄 처리의 마지막 메세지를 처리했음을 핸들러에 통보&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exceptionCaught&lt;/code&gt;: 읽기 처리 중 예외가 발생하면 콜백됨, 예외 처리를 하지 않을 경우 ChannelPipeline의 마지막까지 이동 후 로깅이 되며, 가급적이면 하나 이상의 exceptionCaught를 구현하는 것이 바람직하다고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ChannelHandler는 네 가지 이벤트 유형을 제공하며, 어플리케이션은 ChannelHandler을 구현하거나 확장하여 이벤트를 후크하고 어플리케이션 로직을 제공해야 한다. ChannelHandler는 비즈니스 관심사에서 네트워크 관심사를 분리하는 것을 도와준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;EchoClient 코드 작성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어플리케이션에서 필요한 &lt;code&gt;EchoClient&lt;/code&gt;, &lt;code&gt;EchoClientHandler&lt;/code&gt; 핸들러 코드는 아래와 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Sharable
public class EchoClientHandler extends SimpleChannelInboundHandler&amp;lt;ByteBuf&amp;gt; {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        ctx.writeAndFlush(
        Unpooled.copiedBuffer(&quot;Netty rocks!&quot;, CharsetUtil.UTF_8)
        );
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
        System.out.println(
                &quot;Client received: &quot; + msg.toString(CharsetUtil.UTF_8)
        );
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/VrnfrIE.png&quot; alt=&quot;ChannelHandler_Hierachy&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버와 마찬가지로 EchoClientHandler는 &lt;code&gt;ChannelInboundHandler&lt;/code&gt; 인터페이스의 구현체인 &lt;code&gt;SimpleChannelInboundHandler&lt;/code&gt;의 메소드를 오버라이드하여 필요한 작업을 처리한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;channelActive()&lt;/code&gt;: 서버 연결 후 콜백&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channelRead0()&lt;/code&gt;: 서버에서 메세지 수신 후 콜백&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exceptionCaught()&lt;/code&gt;: 처리 중 예외 시 콜백&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channelRead0()&lt;/code&gt;에서 주의할 점은 전체 바이트 데이터 수신를 한 번에 수신한다는 보장이 없다. 경우에 따라 &lt;code&gt;channelRead0()&lt;/code&gt; 메소드가 여러번 호출될 수 있다. 대신, TCP는 스트림 기반 프로토콜이므로 서버에서 보낸 순서대로 바이트 수신을 보장한다.예시) AB|CDE|FG, ABC|DE|FG, AB|CD|EFG 와 같은 형태로 바이트를 수신할 수도 있다는 이야기이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;public class EchoClient {
    private final String host;
    private final int port;

    public EchoClient(String host, int port) {
        this.port = port;
        this.host = host;
    }

    public void start() throws InterruptedException {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
                    .channel(NioSocketChannel.class)
                    .remoteAddress(new InetSocketAddress(host, port))
                    .handler(new ChannelInitializer&amp;lt;SocketChannel&amp;gt;() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline()
                        .addLast(new EchoClientHandler());
                        }
                    });
            ChannelFuture f = b.connect().sync();
            f.channel().closeFuture().sync();
        } finally {
            group.shutdownGracefully().sync();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        if (args.length &amp;lt; 1) {
            System.err.println(
                    &quot;Usage: &quot; + EchoClient.class.getSimpleName() + &quot;&amp;lt;host&amp;gt; &amp;lt;port&amp;gt;&quot;
            );
        }
        String host = args[0];
        int port = Integer.parseInt(args[1]);
        new EchoClient(host, port).start();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3장. 네티 컴포넌트와 설계&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Channel, EventLoop, ChannelFuture&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Channel: Socket&lt;/li&gt;
&lt;li&gt;EventLoop: 제어 흐름, 멀티스레딩, 동시성 제어&lt;/li&gt;
&lt;li&gt;ChannelFuture: 비동기 결과 알림&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Channel 인터페이스&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/Ovv6kg2.png&quot; alt=&quot;Channel_Hierachy&quot; /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 구현 클래스와 인터페이스 종류는 더 다양하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Channel&lt;/code&gt; 인터페이스는 Socket으로 직접 작업할 때의 복잡성을 크게 완화하는 API를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;EventLoop 인터페이스&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/rF7huZs.png&quot; alt=&quot;EventLoop&quot; /&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://drek4537l1klr.cloudfront.net/maurer/Figures/03fig01.jpg&quot; alt=&quot;EventLoop&quot; /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: Netty-In-Action&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Channel&lt;/code&gt; - &lt;code&gt;EventLoop&lt;/code&gt; - &lt;code&gt;Thread&lt;/code&gt; - &lt;code&gt;EventLoopGroup&lt;/code&gt; 사이에서의 상호작용은 아래와 같다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 &lt;code&gt;EventLoopGroup&lt;/code&gt;은 하나 이상의 EventLoop를 포함&lt;/li&gt;
&lt;li&gt;한 &lt;code&gt;EventLoop&lt;/code&gt;는 수명주기 동안 하나의 스레드에 바인딩&lt;/li&gt;
&lt;li&gt;한 &lt;code&gt;EventLoop&lt;/code&gt;에서 처리되는 모든 입출력은 전용 스레드에서 처리&lt;/li&gt;
&lt;li&gt;한 &lt;code&gt;Channel&lt;/code&gt;은 수명주기 동안 EventLoop에 등록&lt;/li&gt;
&lt;li&gt;한 &lt;code&gt;EventLoop&lt;/code&gt;는 하나 이상의 Channel로 할당 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ChannelHandler와 ChannelPipeline&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://drek4537l1klr.cloudfront.net/maurer/Figures/03fig02.jpg&quot; alt=&quot;ChannelHandler&quot; /&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;code&gt;ChannelHandler&lt;/code&gt; 인터페이스&lt;br /&gt;네티의 핵심 컴포넌트로 인바운드와 아웃바운드 데이터의 처리에 적용되는 모든 어플리케이션 논리를 처리하는 컨테이너 역할을 수행. 네트워크 이벤트에 의해 트리거되며 데이터를 변환하거나 예외처리하는 등의 모든 종류의 작업에 활용 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://drek4537l1klr.cloudfront.net/maurer/Figures/03fig03_alt.jpg&quot; alt=&quot;ChannelPipeline&quot; /&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;code&gt;ChannelPipeline&lt;/code&gt; 인터페이스
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;ChannelPipeline&lt;/code&gt;은 &lt;code&gt;ChannelHandler&lt;/code&gt; 체인을 위한 컨테이너를 제공.&lt;/li&gt;
&lt;li&gt;체인에서 인바운드/아웃바운드 이벤트를 전파하는 API를 정의한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelHandler&lt;/code&gt;는 아래와 같은 과정으로 &lt;code&gt;ChannelPipeline&lt;/code&gt;에 설치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;ChannelInitializer&lt;/code&gt; 구현은 ServerBootstrap에 등록&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelInitializer.initChannel()&lt;/code&gt;을 호출하면 ChannelInitializer가 ChannelHandler의 커스텀 집합을 파이프라인에 설치&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelInitializer&lt;/code&gt;는 &lt;code&gt;ChannelPipeline&lt;/code&gt;에서 자신을 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파이프라인을 통해 이벤트를 전달하는 역할은 &lt;code&gt;ChannelHandler&lt;/code&gt;가 담당하며, 핸들러 객체는 이벤트를 수신하고 로직을 실행하며 체인상의 다음 핸들러로 데이터를 전달한다.&lt;/li&gt;
&lt;li&gt;위 이미지에서 볼수 있듯이 인바운드/아웃바운드 핸들러는 같은 파이프라인에 설치가 가능하며 메세지/이벤트를 읽을 떄는 파이프라인 앞쪽에서 시작하며 체인상의 다음 ChannelInboundHandler로 데이터를 전달한다. 최종적으로 데이터가 파이프라인 뒤쪽에 이르면 모든 처리가 종료된다.&lt;/li&gt;
&lt;li&gt;아웃바운드도 개념은 동일하며, 체인상에서 뒤쪽에서 시작하여 앞쪽에 이를 때까지 이동한다. Socket으로 나오는 부분에 도달하면 쓰기 작업이 트리거된다.&lt;/li&gt;
&lt;li&gt;인바운드/아웃바운드 모두 ChannelHandler를 확장하지만, ChannelInboundHandler와 ChannelOutboundHandler의 구현을 구분하여 데이터 전달이 동일한 방향으로 수행되도록 보장한다.&lt;/li&gt;
&lt;li&gt;ChannelHandler를 하나 추가할 때 ChannelHandler와 ChannelPipeline의 바인딩을 나타내는 ChannelHandlerContext 하나가 할당된다.&lt;/li&gt;
&lt;li&gt;네티에서는 메세지를 보내는 데 Channel에 직접할 기록하는 방법과 ChannelHandler와 연결된 ChannelHandlerContext 객체에 기록하는 두 가지 방법이 존재한다. 전자는 ChannelPipeline 뒤쪽에서 시작되며, 후자의 방법은 메세지가 ChannelPipeline의 다음 핸들러에서 시작된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ChannelHandler에 대한 고찰&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네티는 비즈니스 로직을 쉽게 개발할 수 있도록 어댑터 클래스의 형태로 여러 기본 핸들러를 제공&lt;/li&gt;
&lt;li&gt;파이프라인의 각 핸들러는 체인의 다음 핸들러로 전달해야 하는데, 어댑터 클래스는 이 작업을 자동으로 해주고 특수한 동작이 필요한 메서드와 이벤트만 재정의할 수 있다.&lt;/li&gt;
&lt;li&gt;가장 자주 사용할 어댑터는 아래와 같다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;ChannelHandlerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelInboundHandlerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelOutboundHandlerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChannelDuplexHandlerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인코더/디코더&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메세지를 전송/수신할 때는 데이터를 변환해야 한다. 인바운드 메세지를 바이트에서 다른 포맷(보통 객체)로 변환하는 &lt;code&gt;디코딩&lt;/code&gt; 과정을 거친다. 아웃바운드 메세지를 반대로 현재 포맷에서 바이트로 &lt;code&gt;인코딩&lt;/code&gt; 되는 과정을 거친다.&lt;/li&gt;
&lt;li&gt;두 가지 변환 과정이 필요한 이유는 네트워크 데이터는 연속된 바이트여야하기 때문이다.&lt;/li&gt;
&lt;li&gt;네티가 제공하는 인코더/디코더 어댑터 클래스는 ChannelInboundHandler와 ChannelOutboundHandler를 구현한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인바운드 데이터의 경우 인바운드 Channel에서 읽는 각 메세지에 대해 호출되는 channelRead 메세지/이벤트를 재정의한다. 이 메서드는 제공된 디코더의 decode() 메서드를 호출한 후 디코딩된 바이트를 파이프라인 다음 ChannelInboundHandler에 전달한다.&lt;/li&gt;
&lt;li&gt;아웃바운드 메세지를 위한 패턴은 반대이며 인코더가 메세지를 바이트로 변환한 후 다음 ChannelOutboundHandler로 전달한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SimpleChannelInboundHandler 추상 클래스&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어플리케이션에서 들어오는 디코딩된 메세지를 수신하고 데이터에 비즈니스 논리를 적용하는 핸들러를 많이 사용하게 되는데 이러한 핸들러를 만들때 &lt;code&gt;SimpleChannelInboundHandler&amp;lt;T&amp;gt;&lt;/code&gt;를 확장하면 되며, T는 처리하는 메세지의 제네릭 타입이다. 하나 이상의 메소드를 오버라이드하고 모든 핸들러 매서드에 인자로 전달되는 ChannelHandlerContext에 대한 참조를 얻는다.&lt;/li&gt;
&lt;li&gt;이 메소드에서 가장 중요한 메소드는 &lt;code&gt;channelRead0(ChannelHandlerContext T)&lt;/code&gt;인데, 원하는대로 구현을 가능하지만 현재 입출력 스레드를 블로킹하지 않아야 한다는 요건이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;부트스트랩&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네티의 부트스트랩 클래스는 프로세스를 지정 포트에 바인딩(서버 부트스트랩)하거나 프로세스를 지정된 호스트의 지정된 포트에서 실행 중인 다른 호스트로 연결(클라이언트 부트스트랩)하는 등의 일을 하는 네트워크 레이어를 구성하는 컨테이너를 제공한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;범주&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Bootstrap&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;ServerBootstrap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;네트워크 기능&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;원격 호스트/포트와 연결&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;로컬 포트로 바인딩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EventLoopGroup&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bootstrap과 ServerBootstrap은 각기 EventLoopGroup의 수가 다른걸 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://drek4537l1klr.cloudfront.net/maurer/Figures/03fig04_alt.jpg&quot; alt=&quot;ServerBootstrap_EventLoopGroup&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버의 경우, 첫 번째 집합은 로컬 포트와 바인됭 서버 자체의 수신 소켓을 나타내는 ServerChannel 하나를 포함하고 두 번째 집합은 서버가 수락한 연결마다 하나씩 들어오는 클라이언트 연결을 처리하기 위해 생성된 모든 Channel을 포함한다.&lt;/li&gt;
&lt;li&gt;ServerChannel과 연결된 EventLoopGroup은 들어오는 연결 요청에 대해 Channel을 생성하는 역할을 EventLoop 하나에 할당한다. 연결이 수락되면 두 번째 EventLoopGroup이 해당 Channel에 EventLoop를 할당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4장 전송&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네티는 모든 전송 구현에 공통 API를 기반으로 사용하기 때문에 JDK를 직접 이용할 떄보다 변환이 훨씬 간단하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드가 세부 구현 사항으로 오염될 우려가 적고, 광범위한 범위를 수정할 필요가 없어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/151</guid>
      <comments>https://stylishc.tistory.com/151#entry151comment</comments>
      <pubDate>Sun, 18 Jul 2021 15:13:50 +0900</pubDate>
    </item>
    <item>
      <title>영속성 관리(Persistence Context, OSIV)</title>
      <link>https://stylishc.tistory.com/150</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131;&amp;#xAD00;&amp;#xB9AC;&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css&quot;&gt;
      
      

      
      
      
      
      
      

      &lt;style&gt;
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;blockquote&gt;
&lt;p&gt;&amp;#xC790;&amp;#xBC14; ORM &amp;#xD45C;&amp;#xC900; JPA &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; 13&amp;#xC7A5; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1;&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108; &amp;#xD658;&amp;#xACBD;&amp;#xC5D0;&amp;#xC11C; JPA&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108; &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xACFC; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xAD00;&amp;#xB9AC;&amp;#xD574;&amp;#xC8FC;&amp;#xBBC0;&amp;#xB85C; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xAC1C;&amp;#xBC1C;&amp;#xC774; &amp;#xC26C;&amp;#xC6CC;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xB418;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xB0B4;&amp;#xBD80; &amp;#xB3D9;&amp;#xC791;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC815;&amp;#xD655;&amp;#xD55C; &amp;#xC774;&amp;#xD574;&amp;#xAC00; &amp;#xC5C6;&amp;#xC744; &amp;#xB54C; &amp;#xC0DD;&amp;#xAE30;&amp;#xB294; &amp;#xD2B8;&amp;#xB7EC;&amp;#xBE14; &amp;#xC288;&amp;#xD305;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC; &amp;#xC9C0;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC774;&amp;#xB2E4;. &amp;#xB0B4;&amp;#xBD80;&amp;#xB3D9;&amp;#xC791;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC774;&amp;#xD574;, &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xAE30;&amp;#xBCF8; &amp;#xC804;&amp;#xB7B5;, &amp;#xC9C0;&amp;#xC5F0;&amp;#xB85C;&amp;#xB529;, OSIV&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xAC00;&amp;#xBCCD;&amp;#xAC8C; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xACE0;&amp;#xC790; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EB%B2%94%EC%9C%84%EC%9D%98-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8&quot;&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704;&amp;#xC758; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&lt;/h2&gt;

&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EC%A0%84%EB%9E%B5&quot;&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108;&amp;#xC758; &amp;#xAE30;&amp;#xBCF8; &amp;#xC804;&amp;#xB7B5;&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/lgR6GfA.png&quot; alt=&quot;&amp;#x1110;&amp;#x1173;&amp;#x1105;&amp;#x1162;&amp;#x11AB;&amp;#x110C;&amp;#x1162;&amp;#x11A8;&amp;#x1109;&amp;#x1167;&amp;#x11AB;_&amp;#x1107;&amp;#x1165;&amp;#x11B7;&amp;#x110B;&amp;#x1171;_&amp;#x110B;&amp;#x1167;&amp;#x11BC;&amp;#x1109;&amp;#x1169;&amp;#x11A8;&amp;#x1109;&amp;#x1165;&amp;#x11BC;_&amp;#x110F;&amp;#x1165;&amp;#x11AB;&amp;#x1110;&amp;#x1166;&amp;#x11A8;&amp;#x1109;&amp;#x1173;&amp;#x1110;&amp;#x1173;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1;&amp;#xC740; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704;&amp;#xC758; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xAE30;&amp;#xBCF8; &amp;#xC804;&amp;#xB7B5;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704;&amp;#xC640; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xC0DD;&amp;#xC874; &amp;#xBC94;&amp;#xC704;&amp;#xAC00; &amp;#xB3D9;&amp;#xC77C;&amp;#xD558;&amp;#xBA70;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC885;&amp;#xB8CC; &amp;#xC2DC;, &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB3C4; &amp;#xB3D9;&amp;#xC77C;&amp;#xD558;&amp;#xAC8C; &amp;#xC885;&amp;#xB8CC;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/vZtbhUl.png&quot; alt=&quot;&amp;#x1110;&amp;#x1173;&amp;#x1105;&amp;#x1162;&amp;#x11AB;&amp;#x110C;&amp;#x1162;&amp;#x11A8;&amp;#x1109;&amp;#x1167;&amp;#x11AB;_&amp;#x1107;&amp;#x1165;&amp;#x11B7;&amp;#x110B;&amp;#x1171;_&amp;#x110B;&amp;#x1167;&amp;#x11BC;&amp;#x1109;&amp;#x1169;&amp;#x11A8;&amp;#x1109;&amp;#x1165;&amp;#x11BC;_&amp;#x110F;&amp;#x1165;&amp;#x11AB;&amp;#x1110;&amp;#x1166;&amp;#x11A8;&amp;#x1109;&amp;#x1173;&amp;#x1110;&amp;#x1173;_AOP&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;@Transactional&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xB2E8;&amp;#xC21C; &amp;#xD638;&amp;#xCD9C;&amp;#xCC98;&amp;#xB7FC; &amp;#xBCF4;&amp;#xC774;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xB3C4; &amp;#xC0AC;&amp;#xC2E4; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; AOP&amp;#xAC00; &amp;#xBA3C;&amp;#xC800; &amp;#xC791;&amp;#xB3D9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; AOP&amp;#xB294; &amp;#xB300;&amp;#xC0C1; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xAE30; &amp;#xC9C1;&amp;#xC804;&amp;#xC5D0; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xBA70;, &amp;#xD638;&amp;#xCD9C;&amp;#xC774; &amp;#xC815;&amp;#xC0C1;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC885;&amp;#xB8CC;&amp;#xB418;&amp;#xBA74; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xCEE4;&amp;#xBC0B;&amp;#xD558;&amp;#xACE0; &amp;#xC885;&amp;#xB8CC;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xCEE4;&amp;#xBC0B; &amp;#xC2DC;, JPA&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC2DC;&amp;#xD558;&amp;#xC5EC; &amp;#xBCC0;&amp;#xACBD; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; DB&amp;#xC5D0; &amp;#xBC18;&amp;#xC601;&amp;#xD55C; &amp;#xD6C4; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xCEE4;&amp;#xBC0B;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC608;&amp;#xC678;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xB864;&amp;#xBC31;&amp;#xD558;&amp;#xACE0; &amp;#xC885;&amp;#xB8CC;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB54C;&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC2DC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/t9RFewK.png&quot; alt=&quot;&amp;#x1110;&amp;#x1173;&amp;#x1105;&amp;#x1162;&amp;#x11AB;&amp;#x110C;&amp;#x1162;&amp;#x11A8;&amp;#x1109;&amp;#x1167;&amp;#x11AB;_&amp;#x110B;&amp;#x1167;&amp;#x11BC;&amp;#x1109;&amp;#x1169;&amp;#x11A8;&amp;#x1109;&amp;#x1165;&amp;#x11BC;&amp;#x110F;&amp;#x1165;&amp;#x11AB;&amp;#x1110;&amp;#x1166;&amp;#x11A8;&amp;#x1109;&amp;#x1173;&amp;#x1110;&amp;#x1173;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xAC19;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;, &amp;#xAC19;&amp;#xC740; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xC704;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xB9E4;&amp;#xB2C8;&amp;#xC800;(EntityManager)&amp;#xB97C; &amp;#xC8FC;&amp;#xC785;&amp;#xBC1B;&amp;#xC544; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xB3C4; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xAC19;&amp;#xC73C;&amp;#xBA74; &amp;#xD56D;&amp;#xC0C1; &amp;#xAC19;&amp;#xC740; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/al1qaZQ.png&quot; alt=&quot;&amp;#x1109;&amp;#x1173;&amp;#x1105;&amp;#x1166;&amp;#x1103;&amp;#x1173;_&amp;#x110B;&amp;#x1167;&amp;#x11BC;&amp;#x1109;&amp;#x1169;&amp;#x11A8;&amp;#x1109;&amp;#x1165;&amp;#x11BC;&amp;#x110F;&amp;#x1165;&amp;#x11AB;&amp;#x1110;&amp;#x1166;&amp;#x11A8;&amp;#x1109;&amp;#x1173;&amp;#x1110;&amp;#x1173;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xB2E4;&amp;#xB97C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xB2E4;&amp;#xB978; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xC5EC;&amp;#xB7EC; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xB3D9;&amp;#xC2DC;&amp;#xC5D0; &amp;#xC694;&amp;#xCCAD;&amp;#xC5D0; &amp;#xC62C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xAC19;&amp;#xC740; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xB9E4;&amp;#xB2C8;&amp;#xC800;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD558;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xAC00; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C4;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &lt;strong&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xBCC4;&amp;#xB85C; &amp;#xAC01;&amp;#xAE30; &amp;#xB2E4;&amp;#xB978; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xD560;&amp;#xB2F9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;&lt;/strong&gt;, &amp;#xB530;&amp;#xB77C;&amp;#xC11C; &amp;#xAC19;&amp;#xC740; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xB9E4;&amp;#xB2C8;&amp;#xC800;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD574;&amp;#xB3C4; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xAC00; &amp;#xB2E4;&amp;#xB974;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBA40;&amp;#xD2F0;&amp;#xC2A4;&amp;#xB808;&amp;#xB4DC; &amp;#xD658;&amp;#xACBD;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC548;&amp;#xC804;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%A4%80%EC%98%81%EC%86%8D%EC%A7%80%EC%97%B0-%EB%A1%9C%EB%94%A9&quot;&gt;&amp;#xC900;&amp;#xC601;&amp;#xC18D;/&amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC870;&amp;#xD68C;&amp;#xD55C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xAC00; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;, &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; &amp;#xAD00;&amp;#xB9AC;&amp;#xAC00; &amp;#xB418;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC774; &amp;#xBC16;&amp;#xC758; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC900;&amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xAC00; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xAD00;&amp;#xB9AC; &amp;#xBC16;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;&amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&lt;/code&gt; &amp;#xBC0F; &lt;code&gt;&amp;#xBCC0;&amp;#xACBD; &amp;#xAC10;&amp;#xC9C0;&lt;/code&gt;&amp;#xAC00; &amp;#xB3D9;&amp;#xC791;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xB530;&amp;#xB77C;&amp;#xC11C;, &amp;#xBE44;&amp;#xC9C0;&amp;#xB2C8;&amp;#xC2A4; &amp;#xD639;&amp;#xC740; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC744; &amp;#xAE30;&amp;#xBC18;&amp;#xC73C;&amp;#xB85C; &amp;#xD55C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;/&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC218;&amp;#xD589;&amp;#xC744; &amp;#xD574;&amp;#xC57C;&amp;#xD55C;&amp;#xB2E4;. &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0;&amp;#xC11C; &amp;#xC774;&amp;#xB97C; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xBCC4;&amp;#xB85C; &amp;#xCC45;&amp;#xC784;&amp;#xC774; &amp;#xBAA8;&amp;#xD638;&amp;#xD574;&amp;#xC9C0;&amp;#xACE0; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC758; &amp;#xC720;&amp;#xC9C0;&amp;#xBCF4;&amp;#xC218;&amp;#xC131;&amp;#xC774; &amp;#xAE09;&amp;#xACA9;&amp;#xD558;&amp;#xAC8C; &amp;#xB5A8;&amp;#xC5B4;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529; &amp;#xAE30;&amp;#xB2A5;&amp;#xC774; &amp;#xB3D9;&amp;#xC791;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC0DD;&amp;#xAE30;&amp;#xB294; &amp;#xC774;&amp;#xC288;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xD06C;&amp;#xB2E4;. &amp;#xB9CC;&amp;#xC57D; &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529; &amp;#xC0C1;&amp;#xD0DC;&amp;#xC758; &amp;#xC5F0;&amp;#xAD00; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB098; &amp;#xBC38;&amp;#xB958;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0;, &lt;code&gt;LazyIntializationException&lt;/code&gt; &amp;#xC608;&amp;#xC678;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xD574;&amp;#xACB0;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBBF8;&amp;#xB9AC; &amp;#xB85C;&amp;#xB529;
&lt;ol&gt;
&lt;li&gt;&amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5; &amp;#xC218;&amp;#xC815;&lt;/li&gt;
&lt;li&gt;JPQL &amp;#xD398;&amp;#xCE58; &amp;#xC870;&amp;#xC778;&lt;/li&gt;
&lt;li&gt;&amp;#xAC15;&amp;#xC81C;&amp;#xB85C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;OSIV(Open Sessin in View)&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xD56D;&amp;#xC0C1; &amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB85C; &amp;#xC720;&amp;#xC9C0;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OSIV&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xB294;&amp;#xAC78;&amp;#xB85C; &amp;#xD558;&amp;#xACE0;, &amp;#xBA3C;&amp;#xC800; &amp;#xD544;&amp;#xC694; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBBF8;&amp;#xB9AC; &amp;#xB85C;&amp;#xB529;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xACE0;&amp;#xC790; &amp;#xD55C;&amp;#xB2E4;. &amp;#xB9D0; &amp;#xADF8;&amp;#xB300;&amp;#xB85C;, &amp;#xBDF0; &amp;#xD639;&amp;#xC740; &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8; &amp;#xBC94;&amp;#xC704; &amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xBBF8;&amp;#xB9AC; &amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xAC00;&amp;#xB9AC;&amp;#xD0A4;&amp;#xBA70; &amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xC815;&amp;#xB9AC;&amp;#xD55C;&amp;#xB300;&amp;#xB85C; 3&amp;#xAC00;&amp;#xC9C0; &amp;#xBC29;&amp;#xBC95;&amp;#xC774; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EA%B8%80%EB%A1%9C%EB%B2%8C-%ED%8E%98%EC%B9%98-%EC%A0%84%EB%9E%B5-%EC%88%98%EC%A0%95-%EC%A6%89%EC%8B%9C-%EB%A1%9C%EB%94%A9&quot;&gt;&amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5; &amp;#xC218;&amp;#xC815; - &amp;#xC989;&amp;#xC2DC; &amp;#xB85C;&amp;#xB529;&lt;/h3&gt;

&lt;p&gt;&amp;#xC8FC;&amp;#xBB38; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0;&amp;#xC11C; &amp;#xC8FC;&amp;#xBB38; &amp;#xC0C1;&amp;#xD488; &amp;#xBCA8;&amp;#xB958; &amp;#xBAA9;&amp;#xB85D;&amp;#xC744; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xC608;&amp;#xC81C;&amp;#xB85C; &amp;#xC8FC;&amp;#xBB38; &amp;#xC0C1;&amp;#xD488; &amp;#xBCA8;&amp;#xB958;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &lt;code&gt;@ElementCollection&lt;/code&gt;&amp;#xC744; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC8FC;&amp;#xBB38; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0; &amp;#xB9E4;&amp;#xD551;&amp;#xC744; &amp;#xD588;&amp;#xC73C;&amp;#xBA70; &amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC740; &amp;#xC989;&amp;#xC2DC; &amp;#xB85C;&amp;#xB529;&amp;#xC73C;&amp;#xB85C; &amp;#xC124;&amp;#xC815;&amp;#xD574;&amp;#xC8FC;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;orders&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Order &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@Id&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@GeneratedValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strategy &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; GenerationType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IDENTITY&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0L&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; updatable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; memberId&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0L&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@Enumerated&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; EnumType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;STRING&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; status&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderStatus &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; OrderStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PAYMENT_WAITING
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@ElementCollection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fetch &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; FetchType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;EAGER&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@CollectionTable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;order_products&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		joinColumns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;JoinColumn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@AttributeOverrides&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;productId&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;product_id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;price&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;price&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;quantity&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;quantity&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;amounts&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;amounts&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;line_idx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;line_idx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@OrderBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;line_idx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; orderProducts&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;OrderProduct&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mutableListOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@CreationTimestamp&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; createdAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@UpdateTimestamp&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; updatedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;companion&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;doOrder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
			memberId&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			status&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderStatus&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			products&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;OrderProduct&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Order &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;status &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;OrderStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PAYMENT_WAITING&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; OrderStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PATMENT_COMPLETED&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC62C;&amp;#xBC14;&amp;#xB978; &amp;#xC8FC;&amp;#xBB38; &amp;#xC0C1;&amp;#xD0DC; &amp;#xAC12;&amp;#xC774; &amp;#xC544;&amp;#xB2D9;&amp;#xB2C8;&amp;#xB2E4;.&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;products&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xCD5C;&amp;#xC18C; &amp;#xD55C;&amp;#xAC1C; &amp;#xC774;&amp;#xC0C1;&amp;#xC758; &amp;#xAD6C;&amp;#xB9E4; &amp;#xC0C1;&amp;#xD488;&amp;#xC744; &amp;#xD3EC;&amp;#xD568;&amp;#xD574;&amp;#xC57C; &amp;#xD569;&amp;#xB2C8;&amp;#xB2E4;.&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Order&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;also&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;memberId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; memberId
				it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;status &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; status
				it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orderProducts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; products&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toMutableList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Service&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Transactional&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;read&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;OrderService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderRepository&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderRepository
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;pageable&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Pageable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Page&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Order&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; orderRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;pageable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Order &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; orderRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findByIdOrNull&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token operator&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NotExistsOrderException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC8FC;&amp;#xBB38;&amp;#xC785;&amp;#xB2C8;&amp;#xB2E4;.&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC8FC;&amp;#xBB38; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC870;&amp;#xD68C;&amp;#xB97C; &amp;#xBAA9;&amp;#xB85D;/&amp;#xB2E8;&amp;#xAC74; &amp;#xC870;&amp;#xD68C;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xAC00;&amp;#xBCBC;&amp;#xC6B4; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD588;&amp;#xB2E4;. &amp;#xC8FC;&amp;#xBB38;ID &amp;#xAE30;&amp;#xC900;&amp;#xC758; &amp;#xB2E8;&amp;#xAC74; &amp;#xC870;&amp;#xD68C;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC5F0;&amp;#xAD00; &amp;#xCF5C;&amp;#xB809;&amp;#xC158;&amp;#xC5D0; &amp;#xB9E4;&amp;#xD551; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB294; &lt;code&gt;order_products&lt;/code&gt;&amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC744; LEFT OUTER JOIN&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBC14;&amp;#xB85C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &amp;#xD655;&amp;#xC778; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;br&gt;
&lt;img src=&quot;https://i.imgur.com/4N4g15c.png&quot; alt=&quot;EAGER_LEFT_OUTER_JOIN&quot;&gt;&lt;/p&gt;
&lt;p&gt;&amp;#xC5EC;&amp;#xAE30;&amp;#xAE4C;&amp;#xC9C0;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC5C6;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xBB38;&amp;#xC81C;&amp;#xB294; &amp;#xBAA9;&amp;#xB85D; &amp;#xC870;&amp;#xD68C; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0DD;&amp;#xAE30;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xBC14;&amp;#xB85C; &lt;code&gt;N+1&lt;/code&gt; &amp;#xBB38;&amp;#xC81C;&amp;#xC774;&amp;#xB2E4;.&lt;br&gt;
&lt;img src=&quot;https://i.imgur.com/oWSQpfD.png&quot; alt=&quot;EAGER_N+1&quot;&gt;&lt;/p&gt;
&lt;p&gt;&amp;#xB2E8;&amp;#xAC74;&amp;#xB9CC; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB77C;&amp;#xBA74; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC5C6;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xB300;&amp;#xBD80;&amp;#xBD84;&amp;#xC758; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xBAA9;&amp;#xB85D; &amp;#xC870;&amp;#xD68C;&amp;#xB294; &amp;#xAE30;&amp;#xBCF8;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC989;&amp;#xC2DC; &amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD568;&amp;#xC73C;&amp;#xB85C;&amp;#xC368; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xB2E8;&amp;#xC810;&amp;#xC774; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xBD88;&amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC870;&amp;#xD68C;&lt;/strong&gt;&lt;br&gt;
&amp;#xC8FC;&amp;#xBB38; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0;&amp;#xC11C; &amp;#xBAA9;&amp;#xB85D;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0;&amp;#xB3C4; &amp;#xB9E4;&amp;#xBC88; &amp;#xBAA9;&amp;#xB85D; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; DB &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC624;&amp;#xBC84;&amp;#xD5E4;&amp;#xB4DC;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N+1 &amp;#xBB38;&amp;#xC81C; &amp;#xBC1C;&amp;#xC0DD;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC704; &amp;#xC774;&amp;#xBBF8;&amp;#xC9C0;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB4EF;&amp;#xC774;, &amp;#xB514;&amp;#xBE44;&amp;#xC5D0; &amp;#xC9C8;&amp;#xC758;&amp;#xD558;&amp;#xB294; &amp;#xCFFC;&amp;#xB9AC; &amp;#xAC1C;&amp;#xC218;&amp;#xAC00; &amp;#xBAA9;&amp;#xB85D;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC1C;&amp;#xC218;&amp;#xB9CC;&amp;#xD07C;&amp;#xC758; IO&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBD88;&amp;#xD544;&amp;#xC694;&amp;#xD55C; IO &amp;#xBC1C;&amp;#xC0DD;&amp;#xC740; &amp;#xC11C;&amp;#xBC84; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB2F9;&amp;#xC5F0;&amp;#xD788; &amp;#xC9C0;&amp;#xC591;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;JPQL&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0;(ex. JpaRepository.findAll()), JPA&amp;#xB294; SQL&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xB54C; &amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xCC38;&amp;#xACE0;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xC624;&amp;#xC9C1; JPQL &amp;#xC790;&amp;#xCCB4;&amp;#xB9CC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798;&amp;#xB294; SQL&amp;#xBB38;&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC744; &amp;#xC124;&amp;#xBA85;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;select o from Order o&lt;/code&gt; JPQL&amp;#xC744; &amp;#xBD84;&amp;#xC11D;&amp;#xD558;&amp;#xC5EC; &lt;code&gt;select * from Order&lt;/code&gt; SQL&amp;#xC744; &amp;#xC2E4;&amp;#xD589;&lt;/li&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xACB0;&amp;#xACFC;&amp;#xB97C; &amp;#xBC1B;&amp;#xC544; &lt;code&gt;Order&lt;/code&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xBAA9;&amp;#xB85D;&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Order.orderProducts&lt;/code&gt;&amp;#xC758; &amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC774; &amp;#xC989;&amp;#xC2DC; &amp;#xB85C;&amp;#xB529;&amp;#xC774;&amp;#xBBC0;&amp;#xB85C; &amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958; &amp;#xCF5C;&amp;#xB809;&amp;#xC158;&amp;#xC744; &amp;#xB85C;&amp;#xB529;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C; &amp;#xCC3E;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC800;&amp;#xC7A5;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB294; 1&amp;#xCC28; &amp;#xCE90;&amp;#xC2F1; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAC00; &amp;#xC5C6;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;, DB&amp;#xC5D0; &amp;#xC9C8;&amp;#xC758;&amp;#xD558;&amp;#xC5EC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC628;&amp;#xB2E4;. &amp;#xC774;&amp;#xB54C;, &lt;code&gt;Order&lt;/code&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xBAA9;&amp;#xB85D;&amp;#xC758; &amp;#xAC1C;&amp;#xC218;&amp;#xB9CC;&amp;#xD07C; DB&amp;#xC5D0; &amp;#xC9C8;&amp;#xC758;&amp;#xB97C; &amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EA%B8%80%EB%A1%9C%EB%B2%8C-%ED%8E%98%EC%B9%98-%EC%A0%84%EB%9E%B5-%EC%88%98%EC%A0%95-%EC%A7%80%EC%97%B0-%EB%A1%9C%EB%94%A9&quot;&gt;&amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5; &amp;#xC218;&amp;#xC815; - &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xACAA;&amp;#xC5C8;&amp;#xB358; N+1 &amp;#xBB38;&amp;#xC81C;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958; &amp;#xCF5C;&amp;#xB809;&amp;#xC158;&amp;#xC758; &amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC73C;&amp;#xB85C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xACE0;, &amp;#xC774;&amp;#xB97C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8; &amp;#xBC94;&amp;#xC704; &amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xD638;&amp;#xCD9C;&amp;#xD574;&amp;#xC8FC;&amp;#xBA74; &amp;#xD574;&amp;#xACB0;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Service&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Transactional&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;readOnly &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;OrderService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderRepository&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderRepository
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;pageable&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Pageable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Page&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Order&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; orderRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;pageable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;order &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; list&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;// &amp;#xC2E4;&amp;#xC81C; &amp;#xAC12;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C; &amp;#xD504;&amp;#xB85D;&amp;#xC2DC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xB41C;&amp;#xB2E4;.&lt;/span&gt;
			order&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orderProducts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;amounts &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Order &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; order &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;orderRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findByIdOrNull&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token operator&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NotExistsOrderException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC8FC;&amp;#xBB38;&amp;#xC785;&amp;#xB2C8;&amp;#xB2E4;.&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// &amp;#xC2E4;&amp;#xC81C; &amp;#xAC12;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C; &amp;#xD504;&amp;#xB85D;&amp;#xC2DC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xB41C;&amp;#xB2E4;.&lt;/span&gt;
		order&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orderProducts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;amounts &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; order
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xAE00;&amp;#xB85C;&amp;#xBC8C; &amp;#xD398;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC73C;&amp;#xB85C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xC2E4;&amp;#xC81C;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xD504;&amp;#xB85D;&amp;#xC2DC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xB300;&amp;#xC0C1;&amp;#xC73C;&amp;#xB85C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;br&gt;
&amp;#xD504;&amp;#xB85D;&amp;#xC2DC;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xC2E4;&amp;#xC81C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xAC00; &amp;#xC9C4;&amp;#xD589;&amp;#xB418;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC704; &amp;#xCF54;&amp;#xB4DC;&amp;#xCC98;&amp;#xB7FC; &lt;strong&gt;&amp;#xC2E4;&amp;#xC81C; &amp;#xAC12;&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xB294; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xB123;&amp;#xC5B4;&amp;#xC918;&amp;#xC57C;&amp;#xC9C0; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xAC00; &amp;#xC9C4;&amp;#xD589;&amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC704; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, ID &amp;#xAE30;&amp;#xC900;&amp;#xC758; &amp;#xC870;&amp;#xD68C; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xC778; get&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC758; &amp;#xC774;&amp;#xC810;&amp;#xC744; &amp;#xCDA9;&amp;#xBD84;&amp;#xD788; &amp;#xC798; &amp;#xC0B4;&amp;#xB824;&amp;#xB0C8;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xBAA9;&amp;#xB85D; &amp;#xC870;&amp;#xD68C;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xAC15;&amp;#xC81C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xB97C; &amp;#xC9C4;&amp;#xD589;&amp;#xD558;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xC989;&amp;#xC2DC; &amp;#xB85C;&amp;#xB529;&amp;#xC5D0;&amp;#xC11C;&amp;#xCC98;&amp;#xB7FC; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xC2DC; &amp;#xB9E4;&amp;#xBC88; &amp;#xB9E4;&amp;#xD551;&amp;#xD55C; &amp;#xBCA8;&amp;#xB958; &amp;#xCF5C;&amp;#xB809;&amp;#xC158;&amp;#xC744; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xB610; &amp;#xB2E4;&amp;#xB978; &amp;#xC758;&amp;#xBBF8;&amp;#xC758; &lt;code&gt;N+1&lt;/code&gt;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC774;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xD615;&amp;#xD0DC;&amp;#xC758; &lt;code&gt;N+1&lt;/code&gt;&amp;#xC744; &amp;#xD53C;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC73C;&amp;#xB85C;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC758; &lt;code&gt;@BatchSize&lt;/code&gt;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;. &lt;code&gt;@BatchSize&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &amp;#xD504;&amp;#xB85D;&amp;#xC2DC;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xB300;&amp;#xC0C1;&amp;#xC774; &amp;#xB418;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xC2E4;&amp;#xC81C; &amp;#xAC12;&amp;#xC744; &amp;#xAC00;&amp;#xC838;&amp;#xC624;&amp;#xB294; DB &amp;#xC9C8;&amp;#xC758;&amp;#xB97C; in&amp;#xC808;&amp;#xB85C; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xC5EC; N&amp;#xBC88;&amp;#xC758; DB &amp;#xC9C8;&amp;#xC758;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB3C4;&amp;#xB85D; &amp;#xD574;&amp;#xC900;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &lt;code&gt;@BatchSize&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xC2E4;&amp;#xC81C; &amp;#xC5F0;&amp;#xAD00; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xAC74; &amp;#xB3D9;&amp;#xC77C;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xAE30;&amp;#xC900;&amp;#xC744; &amp;#xB098;&amp;#xB220;&amp;#xC11C; &amp;#xB9E4;&amp;#xD551;&amp;#xD558;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;JPQL fetch &amp;#xC870;&amp;#xC778;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xBA74; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; SQL &amp;#xC870;&amp;#xC778;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD568;&amp;#xAED8; &amp;#xB85C;&amp;#xB529;&amp;#xD560; &amp;#xBCA8;&amp;#xB958;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xB85C;&amp;#xB529;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, JPQL&amp;#xC758; &amp;#xD398;&amp;#xCE58; &amp;#xC870;&amp;#xC778;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC5D0; &amp;#xB9DE;&amp;#xCD98; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xAC00; &amp;#xB298;&amp;#xC5B4;&amp;#xB0A0; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xB294; &amp;#xB2E8;&amp;#xC810;&amp;#xC774; &amp;#xBD84;&amp;#xBA85;&amp;#xD788; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xD2B8;&amp;#xB808;&amp;#xC774;&amp;#xB4DC;&amp;#xC624;&amp;#xD504;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xC9C0;&amp;#xC810;&amp;#xC774;&amp;#xB2E4;. &amp;#xC131;&amp;#xB2A5;&amp;#xC801;&amp;#xC778; &amp;#xCD5C;&amp;#xC801;&amp;#xD654; &amp;#xD639;&amp;#xC740; &amp;#xB192;&amp;#xC740; TPS&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xBD88;&amp;#xD544;&amp;#xC694;&amp;#xD55C; IO&amp;#xB294; &amp;#xBCD1;&amp;#xBAA9;&amp;#xC9C0;&amp;#xC810;&amp;#xC774; &amp;#xB420; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xC5F0;&amp;#xAD00; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBAA8;&amp;#xB450; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; Cache&amp;#xB97C; &amp;#xC801;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBD88;&amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xAC8C; DB IO&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC88B;&amp;#xACE0;, &amp;#xD544;&amp;#xC694;&amp;#xD55C; DB IO&amp;#xB9CC; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; JPQL&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95; &amp;#xBAA8;&amp;#xB450; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xB9DE;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EA%B7%B8%EB%9E%98%EC%84%9C-%EC%B5%9C%EC%84%A0%EC%9D%98-%EB%B0%A9%EB%B2%95%EC%9D%80&quot;&gt;&amp;#xADF8;&amp;#xB798;&amp;#xC11C; &amp;#xCD5C;&amp;#xC120;&amp;#xC758; &amp;#xBC29;&amp;#xBC95;&amp;#xC740;?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xACB0;&amp;#xAD6D;, &lt;strong&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4; &amp;#xBC16;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC900;&amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xAC00; &amp;#xBB38;&amp;#xC81C;&amp;#xC758; &amp;#xD575;&amp;#xC2EC;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt;&lt;br&gt;
&amp;#xC774;&amp;#xB97C; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xACBD;&amp;#xACC4; &amp;#xBC16;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xAC00; &amp;#xC0B4;&amp;#xC544;&amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC790;&amp;#xC5F0;&amp;#xC2A4;&amp;#xB7FD;&amp;#xAC8C; &amp;#xC9C0;&amp;#xC5F0;&amp;#xB85C;&amp;#xB529;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xB97C; &amp;#xD574;&amp;#xACB0;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xADF8;&amp;#xAC83;&amp;#xC774; &amp;#xBC14;&amp;#xB85C; &lt;code&gt;OSIV&lt;/code&gt;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;osiv&quot;&gt;OSIV&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open Session In View&lt;/li&gt;
&lt;li&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xAE4C;&amp;#xC9C0; &amp;#xC5F4;&amp;#xC5B4;&amp;#xB454;&amp;#xB2E4;&amp;#xB294; &amp;#xB73B;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;OSIV&lt;/code&gt; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;OEIV&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xBD80;&amp;#xB974;&amp;#xBA70;, &amp;#xAD00;&amp;#xB840;&amp;#xC0C1;&amp;#xC73C;&amp;#xB85C; OSIV&amp;#xB77C;&amp;#xACE0; &amp;#xD1B5;&amp;#xCE6D;&amp;#xD558;&amp;#xB294; &amp;#xB4EF; &amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC758; OSIV&amp;#xC640; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; OEIV&amp;#xB294; &amp;#xBE44;&amp;#xC2B7;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xCC28;&amp;#xC774;&amp;#xC810;&amp;#xC774; &amp;#xBD84;&amp;#xBA85;&amp;#xD558;&amp;#xAC8C; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;. &amp;#xC27D;&amp;#xAC8C; &amp;#xC0DD;&amp;#xAC01;&amp;#xD558;&amp;#xC5EC; &amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; OSIV&amp;#xC758; &amp;#xB2E8;&amp;#xC810;&amp;#xC744; &amp;#xAC1C;&amp;#xC120;&amp;#xD55C; &amp;#xAC83;&amp;#xC774; OEIV&amp;#xB77C;&amp;#xACE0; &amp;#xBD10;&amp;#xB3C4; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EA%B3%BC%EA%B1%B0-osiv-%EC%9A%94%EC%B2%AD-%EB%8B%B9-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;&amp;#xACFC;&amp;#xAC70; OSIV: &amp;#xC694;&amp;#xCCAD; &amp;#xB2F9; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xCD08;&amp;#xCC3D;&amp;#xAE30; OSIV&amp;#xB294; &amp;#xC694;&amp;#xCCAD; &amp;#xB2F9; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC9C0;&amp;#xC6D0;&amp;#xD588;&amp;#xB294;&amp;#xB370; &amp;#xC544;&amp;#xB798; &amp;#xADF8;&amp;#xB9BC;&amp;#xC744; &amp;#xCC38;&amp;#xACE0;&amp;#xD558;&amp;#xC790;&lt;br&gt;
&lt;img src=&quot;https://i.imgur.com/sFEvc8g.png&quot; alt=&quot;OSIV_&amp;#x110B;&amp;#x116D;&amp;#x110E;&amp;#x1165;&amp;#x11BC;&amp;#x1103;&amp;#x1161;&amp;#x11BC;&amp;#x1110;&amp;#x1173;&amp;#x1105;&amp;#x1162;&amp;#x11AB;&amp;#x110C;&amp;#x1162;&amp;#x11A8;&amp;#x1109;&amp;#x1167;&amp;#x11AB;&quot;&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC11C;&amp;#xBE14;&amp;#xB9BF; &amp;#xD544;&amp;#xD130; &amp;#xD639;&amp;#xC740; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xC778;&amp;#xD130;&amp;#xC149;&amp;#xD130;&amp;#xC5D0;&amp;#xC11C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xBA70; &amp;#xC774;&amp;#xB54C;&amp;#xBD80;&amp;#xD130; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xACE0; &amp;#xC694;&amp;#xCCAD;&amp;#xC774; &amp;#xB05D;&amp;#xB0A0; &amp;#xB54C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xACFC; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD568;&amp;#xAED8; &amp;#xC885;&amp;#xB8CC;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xB3C4; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xB0B4;&amp;#xC5D0; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xAC8C; &amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C;, &amp;#xC9C0;&amp;#xC5F0;&amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574; &amp;#xD504;&amp;#xB85D;&amp;#xC2DC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xC5C6;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC758; &amp;#xACBD;&amp;#xACC4;&amp;#xAC00; &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xBD80;&amp;#xD130; &amp;#xC2DC;&amp;#xC791;&amp;#xD568;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &lt;strong&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC758; &amp;#xACBD;&amp;#xACC4;&amp;#xAC00; &amp;#xBAA8;&amp;#xD638;&amp;#xD574;&amp;#xC9C0;&amp;#xBA70; &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xACF3;&amp;#xC5D0;&amp;#xC11C; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EC%9A%94%EC%B2%AD-%EB%8B%B9-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90&quot;&gt;&amp;#xC694;&amp;#xCCAD; &amp;#xB2F9; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xBB38;&amp;#xC81C;&amp;#xC810;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;JDBC &amp;#xCEE4;&amp;#xB125;&amp;#xC158; &amp;#xBCF4;&amp;#xC720; &amp;#xC2DC;&amp;#xAC04; &amp;#xC99D;&amp;#xAC00;
&lt;ul&gt;
&lt;li&gt;JDBC &amp;#xCEE4;&amp;#xB125;&amp;#xC158;&amp;#xC740; &amp;#xBDF0;&amp;#xC758; &amp;#xB80C;&amp;#xB354;&amp;#xB9C1;&amp;#xC774; &amp;#xBAA8;&amp;#xB450; &amp;#xC644;&amp;#xB8CC;&amp;#xB41C; &amp;#xD6C4;&amp;#xC5D0;&amp;#xC57C; &amp;#xCEE4;&amp;#xB125;&amp;#xC158; &amp;#xD480;&amp;#xB85C; &amp;#xBC18;&amp;#xD658;&amp;#xB41C;&amp;#xB2E4;. &amp;#xB530;&amp;#xB77C;&amp;#xC11C; &amp;#xBDF0;&amp;#xC758; &amp;#xB80C;&amp;#xB354;&amp;#xB9C1; &amp;#xC2DC;&amp;#xAC04;&amp;#xC774; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C0;&amp;#xBA74; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C8;&amp;#xC218;&amp;#xB85D; &amp;#xAC1C;&amp;#xBCC4; &amp;#xC694;&amp;#xCCAD;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD55C; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xAC00; JDBC &amp;#xCEE4;&amp;#xB125;&amp;#xC158;&amp;#xC744; &amp;#xBCF4;&amp;#xC720;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xAC04;&amp;#xC774; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xBAA8;&amp;#xD638;&amp;#xD55C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;
&lt;ul&gt;
&lt;li&gt;&amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4;, &amp;#xD2B9;&amp;#xC815; &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC;&amp;#xC5D0;&amp;#xC11C; &amp;#xBDF0;&amp;#xC5D0; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xACE0;&amp;#xC790; &amp;#xD558;&amp;#xB294; &amp;#xBAA9;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD55C;&amp;#xB2E4;&amp;#xBA74; &amp;#xC694;&amp;#xCCAD;&amp;#xC5D0; &amp;#xB9C8;&amp;#xBB34;&amp;#xB9AC;&amp;#xB418;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xD574;&amp;#xB2F9; &amp;#xBCC0;&amp;#xACBD; &amp;#xC0AC;&amp;#xD56D;&amp;#xC774; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD; &amp;#xAC10;&amp;#xC9C0;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; &amp;#xBC18;&amp;#xC601;&amp;#xC774; &amp;#xB418;&amp;#xACE0; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xB514;&amp;#xBE44;&amp;#xC5D0; &amp;#xBC18;&amp;#xC601;&amp;#xAE4C;&amp;#xC9C0; &amp;#xB418;&amp;#xB294; &amp;#xC0AC;&amp;#xC774;&amp;#xB4DC; &amp;#xC774;&amp;#xD399;&amp;#xD2B8;&amp;#xAC00; &amp;#xC0DD;&amp;#xAE30;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC758; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xC774;&amp;#xC678; &amp;#xACC4;&amp;#xCE35;&amp;#xC5D0;&amp;#xC11C; &amp;#xC774;&amp;#xB904;&amp;#xC9C4;&amp;#xB2E4;&amp;#xBA74; &amp;#xC720;&amp;#xC9C0;&amp;#xBCF4;&amp;#xC218;&amp;#xC131;&amp;#xC740; &amp;#xAE09;&amp;#xACA9;&amp;#xD788; &amp;#xB5A8;&amp;#xC5B4;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xBDF0;/&amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;DTO &amp;#xAC1D;&amp;#xCCB4; &amp;#xBC18;&amp;#xD658;&lt;/li&gt;
&lt;li&gt;&amp;#xC138;&amp;#xD130; &amp;#xC9C0;&amp;#xC591;&lt;/li&gt;
&lt;li&gt;&amp;#xC77D;&amp;#xAE30; &amp;#xC804;&amp;#xC6A9; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;/&amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xC81C;&amp;#xACF5;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC560;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xB294; &amp;#xC560;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4; SERVICE &amp;#xB97C; &amp;#xACBD;&amp;#xACC4;&amp;#xB85C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC989;, SERVICE &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD638;&amp;#xCD9C; &amp;#xC804;&amp;#xC5D0; &amp;#xBC14;&amp;#xB85C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xC2DC;&amp;#xC791;&amp;#xB418;&amp;#xACE0; SERVICE &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD638;&amp;#xCD9C;&amp;#xC774; &amp;#xC885;&amp;#xB8CC;&amp;#xB420; &amp;#xB54C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xCEE4;&amp;#xBC0B;&amp;#xB418;&amp;#xAC70;&amp;#xB098; &amp;#xB864;&amp;#xBC31;&amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC774;&amp;#xB2E4;. &amp;#xC774;&amp;#xC5D0; &amp;#xBE44;&amp;#xD574; &amp;#xACFC;&amp;#xAC70; OSIV &amp;#xC11C;&amp;#xBE14;&amp;#xB9BF; &amp;#xD544;&amp;#xD130;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xB294; HTTP &amp;#xC694;&amp;#xCCAD; &amp;#xCC98;&amp;#xB9AC; &amp;#xC2DC;&amp;#xAC04;&amp;#xC758; &amp;#xAC70;&amp;#xC758; &amp;#xB300;&amp;#xBD80;&amp;#xBD84;&amp;#xC744; &amp;#xC544;&amp;#xC6B0;&amp;#xB978;&amp;#xB2E4;. &amp;#xACB0;&amp;#xAD6D; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC77C;&amp;#xAD00;&amp;#xC131; &amp;#xC788;&amp;#xB294; &amp;#xBDF0;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xC73C;&amp;#xBA70; &amp;#xC774;&amp;#xB85C; &amp;#xC778;&amp;#xD574; &amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD560; &amp;#xC5EC;&amp;#xC9C0;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%8A%A4%ED%94%84%EB%A7%81-osiv-%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4-%EA%B3%84%EC%B8%B5-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; OSIV: &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xACC4;&amp;#xCE35; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/OxibUm8.png&quot; alt=&quot;OSIV_SPRING&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xACC4;&amp;#xCE35;&lt;/code&gt;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; OSIV&lt;/li&gt;
&lt;li&gt;&amp;#xBDF0; &amp;#xB80C;&amp;#xB354;&amp;#xB9C1; &amp;#xC2DC;&amp;#xC810;&amp;#xC758; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xD5C8;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74;&amp;#xC11C;&amp;#xB3C4; &amp;#xC77C;&amp;#xAD00;&amp;#xC131; &amp;#xC788;&amp;#xB294; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xB294; &amp;#xD569;&amp;#xB9AC;&amp;#xC801;&amp;#xC778; &amp;#xC808;&amp;#xCDA9;&amp;#xC548;&amp;#xC73C;&amp;#xB85C; &amp;#xC11C;&amp;#xBE14;&amp;#xB9BF; &amp;#xD544;&amp;#xD130;&amp;#xC5D0;&amp;#xC11C; Session &amp;#xC744; &amp;#xC624;&amp;#xD508;&amp;#xD558;&amp;#xB418; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xACBD;&amp;#xACC4;&amp;#xB294; &amp;#xC560;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xBC94;&amp;#xC704;&amp;#xB85C; &amp;#xD55C;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Spring &amp;#xD504;&amp;#xB808;&amp;#xC784;&amp;#xC6CC;&amp;#xD06C;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;FlushMode&lt;/code&gt; &amp;#xC640; &lt;code&gt;ConnectionReleaseMode&lt;/code&gt; &amp;#xC758; &amp;#xC870;&amp;#xC815;&amp;#xC744; &amp;#xD1B5;&amp;#xD574; &amp;#xACFC;&amp;#xAC70; OSIV &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xB2E8;&amp;#xC810;&amp;#xC744; &amp;#xBCF4;&amp;#xC644;&amp;#xD560; &lt;code&gt;OpenSessionInViewFliter&lt;/code&gt;&amp;#xC640; &lt;code&gt;OpenSessionInViewInterceptor&lt;/code&gt;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC790;&amp;#xC138;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC740; &amp;#xC544;&amp;#xB798; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;
&lt;ol&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB77C;&amp;#xC774;&amp;#xC5B8;&amp;#xD2B8;&amp;#xC758; &amp;#xC694;&amp;#xCCAD; &amp;#xC2DC;, &amp;#xC11C;&amp;#xBE14;&amp;#xB9BF; &amp;#xD544;&amp;#xD130;/&amp;#xC778;&amp;#xD130;&amp;#xC149;&amp;#xD130;&amp;#xC5D0;&amp;#xC11C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD55C;&amp;#xB2E4;. &amp;#xB2E8;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC740; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC74C;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC5D0;&amp;#xC11C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD560; &amp;#xB54C;, 1&amp;#xBC88;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0DD;&amp;#xC131;&amp;#xD55C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC758; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&amp;#xAC00; &amp;#xC885;&amp;#xB8CC;&amp;#xB418;&amp;#xBA74;&amp;#xC11C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xCEE4;&amp;#xBC0B;&amp;#xD558;&amp;#xACE0; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD55C;&amp;#xB2E4;. &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC740; &amp;#xC885;&amp;#xB8CC;&amp;#xAC00; &amp;#xB418;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC885;&amp;#xB8CC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xAC00; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC720;&amp;#xC9C0;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C;, &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB294; &amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD544;&amp;#xD130;/&amp;#xC778;&amp;#xD130;&amp;#xC149;&amp;#xD130;&amp;#xB85C; &amp;#xB3CC;&amp;#xC544;&amp;#xC640;&amp;#xC11C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC885;&amp;#xB8CC;&amp;#xD55C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB54C;&amp;#xB294; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%97%86%EB%8A%94-%EC%9D%BD%EA%B8%B0&quot;&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC5C6;&amp;#xB294; &amp;#xC77D;&amp;#xAE30;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC5C6;&amp;#xC774; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &lt;code&gt;javax.persistence.TransactionRequiredException&lt;/code&gt; &amp;#xC608;&amp;#xC678;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&lt;/li&gt;
&lt;li&gt;&amp;#xBCC0;&amp;#xACBD;&amp;#xC740; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC774;&amp;#xB904;&amp;#xC838;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xB370;, &amp;#xC870;&amp;#xD68C;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC5C6;&amp;#xC774;&amp;#xB3C4; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xC774;&amp;#xAC83;&amp;#xC744; &amp;#xBC14;&amp;#xB85C; &lt;code&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC5C6;&amp;#xC774; &amp;#xC77D;&amp;#xAE30;(Nontransactional reads)&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xD504;&amp;#xB85D;&amp;#xC2DC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xD558;&amp;#xB294; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529; &amp;#xC5ED;&amp;#xC2DC; &amp;#xC870;&amp;#xD68C;&amp;#xC774;&amp;#xBBC0;&amp;#xB85C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC5C6;&amp;#xC774; &amp;#xC77D;&amp;#xAE30;&amp;#xAC00; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xACB0;&amp;#xAD6D; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; OSIV&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xACE0;, &amp;#xC774; &amp;#xBC16;&amp;#xC758; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC778; &amp;#xD504;&amp;#xB808;&amp;#xC820;&amp;#xD14C;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD558;&amp;#xC5EC;&amp;#xB3C4; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xBD88;&amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xACE0; &amp;#xC624;&amp;#xC9C1; &amp;#xC77D;&amp;#xAE30;&amp;#xB9CC; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EC%8A%A4%ED%94%84%EB%A7%81-osiv-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%A0%90&quot;&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; OSIV &amp;#xC0AC;&amp;#xC6A9; &amp;#xC2DC; &amp;#xC8FC;&amp;#xC758;&amp;#xC810;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xD638;&amp;#xCD9C; &amp;#xD6C4; &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xAC00;&amp;#xC815;&amp;#xD574;&amp;#xBCF4;&amp;#xC790;.&lt;br&gt;
&amp;#xC774;&amp;#xBBF8; &amp;#xC885;&amp;#xB8CC;&amp;#xD55C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC18;&amp;#xD658;&amp;#xD55C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC774;&amp;#xBA70; OSIV&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC5EC;&amp;#xC804;&amp;#xD788; &amp;#xC601;&amp;#xC18D; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xAC8C; &amp;#xB420; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;. &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xC77C;&amp;#xBD80; &amp;#xAC12;&amp;#xC744; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xBA70; &amp;#xBC14;&amp;#xB85C; &amp;#xBDF0;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xBA74; OSIV&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC804;&amp;#xD600; &amp;#xC5C6;&amp;#xB2E4;.&lt;br&gt;
&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &lt;strong&gt;&amp;#xBC14;&amp;#xB85C; &amp;#xBDF0;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xB610; &amp;#xB2E4;&amp;#xB978; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xC5EC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;br&gt;
&amp;#xC65C;&amp;#xB0D0;&amp;#xD558;&amp;#xBA74;, &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; OSIV&amp;#xC5D0; &amp;#xC758;&amp;#xD558;&amp;#xC5EC; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC0B4;&amp;#xC544; &amp;#xC788;&amp;#xB294; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC774;&amp;#xC804;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xD55C; &amp;#xAC12;&amp;#xC774; &amp;#xC0C8;&amp;#xB85C; &amp;#xC2DC;&amp;#xC791;&amp;#xD55C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xCEE4;&amp;#xBC0B;&amp;#xC5D0; &amp;#xC758;&amp;#xD574;, &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC774;&amp;#xC804;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xD55C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xBCC0;&amp;#xACBD;&amp;#xC0AC;&amp;#xD56D;&amp;#xC774; &amp;#xADF8;&amp;#xB300;&amp;#xB85C; &amp;#xC2E4;&amp;#xC81C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xC5D0; &amp;#xBC18;&amp;#xC601;&amp;#xB418;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xlink=&quot;http://www.w3.org/1999/xlink&quot; contentscripttype=&quot;application/ecmascript&quot; contentstyletype=&quot;text/css&quot; height=&quot;612px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:943px;height:612px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 943 612&quot; width=&quot;943px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f18niyiw8l7584&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;73.9316&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;514.5&quot; y=&quot;162.4199&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;105.8633&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;855&quot; y=&quot;362.9043&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;169.7949&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;838.5&quot; x=&quot;92.5&quot; y=&quot;308.9727&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; height=&quot;2&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot; width=&quot;838.5&quot; x=&quot;92.5&quot; y=&quot;476.7676&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;26&quot; x2=&quot;26&quot; y1=&quot;86.4883&quot; y2=&quot;525.0781&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;174.5&quot; x2=&quot;174.5&quot; y1=&quot;86.4883&quot; y2=&quot;525.0781&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;519.5&quot; x2=&quot;519.5&quot; y1=&quot;86.4883&quot; y2=&quot;525.0781&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;715&quot; x2=&quot;715&quot; y1=&quot;86.4883&quot; y2=&quot;525.0781&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;860&quot; x2=&quot;860&quot; y1=&quot;86.4883&quot; y2=&quot;525.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;31&quot; x=&quot;8&quot; y=&quot;83.5352&quot;&gt;User&lt;/text&gt;&lt;ellipse cx=&quot;26.5&quot; cy=&quot;13&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M26.5,21 L26.5,48 M13.5,29 L39.5,29 M26.5,48 L13.5,63 M26.5,48 L39.5,63 &quot; fill=&quot;none&quot; filter=&quot;url(#f18niyiw8l7584)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;31&quot; x=&quot;8&quot; y=&quot;537.6133&quot;&gt;User&lt;/text&gt;&lt;ellipse cx=&quot;26.5&quot; cy=&quot;550.5664&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M26.5,558.5664 L26.5,585.5664 M13.5,566.5664 L39.5,566.5664 M26.5,585.5664 L13.5,600.5664 M26.5,585.5664 L39.5,600.5664 &quot; fill=&quot;none&quot; filter=&quot;url(#f18niyiw8l7584)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;140&quot; x=&quot;102.5&quot; y=&quot;51&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;126&quot; x=&quot;109.5&quot; y=&quot;71.5352&quot;&gt;MemberController&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;140&quot; x=&quot;102.5&quot; y=&quot;524.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;126&quot; x=&quot;109.5&quot; y=&quot;544.6133&quot;&gt;MemberController&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;118&quot; x=&quot;458.5&quot; y=&quot;51&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;104&quot; x=&quot;465.5&quot; y=&quot;71.5352&quot;&gt;MemberService&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;118&quot; x=&quot;458.5&quot; y=&quot;524.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;104&quot; x=&quot;465.5&quot; y=&quot;544.6133&quot;&gt;MemberService&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;143&quot; x=&quot;642&quot; y=&quot;51&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;129&quot; x=&quot;649&quot; y=&quot;71.5352&quot;&gt;MemberRepository&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;143&quot; x=&quot;642&quot; y=&quot;524.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;129&quot; x=&quot;649&quot; y=&quot;544.6133&quot;&gt;MemberRepository&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;118&quot; x=&quot;799&quot; y=&quot;51&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;104&quot; x=&quot;806&quot; y=&quot;71.5352&quot;&gt;AnotherService&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;118&quot; x=&quot;799&quot; y=&quot;524.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;104&quot; x=&quot;806&quot; y=&quot;544.6133&quot;&gt;AnotherService&lt;/text&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;73.9316&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;514.5&quot; y=&quot;162.4199&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f18niyiw8l7584)&quot; height=&quot;105.8633&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;855&quot; y=&quot;362.9043&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;162.5,113.7988,172.5,117.7988,162.5,121.7988,166.5,117.7988&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;26.5&quot; x2=&quot;168.5&quot; y1=&quot;117.7988&quot; y2=&quot;117.7988&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;33.5&quot; y=&quot;113.0566&quot;&gt;1&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;59&quot; x=&quot;46.5&quot; y=&quot;113.0566&quot;&gt;HTTP &amp;#xC694;&amp;#xCCAD;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;502.5,158.4199,512.5,162.4199,502.5,166.4199,506.5,162.4199&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;174.5&quot; x2=&quot;508.5&quot; y1=&quot;162.4199&quot; y2=&quot;162.4199&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;181.5&quot; y=&quot;150.0225&quot;&gt;2&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;176&quot; x=&quot;194.5&quot; y=&quot;142.3672&quot;&gt;Member &amp;#xC870;&amp;#xD68C; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xC2E4;&amp;#xD589;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;82&quot; x=&quot;198.5&quot; y=&quot;157.6777&quot;&gt;- &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC2DC;&amp;#xC791;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;535.5,187.7305,525.5,191.7305,535.5,195.7305,531.5,191.7305&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;703.5,187.7305,713.5,191.7305,703.5,195.7305,707.5,191.7305&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;529.5&quot; x2=&quot;709.5&quot; y1=&quot;191.7305&quot; y2=&quot;191.7305&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;541.5&quot; y=&quot;186.9883&quot;&gt;3&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;154&quot; x=&quot;554.5&quot; y=&quot;186.9883&quot;&gt;Member &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC870;&amp;#xD68C; &amp;#xD6C4; &amp;#xBC18;&amp;#xD658;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;185.5,232.3516,175.5,236.3516,185.5,240.3516,181.5,236.3516&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;179.5&quot; x2=&quot;518.5&quot; y1=&quot;236.3516&quot; y2=&quot;236.3516&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;191.5&quot; y=&quot;223.9541&quot;&gt;4&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;113&quot; x=&quot;204.5&quot; y=&quot;216.2988&quot;&gt;Member &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xBC18;&amp;#xD658;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;299&quot; x=&quot;208.5&quot; y=&quot;231.6094&quot;&gt;- Transaction Commit &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;174.5&quot; x2=&quot;216.5&quot; y1=&quot;280.9727&quot; y2=&quot;280.9727&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;216.5&quot; x2=&quot;216.5&quot; y1=&quot;280.9727&quot; y2=&quot;293.9727&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;175.5&quot; x2=&quot;216.5&quot; y1=&quot;293.9727&quot; y2=&quot;293.9727&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;185.5,289.9727,175.5,293.9727,185.5,297.9727,181.5,293.9727&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;181.5&quot; y=&quot;268.5752&quot;&gt;5&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;113&quot; x=&quot;194.5&quot; y=&quot;260.9199&quot;&gt;Member &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC218;&amp;#xC815;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;164&quot; x=&quot;198.5&quot; y=&quot;276.2305&quot;&gt;- member.setName(&amp;quot;XXX&amp;quot;)&lt;/text&gt;&lt;path d=&quot;M92.5,308.9727 L154.5,308.9727 L154.5,315.9727 L144.5,325.9727 L92.5,325.9727 L92.5,308.9727 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;169.7949&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;838.5&quot; x=&quot;92.5&quot; y=&quot;308.9727&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;107.5&quot; y=&quot;322.541&quot;&gt;alt&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;252&quot; x=&quot;169.5&quot; y=&quot;321.6074&quot;&gt;[&amp;#xBDF0;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;843,358.9043,853,362.9043,843,366.9043,847,362.9043&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;174.5&quot; x2=&quot;849&quot; y1=&quot;362.9043&quot; y2=&quot;362.9043&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;181.5&quot; y=&quot;350.5068&quot;&gt;6&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;122&quot; x=&quot;194.5&quot; y=&quot;342.8516&quot;&gt;&amp;#xBCC4;&amp;#xB3C4; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xC2E4;&amp;#xD589;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;82&quot; x=&quot;198.5&quot; y=&quot;358.1621&quot;&gt;- &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC2DC;&amp;#xC791;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;185.5,464.7676,175.5,468.7676,185.5,472.7676,181.5,468.7676&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;179.5&quot; x2=&quot;859&quot; y1=&quot;468.7676&quot; y2=&quot;468.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;191.5&quot; y=&quot;425.749&quot;&gt;7&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;59&quot; x=&quot;204.5&quot; y=&quot;387.4727&quot;&gt;&amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xBC18;&amp;#xD658;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;241&quot; x=&quot;208.5&quot; y=&quot;402.7832&quot;&gt;- &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xCEE4;&amp;#xBC0B; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;290&quot; x=&quot;204.5&quot; y=&quot;418.0938&quot;&gt;: 5&amp;#xBC88;&amp;#xC5D0;&amp;#xC11C; member.setName(&amp;quot;XXX&amp;quot;)&amp;#xB97C; &amp;#xC2E4;&amp;#xD589;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;251&quot; x=&quot;204.5&quot; y=&quot;433.4043&quot;&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xBCC0;&amp;#xACBD;&amp;#xAC10;&amp;#xC9C0;&amp;#xC5D0; &amp;#xC758;&amp;#xD558;&amp;#xC5EC; &amp;#xBC18;&amp;#xC601; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;258&quot; x=&quot;204.5&quot; y=&quot;448.7148&quot;&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC6B8; &amp;#xCEE4;&amp;#xBC0B;&amp;#xD558;&amp;#xACE0; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xAC00; &amp;#xD50C;&amp;#xB7EC;&amp;#xC26C;&amp;#xB418;&amp;#xC5B4;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;166&quot; x=&quot;204.5&quot; y=&quot;464.0254&quot;&gt;&amp;#xC2E4;&amp;#xC81C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xBC18;&amp;#xC601;&lt;/text&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;92.5&quot; x2=&quot;931&quot; y1=&quot;477.7676&quot; y2=&quot;477.7676&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;37.5,503.0781,27.5,507.0781,37.5,511.0781,33.5,507.0781&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;31.5&quot; x2=&quot;173.5&quot; y1=&quot;507.0781&quot; y2=&quot;507.0781&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;43.5&quot; y=&quot;502.3359&quot;&gt;8&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;111&quot; x=&quot;56.5&quot; y=&quot;502.3359&quot;&gt;&amp;#xBDF0;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xBC18;&amp;#xD658;&lt;/text&gt;&lt;!--
@startuml
actor User as U
participant MemberController as A
participant MemberService as B
participant MemberRepository as C
participant AnotherService as D
autonumber
U -&gt; A: HTTP 요청
A -&gt; B: Member 조회 서비스 메서드 실행\n - 트랜잭션 시작
activate B
B &lt;-&gt; C: Member 엔티티 조회 후 반환
B -&gt; A: Member 엔티티 반환\n - Transaction Commit 그리고 영속성 컨텍스트 플러쉬
deactivate B
A -&gt; A: Member 엔티티 수정\n - member.setName(&quot;XXX&quot;)
alt 뷰를 반환하지 않고 별도의 트랜잭션을 시작하는 경우
	autonumber 6
	A -&gt; D: 별도 서비스 메서드 실행\n - 트랜잭션 시작
	activate D
	D -&gt; A: 메서드 반환\n - 트랜잭션 커밋 그리고 영속성 컨텍스트 플러쉬\n: 5번에서 member.setName(&quot;XXX&quot;)를 실행한 내용이 \n영속성 컨텍스트의 변경감지에 의하여 반영 그리고 \n트랜잭션울 커밋하고 영속성 컨텍스트가 플러쉬되어 \n실제 데이터베이스에 변경을 반영
	deactivate D	
else 
end
A -&gt; U: 뷰에 맞는 데이터 반환
@enduml

PlantUML version 1.2019.07(Tue Jun 25 04:59:20 KST 2019)
(MIT source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 10.0.1+10
Operating System: Mac OS X
OS Version: 10.14.3
Default Encoding: US-ASCII
Language: ko
Country: KR
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC704;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xBB38;&amp;#xC81C;&amp;#xB294; &amp;#xAC19;&amp;#xC740; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xC5EC;&amp;#xB7EC; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xACF5;&amp;#xC720;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xB85C; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xB294; &amp;#xB2E8;&amp;#xC21C;&amp;#xD55C; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &lt;strong&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xC788;&amp;#xB294; &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xBAA8;&amp;#xB450; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xACE0; &amp;#xB098;&amp;#xC11C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xBA74; &amp;#xC27D;&amp;#xAC8C; &amp;#xD574;&amp;#xACB0;&amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;br&gt;
&amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &lt;strong&gt;&amp;#xC120; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xD6C4; &amp;#xBCC0;&amp;#xACBD;&amp;#xC73C;&amp;#xB85C; &amp;#xC694;&amp;#xC57D;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;osiv%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B4-%EB%A7%8C%EB%8A%A5%EC%9D%B4-%EC%95%84%EB%8B%88%EB%8B%A4&quot;&gt;OSIV&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xB9CC;&amp;#xB2A5;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xB2E4;.&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xAC1D;&amp;#xCCB4; &amp;#xADF8;&amp;#xB798;&amp;#xD504;&amp;#xC758; &amp;#xB381;&amp;#xC2A4;&amp;#xAC00; &amp;#xAE4A;&amp;#xC5B4;&amp;#xC9C4;&amp;#xB2E4;&amp;#xBA74; OSIV&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xC131;&amp;#xB2A5;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC2E0;&amp;#xACBD;&amp;#xC368;&amp;#xC57C; &amp;#xD560; &amp;#xBD80;&amp;#xBD84;&amp;#xB3C4; &amp;#xB9CE;&amp;#xC544;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D; &amp;#xB2E8;&amp;#xC21C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB9CC;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xC5EC; &amp;#xB05D;&amp;#xB098;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xB4DC;&amp;#xBB3C;&amp;#xB2E4;. &amp;#xD2B9;&amp;#xD788; &amp;#xD1B5;&amp;#xACC4; &amp;#xC131;&amp;#xACA9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xB300;&amp;#xD45C;&amp;#xC801;&amp;#xC778;&amp;#xB370;, &amp;#xC774;&amp;#xB7F4; &amp;#xACBD;&amp;#xC6B0; &amp;#xCC28;&amp;#xB9AC;&amp;#xB9AC; JPQL&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xACE0; &amp;#xC774;&amp;#xB97C; DTO &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C; &amp;#xBC14;&amp;#xC778;&amp;#xB529;&amp;#xD558;&amp;#xC5EC; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xC26C;&amp;#xC6B4; &amp;#xD574;&amp;#xACB0;&amp;#xCC45;&amp;#xC77C; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xB108;&amp;#xBB34; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD558;&amp;#xAC70;&amp;#xB098; DB &amp;#xC885;&amp;#xC18D;&amp;#xC801;&amp;#xC778; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&amp;#xB3C4; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB7F4; &amp;#xACBD;&amp;#xC6B0; &amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC758; &lt;code&gt;@SubSelect&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC870;&amp;#xD68C; &amp;#xC804;&amp;#xC6A9; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC11C; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;. &amp;#xBB3C;&amp;#xB860; DB &amp;#xC885;&amp;#xC18D;&amp;#xC801;&amp;#xC778; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xCD94;&amp;#xD6C4; DB &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB300;&amp;#xC751;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xB3C4; &amp;#xBD84;&amp;#xBA85; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xB294; &amp;#xC791;&amp;#xC5C5;&amp;#xC740; &amp;#xC27D;&amp;#xAC8C; &amp;#xC77C;&amp;#xC5B4;&amp;#xB098;&amp;#xC9C0;&amp;#xB3C4; &amp;#xC54A;&amp;#xC744; &amp;#xBFD0;&amp;#xB354;&amp;#xB7EC; &amp;#xC644;&amp;#xBCBD;&amp;#xD558;&amp;#xAC8C; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xC27D;&amp;#xAC8C; &amp;#xCEE4;&amp;#xBC84;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0; &amp;#xB354; &amp;#xB4DC;&amp;#xBB3C;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/JPA</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/150</guid>
      <comments>https://stylishc.tistory.com/150#entry150comment</comments>
      <pubDate>Sat, 31 Aug 2019 20:09:09 +0900</pubDate>
    </item>
    <item>
      <title>20190810</title>
      <link>https://stylishc.tistory.com/149</link>
      <description>&lt;h1 id=&quot;1-%ED%9C%B4%EC%8B%9D&quot;&gt;1. 휴식?&lt;/h1&gt;
&lt;p&gt;회사를 그만두었기 때문에 누릴 수 있는 가장 큰 사치는 아마 늘어지게 잘 수 있는 늦잠 그리고 자유로운 시간일 것이다. 최근 한달 가량을 그렇게 보내고자 맘을 먹었지만, 불행인지 다행인지 정말로 한번쯤은 도전해보고 싶은 회사에서 공채를 시작하여 거기에 매달려 한달 가량 아니 한 3주 가량의 시간을 전력의 삶(?)을 살다보니 시간이 어느덧 8월 가량이 되었다. 사실 저번달에는 공부도하고 공채 준비도 했으니 이번달에는 전력으로 쉬고자 하는 마음이 가장 크다. 하지만 공채 결과가 어떻게 될지는 모르겠지만, 그래도 좋은 방향으로 흐르고 있는거 같아. 어쩌면 지금의 휴식이 길어지지만은 않겠구나 하는 생각도 든다.&lt;/p&gt;
&lt;p&gt;뭐 다시 개발 이야기로 돌아와서 보자면 과제를 준비하면서 해볼 수 있는 건 모두 했다라고 생각하고 있다.&lt;br /&gt;프론트엔드에 그렇게 큰 관심을 두고 있는 건 아니지만, vue.js를 이용하여 간단한 어플리케이션을 만들어 볼 수 있어 추후에 다시 한다고 하더라도 근거는 없지만 조금은 어렵지 않게 접근할 수 있겠다는 생각이 들었기 때문이다.&lt;br /&gt;또한, 최근 계속 코틀린으로만 서버 어플리케이션을 작성했었는데, 다시 자바로 작성하면서 잃어버렸던 감 아닌 감을 조금은 찾을 수 있어서 좋았고, 코틀린에 맛을 들려버린 탓인지는 몰라도 이전에는 부수효과처럼 느껴졌던 롬복 같은 구현체도 이게 없으면 정말 불편하겠다 싶은 생각도 들었다.&lt;/p&gt;
&lt;p&gt;물론 자바와 코틀린 둘다 공부를 해야 하는 상황으로 갈거 같지만, 그래도 여유를 느낄 수 있는 지금의 상황도 너무 좋다. 쉬고 싶으면 그 마음 가는대로 쉬면 그만이고, 공부하고 싶고 책이 읽고 싶으면 내 마음 가는대로 할 수 있는 지금의 자유가 너무 좋은거 같다. 길어질거 같진 않지만 그래도 지금을 즐기고 충분하게 휴식하자!&lt;/p&gt;
&lt;h1 id=&quot;2-%EA%B7%B8%EB%9E%98%EC%84%9C-%EB%AD%98-%EA%B3%B5%EB%B6%80%ED%95%98%EC%A7%80&quot;&gt;2. 그래서 뭘 공부하지?&lt;/h1&gt;
&lt;p&gt;못했던 공부에 대해 어느정도 TODO 리스트는 작성하는 것이 좋을거 같다. 물론, 휴식기간 동안 다 못할 수 있다. 하지만, 4개 파트 중 두개... 아니 하나만 제대로 한다면 그거 나름대로의 의미가 있다고 생각한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DDD Start 나머지 파트 정리
&lt;ul&gt;
&lt;li&gt;책을 다 읽었지만, 정리 못한 부분이 존재함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JPA
&lt;ul&gt;
&lt;li&gt;JPA 심화 파트 부분을 공부&lt;/li&gt;
&lt;li&gt;JPQL, 2차 캐시 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;코틀린
&lt;ul&gt;
&lt;li&gt;기본 확장 함수, JVM 상호 운용&lt;/li&gt;
&lt;li&gt;코루틴&lt;/li&gt;
&lt;li&gt;Spring, JPA를 함께 사용하면서 꼭 알아야 할 내용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;쉘 스크립트
&lt;ul&gt;
&lt;li&gt;이건 이번에 반드시 공부한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/149</guid>
      <comments>https://stylishc.tistory.com/149#entry149comment</comments>
      <pubDate>Sat, 10 Aug 2019 20:48:12 +0900</pubDate>
    </item>
    <item>
      <title>20190714</title>
      <link>https://stylishc.tistory.com/148</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190714&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css&quot;&gt;
      
      

      
      
      
      
      
      

      &lt;style&gt;
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*=&quot;language-&quot;],
pre[class*=&quot;language-&quot;] {
  color: #333;
  background: none;
  font-family: Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*=&quot;language-&quot;] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) &gt; code[class*=&quot;language-&quot;] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}html body{font-family:&quot;Helvetica Neue&quot;,Helvetica,&quot;Segoe UI&quot;,Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body&gt;:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body&gt;p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body&gt;ul,html body&gt;ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li&gt;p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote&gt;:first-child{margin-top:0}html body blockquote&gt;:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:&quot;\00a0&quot;}html body pre&gt;code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-ddd-start-%EB%8B%A4-%EC%9D%BD%EC%9D%8C&quot;&gt;1. DDD Start &amp;#xB2E4; &amp;#xC77D;&amp;#xC74C;&lt;/h1&gt;

&lt;p&gt;&amp;#xAC04;&amp;#xB9CC;&amp;#xC5D0; &amp;#xB05D;&amp;#xAE4C;&amp;#xC9C0; &amp;#xB2E4; &amp;#xC77D;&amp;#xC740; &amp;#xCC45;&amp;#xC774;&amp;#xB2E4;. &amp;#xCC45; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774; &amp;#xB108;&amp;#xBB34; &amp;#xD761;&amp;#xC785;&amp;#xB825;&amp;#xC774; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;. &amp;#xAE30;&amp;#xC874;&amp;#xC5D0; API&amp;#xB97C; &amp;#xAC1C;&amp;#xBC1C;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xB298; &amp;#xACE0;&amp;#xBBFC;&amp;#xD558;&amp;#xB358; &amp;#xC124;&amp;#xACC4;&amp;#xC801;&amp;#xC778; &amp;#xBD80;&amp;#xBD84; &amp;#xD639;&amp;#xC740; &amp;#xAD6C;&amp;#xD604; &amp;#xD328;&amp;#xD134;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; 100%&amp;#xAE4C;&amp;#xC9C0;&amp;#xB294; &amp;#xC544;&amp;#xB2C8;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC5B4;&amp;#xB290;&amp;#xC815;&amp;#xB3C4;&amp;#xC758; &amp;#xB2F5;&amp;#xC744; &amp;#xC900;&amp;#xAC70; &amp;#xAC19;&amp;#xC544;&amp;#xC11C; &amp;#xB098;&amp;#xB984; &amp;#xB9CC;&amp;#xC871;&amp;#xC2A4;&amp;#xB7EC;&amp;#xC6B4; &amp;#xB3C5;&amp;#xC11C;&amp;#xC600;&amp;#xB2E4;&amp;#xACE0; &amp;#xD3C9;&amp;#xD558;&amp;#xACE0; &amp;#xC2F6;&amp;#xB2E4;. &amp;#xB9C8;&amp;#xC9C0;&amp;#xB9C9; &amp;#xBD80;&amp;#xBD84;&amp;#xC774;&amp;#xB77C; &amp;#xD06C;&amp;#xAC8C; &amp;#xAE30;&amp;#xC5B5;&amp;#xC774; &amp;#xB0A8;&amp;#xB294; &amp;#xAC83;&amp;#xC778;&amp;#xC9C0;&amp;#xB294; &amp;#xBAB0;&amp;#xB77C;&amp;#xB3C4; &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&lt;/code&gt; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB098; &lt;code&gt;CQRS&lt;/code&gt;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &lt;code&gt;&amp;#xB77D;&lt;/code&gt;(&amp;#xC120;&amp;#xC810;, &amp;#xBE44;&amp;#xC120;&amp;#xC810;, &amp;#xC624;&amp;#xD504;&amp;#xB77C;&amp;#xC778;)&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xACFC; &amp;#xC18C;&amp;#xAC1C;&amp;#xB3C4; &amp;#xB108;&amp;#xBB34; &amp;#xC88B;&amp;#xC558;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xC774;&amp;#xC81C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&amp;#xD574;&amp;#xC11C; &amp;#xB9C8;&amp;#xD06C;&amp;#xB2E4;&amp;#xC6B4;&amp;#xACFC; &amp;#xBE14;&amp;#xB85C;&amp;#xADF8;&amp;#xC5D0; &amp;#xC62C;&amp;#xB9AC;&amp;#xB294; &amp;#xC77C;&amp;#xB9CC; &amp;#xB0A8;&amp;#xC558;&amp;#xB294;&amp;#xB370;, 3&amp;#xC7A5;&amp;#xAE4C;&amp;#xC9C0;&amp;#xBC16;&amp;#xC5D0; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD574;&amp;#xC11C; &amp;#xD560;&amp;#xC77C;&amp;#xC774; &amp;#xB9CE;&amp;#xC774; &amp;#xB0A8;&amp;#xC740;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xC774;&amp;#xAC70;&amp;#xB3C4; &amp;#xC77C;&amp;#xC885;&amp;#xC758; &amp;#xAE30;&amp;#xC220;&amp;#xBD80;&amp;#xCC44;&amp;#xC778;&amp;#xAC00; &amp;#xD558;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-mysql-57&quot;&gt;2. MySQL 5.7&lt;/h1&gt;

&lt;p&gt;MySQL 5.7 &amp;#xAD00;&amp;#xB828; &amp;#xC2E0;&amp;#xAC04;&amp;#xC774; &amp;#xCD9C;&amp;#xC2DC;&amp;#xD558;&amp;#xAE30;&amp;#xB3C4; &amp;#xD588;&amp;#xACE0;, &amp;#xC2A4;&amp;#xD130;&amp;#xB514;&amp;#xC5D0;&amp;#xC11C; &amp;#xD574;&amp;#xB2F9; &amp;#xCC45;&amp;#xC744; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xACF5;&amp;#xBD80;&amp;#xD558;&amp;#xC790;&amp;#xB294; &amp;#xC758;&amp;#xACAC;&amp;#xC774; &amp;#xB098;&amp;#xC640;&amp;#xC11C; &amp;#xB9AC;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xC77C;&amp;#xC8FC;&amp;#xC77C;&amp;#xC815;&amp;#xB3C4;&amp;#xD574;&amp;#xC11C; &amp;#xC9EC;&amp;#xC9EC;&amp;#xC774; &amp;#xC77D;&amp;#xACE0; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&amp;#xD588;&amp;#xB2E4;. &amp;#xACB0;&amp;#xACFC;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xB0B4;&amp;#xC6A9; &amp;#xC774;&amp;#xD574;&amp;#xB97C; &amp;#xB9CE;&amp;#xC774; &amp;#xBABB;&amp;#xD588;&amp;#xB2E4;. &amp;#xB0B4;&amp;#xBD80; &amp;#xAD6C;&amp;#xD604;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774;&amp;#xB77C; &amp;#xC9C0;&amp;#xB8E8;&amp;#xD558;&amp;#xAE30;&amp;#xB3C4; &amp;#xD588;&amp;#xACE0; &amp;#xBAA8;&amp;#xB974;&amp;#xB294; &amp;#xC6A9;&amp;#xC5B4;&amp;#xC640; &amp;#xC635;&amp;#xC158;&amp;#xB4E4;&amp;#xC774; &amp;#xB9CE;&amp;#xC774; &amp;#xBCF4;&amp;#xC5EC;&amp;#xC11C; &amp;#xC544;&amp;#xBB34;&amp;#xB798;&amp;#xB3C4; &amp;#xC9D1;&amp;#xC911;&amp;#xB825; &amp;#xC788;&amp;#xAC8C; &amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD55C;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xC2DC;&amp;#xAC04;&amp;#xC744; &amp;#xB4E4;&amp;#xC5EC;&amp;#xC11C; &amp;#xB2E4;&amp;#xC2DC; &amp;#xC77D;&amp;#xB294; &amp;#xC791;&amp;#xC5C5;&amp;#xC744; &amp;#xD574;&amp;#xC57C; &amp;#xB420;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/148</guid>
      <comments>https://stylishc.tistory.com/148#entry148comment</comments>
      <pubDate>Sun, 14 Jul 2019 21:11:33 +0900</pubDate>
    </item>
    <item>
      <title>20190622</title>
      <link>https://stylishc.tistory.com/147</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190622&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css&quot;&gt;
      
      

      
      
      
      
      
      

      &lt;style&gt;
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*=&quot;language-&quot;],
pre[class*=&quot;language-&quot;] {
  color: #333;
  background: none;
  font-family: Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*=&quot;language-&quot;] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) &gt; code[class*=&quot;language-&quot;] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}html body{font-family:&quot;Helvetica Neue&quot;,Helvetica,&quot;Segoe UI&quot;,Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body&gt;:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body&gt;p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body&gt;ul,html body&gt;ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li&gt;p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote&gt;:first-child{margin-top:0}html body blockquote&gt;:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:&quot;\00a0&quot;}html body pre&gt;code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-ddd-start-8%EC%9E%A5-%EC%9D%BD%EA%B8%B0&quot;&gt;1. DDD Start 8&amp;#xC7A5; &amp;#xC77D;&amp;#xAE30;&lt;/h1&gt;

&lt;p&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xCC98;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC73C;&amp;#xB85C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xC218;&amp;#xC815;&amp;#xC774; &amp;#xB3D9;&amp;#xC2DC;&amp;#xC5D0; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD588;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC774;&amp;#xB97C; &amp;#xC5B4;&amp;#xB5BB;&amp;#xAC8C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560;&amp;#xC9C0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. DB &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xACFC; &amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC73C;&amp;#xB85C; &amp;#xC778;&amp;#xD574; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;(&amp;#xB370;&amp;#xB4DC;&amp;#xB77D;)&amp;#xC744; &amp;#xD68C;&amp;#xD53C;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD55C; &amp;#xBE44;&amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC804;&amp;#xB7B5;(JPA-Hibernate&amp;#xC758; @Version&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD55C; &amp;#xC5C5;&amp;#xB370;&amp;#xC774;&amp;#xD2B8; &amp;#xC804;&amp;#xB7B5;) &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC624;&amp;#xD504;&amp;#xB77C;&amp;#xC778; &amp;#xB77D;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xB77D;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC120;&amp;#xC810;&amp;#xC744; &amp;#xBBF8;&amp;#xB9AC; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xAE4C;&amp;#xC9C0; &amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; &amp;#xD559;&amp;#xC2B5;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;p&gt;&amp;#xB2E4;&amp;#xC2DC; &amp;#xC77D;&amp;#xC5B4;&amp;#xBCF4;&amp;#xBA74;&amp;#xC11C; &amp;#xB0B4;&amp;#xC6A9; &amp;#xC815;&amp;#xB9AC;&amp;#xB97C; &amp;#xD574;&amp;#xBCF4;&amp;#xACE0; &amp;#xC880; &amp;#xB354; &amp;#xAE4A;&amp;#xAC8C; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBD10;&amp;#xC57C;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC2E4;&amp;#xC81C; &amp;#xC5C5;&amp;#xBB34;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB300;&amp;#xBD80;&amp;#xBD84; DB &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xB9CE;&amp;#xC558;&amp;#xB294;&amp;#xB370;, &amp;#xB514;&amp;#xBE44; &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &amp;#xB77D;&amp;#xC744; &amp;#xB300;&amp;#xAE30;&amp;#xD558;&amp;#xB294; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xC5EC; &amp;#xC2E4;&amp;#xC81C; &amp;#xB3D9;&amp;#xC2DC;&amp;#xC131;&amp;#xC5D0; &amp;#xD06C;&amp;#xAC8C; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xC8FC;&amp;#xBA74;&amp;#xC11C; &amp;#xAC1C;&amp;#xBC1C;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xBE44;&amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC744; &amp;#xC798; &amp;#xC5F0;&amp;#xAD6C;&amp;#xD574;&amp;#xBCF4;&amp;#xACE0; &amp;#xD65C;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xBA74; &amp;#xAD73;&amp;#xC774; &amp;#xC120;&amp;#xC810; &amp;#xB77D;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0;&amp;#xB3C4; Update &amp;#xC131;&amp;#xACA9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xACA0;&amp;#xB2E4;&amp;#xB77C;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;p&gt;&amp;#xC774;&amp;#xBC88; &amp;#xC7A5;&amp;#xC744; &amp;#xC77D;&amp;#xC73C;&amp;#xBA74;&amp;#xC11C; &amp;#xC880; &amp;#xB354; &amp;#xC640;&amp;#xB2FF;&amp;#xC740; &amp;#xC608;&amp;#xC81C;&amp;#xB294; &amp;#xC544;&amp;#xD2C0;&amp;#xB77C;&amp;#xC2DC;&amp;#xC548; &amp;#xCEE8;&amp;#xD50C;&amp;#xB8E8;&amp;#xC5B8;&amp;#xC2A4;&amp;#xC758; &amp;#xC0AC;&amp;#xB840;&amp;#xC600;&amp;#xB2E4;. &amp;#xD68C;&amp;#xC0AC;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xCEE8;&amp;#xD50C;&amp;#xB8E8;&amp;#xC5B8;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xC2E4;&amp;#xC81C; &amp;#xAC19;&amp;#xC740; &amp;#xD398;&amp;#xC774;&amp;#xC9C0;&amp;#xB97C; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xC885;&amp;#xC885; &amp;#xC788;&amp;#xB294;&amp;#xB370; &amp;#xC5EC;&amp;#xAE30;&amp;#xC11C; &amp;#xC801;&amp;#xC6A9;&amp;#xB41C; &amp;#xB77D;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC815;&amp;#xCC45;&amp;#xC774; &amp;#xBC14;&amp;#xB85C; &amp;#xC624;&amp;#xD504;&amp;#xB77C;&amp;#xC778; &amp;#xB77D; &amp;#xC815;&amp;#xCC45;&amp;#xC774;&amp;#xC5C8;&amp;#xB2E4;&amp;#xB294; &amp;#xC0AC;&amp;#xC2E4;&amp;#xC5D0; &amp;#xB0B4;&amp;#xAC00; &amp;#xBAA8;&amp;#xB974;&amp;#xACE0; &amp;#xBABB; &amp;#xBCF4;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xBC1C;&amp;#xC5D0;&amp;#xC11C; &amp;#xC2E4;&amp;#xC81C; &amp;#xCC45;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCF8; &amp;#xADF8;&amp;#xB7F0; &amp;#xB0B4;&amp;#xC6A9;&amp;#xB4E4;&amp;#xC774; &amp;#xC801;&amp;#xC6A9;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC74C;&amp;#xC5D0; &amp;#xC2A4;&amp;#xC2A4;&amp;#xB85C;&amp;#xAC00; &amp;#xC544;&amp;#xC9C1; &amp;#xD55C;&amp;#xCC38; &amp;#xBA40;&amp;#xC5C8;&amp;#xAD6C;&amp;#xB098; &amp;#xD558;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-%EB%B0%B1%EA%B8%B0%EC%84%A0%EB%8B%98-rest-api-%EA%B0%95%EC%A2%8C-%EB%93%A3%EA%B8%B0&quot;&gt;2. &amp;#xBC31;&amp;#xAE30;&amp;#xC120;&amp;#xB2D8; REST API &amp;#xAC15;&amp;#xC88C; &amp;#xB4E3;&amp;#xAE30;&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RP_f5dMoHFc&quot;&gt;&amp;#xADF8;&amp;#xB7F0; REST API&amp;#xB85C; &amp;#xAD1C;&amp;#xCC2E;&amp;#xC740;&amp;#xAC00;&lt;/a&gt;&amp;#xC744; &amp;#xBCF4;&amp;#xACE0; &amp;#xB0B4;&amp;#xAC00; &amp;#xC5EC;&amp;#xD0DC;&amp;#xAE4C;&amp;#xC9C0; &amp;#xAC1C;&amp;#xBC1C;&amp;#xD574;&amp;#xB193;&amp;#xACE0; &amp;#xC2A4;&amp;#xC2A4;&amp;#xB85C; REST&amp;#xB77C;&amp;#xACE0; &amp;#xBD88;&amp;#xB800;&amp;#xB358; API&amp;#xB4E4;&amp;#xC740; &amp;#xC0AC;&amp;#xC2E4; &amp;#xADF8;&amp;#xB0E5; WEB API &amp;#xD639;&amp;#xC740; HTTP API &amp;#xC815;&amp;#xB3C4;&amp;#xAC00; &amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &amp;#xC54C;&amp;#xAC8C; &amp;#xB418;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xC0AC;&amp;#xC2E4; &amp;#xC774;&amp;#xC804;&amp;#xC5D0; REST&amp;#xB77C;&amp;#xACE0; &amp;#xD558;&amp;#xBA74; &amp;#xADF8;&amp;#xC800; &amp;#xC790;&amp;#xC6D0;&amp;#xC744; URI&amp;#xB85C; &amp;#xC2DD;&amp;#xBCC4;&amp;#xD558;&amp;#xACE0; &amp;#xC790;&amp;#xC6D0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD589;&amp;#xC704;&amp;#xB97C; HTTP METHOD&amp;#xB85C; &amp;#xD558;&amp;#xBA70; HTTP &amp;#xBA85;&amp;#xC138;&amp;#xC5D0; &amp;#xC788;&amp;#xB294; &amp;#xD5E4;&amp;#xB354; &amp;#xAC12;&amp;#xC744; &amp;#xC798; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC815;&amp;#xB3C4;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD588;&amp;#xB294;&amp;#xB370;, &amp;#xB0B4;&amp;#xAC00; &amp;#xC0DD;&amp;#xAC01; &amp;#xC815;&amp;#xC758;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC740; &amp;#xB9D0;&amp;#xADF8;&amp;#xB798;&amp;#xB3C4; REST &amp;#xBAA8;&amp;#xB378;&amp;#xC5D0;&amp;#xC11C; &amp;#xC544;&amp;#xC8FC; &amp;#xC77C;&amp;#xBD80;&amp;#xBD84;&amp;#xC5D0; &amp;#xBD88;&amp;#xACFC;&amp;#xD55C; &amp;#xC0AC;&amp;#xC2E4;...&lt;/p&gt;
&lt;p&gt;&amp;#xADF8;&amp;#xB798;&amp;#xC11C; &amp;#xC880; &amp;#xB354; &amp;#xB0B4;&amp;#xAC00; &amp;#xB9CC;&amp;#xB4E0; API &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC55E;&amp;#xC73C;&amp;#xB85C; &amp;#xAC1C;&amp;#xBC1C;&amp;#xD560; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCF4;&amp;#xB2E4; &amp;#xCDA9;&amp;#xC2E4;&amp;#xD55C; REST&amp;#xD55C; API&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xACE0; &amp;#xC2F6;&amp;#xB2E4;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5B4;&amp;#xC11C; &amp;#xAC15;&amp;#xC758;&amp;#xB098; &amp;#xB9AC;&amp;#xC18C;&amp;#xC2A4;&amp;#xB97C; &amp;#xCC3E;&amp;#xC544;&amp;#xBCF4;&amp;#xB2E4;&amp;#xAC00; &amp;#xBC1C;&amp;#xACAC;&amp;#xD55C; &amp;#xAC83;&amp;#xC774; &amp;#xBC31;&amp;#xAE30;&amp;#xC120;&amp;#xB2D8; &amp;#xAC15;&amp;#xC758;&amp;#xC774;&amp;#xB2E4;. &amp;#xC0AC;&amp;#xC2E4; Spring Boot&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xBCF4;&amp;#xB2E4;&amp;#xB294; &amp;#xC2E4;&amp;#xC81C; REST&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xBC29;&amp;#xBC95;&amp;#xB860;&amp;#xC774;&amp;#xB098; &amp;#xC811;&amp;#xADFC; &amp;#xBC29;&amp;#xC2DD;&amp;#xC774; &amp;#xB354; &amp;#xAD81;&amp;#xAE08;&amp;#xD574;&amp;#xC11C; &amp;#xAC15;&amp;#xC758;&amp;#xB97C; &amp;#xAD6C;&amp;#xB9E4;&amp;#xD55C; &amp;#xC774;&amp;#xC720;&amp;#xAC00; &amp;#xB354; &amp;#xCEF8;&amp;#xB2E4;. 7&amp;#xAC15;&amp;#xAE4C;&amp;#xC9C0; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB294;&amp;#xB370; &amp;#xC11C;&amp;#xB450;&amp;#xC5D0;&amp;#xC11C; &amp;#xC608;&amp;#xC81C;&amp;#xB85C; &amp;#xBCF4;&amp;#xC5EC;&amp;#xC92C;&amp;#xB358; &amp;#xB2E4;&amp;#xC591;&amp;#xD55C; API&amp;#xB4E4;(&amp;#xB124;&amp;#xC774;&amp;#xBC84;, &amp;#xCE74;&amp;#xCE74;&amp;#xC624;, Github)&amp;#xC758; &amp;#xC608;&amp;#xC2DC;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB358; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xC558;&amp;#xACE0; &amp;#xCEE8;&amp;#xD37C;&amp;#xB7F0;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC1C;&amp;#xD45C;&amp;#xD558;&amp;#xC168;&amp;#xB358; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xD55C;&amp;#xBC88; &amp;#xBCF5;&amp;#xAE30; &amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;.&lt;/p&gt;
&lt;p&gt;&amp;#xC2DC;&amp;#xAC04;&amp;#xC774;&amp;#xC57C; &amp;#xB298; &amp;#xC5C6;&amp;#xB2E4;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC9EC;&amp;#xC9EC;&amp;#xD788; &amp;#xB4E3;&amp;#xACE0; &amp;#xC608;&amp;#xC81C;&amp;#xCF54;&amp;#xB4DC;&amp;#xAE4C;&amp;#xC9C0; &amp;#xC644;&amp;#xC131;&amp;#xD574;&amp;#xC57C;&amp;#xACA0;&amp;#xB2E4;.&lt;/p&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/147</guid>
      <comments>https://stylishc.tistory.com/147#entry147comment</comments>
      <pubDate>Sun, 14 Jul 2019 21:10:52 +0900</pubDate>
    </item>
    <item>
      <title>DDD - #3 애그리거트(Aggregate)</title>
      <link>https://stylishc.tistory.com/146</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;DDD_#3&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css&quot;&gt;
      
      

      
      &lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/npm/mermaid@8.1.0/dist/mermaid.min.js&quot;&gt;&lt;/script&gt;
      
      
      
      

      &lt;style&gt;
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;blockquote&gt;
&lt;p&gt;DDD Start&amp;#xC758; 3&amp;#xC7A5; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8aggregate&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;(Aggregate)&lt;/h2&gt;

&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8%EC%97%90-%EB%8C%80%ED%95%9C-%ED%8C%8C%EC%95%85%EA%B3%BC-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD30C;&amp;#xC545;&amp;#xACFC; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC811;&amp;#xADFC;&lt;/strong&gt;&amp;#xACFC; &lt;strong&gt;&amp;#xAC1C;&amp;#xBCC4; &amp;#xAC1D;&amp;#xCCB4; &amp;#xD639;&amp;#xC740; &amp;#xAD6C;&amp;#xD604; &amp;#xB2E8;&amp;#xC704;&lt;/strong&gt;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC811;&amp;#xADFC;&amp;#xC73C;&amp;#xB85C; &amp;#xB098;&amp;#xB20C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC774;&amp;#xD574;&amp;#xAC00; &amp;#xC5C6;&amp;#xB294; &amp;#xC0C1;&amp;#xD0DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xC744; &amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xAC1C;&amp;#xBC1C;&amp;#xC744; &amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC04;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xAC00; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C; &amp;#xC62C;&amp;#xBC14;&amp;#xB978; &amp;#xC774;&amp;#xD574;&amp;#xB97C; &amp;#xBC14;&amp;#xD0D5;&amp;#xC73C;&amp;#xB85C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xC744; &amp;#xC9C4;&amp;#xD589;&amp;#xD574;&amp;#xC57C;&amp;#xC9C0; &amp;#xC804;&amp;#xCCB4; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xC744; &amp;#xB9DD;&amp;#xAC00;&amp;#xD2B8;&amp;#xB9AC;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74;&amp;#xC11C; &amp;#xCD94;&amp;#xAC00; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC744; &amp;#xC218;&amp;#xD589;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xD070; &amp;#xADF8;&amp;#xB9BC;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC774;&amp;#xD574;&amp;#xB294; &amp;#xD544;&amp;#xC218;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xBB36;&amp;#xC5B4;&amp;#xC11C; &amp;#xC0C1;&amp;#xC704; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xBC14;&amp;#xB77C;&amp;#xBCF4;&amp;#xBA74; &amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378; &amp;#xAC04;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xC27D;&amp;#xAC8C; &amp;#xD30C;&amp;#xC545;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;mermaid&quot;&gt;graph LR
    subgraph &amp;#xC8FC;&amp;#xBB38;
        Address --- ShippingInfo
        ShippingInfo --- Order
        Order --- Orderer
        ShippingInfo --- Receiver
        Receiver --- Orderer
        OrderLine --- Order
        DeliveryTracking --- OrderLine
        OrderLine --- Order
        DeliveryTracking --- Order
    end

    subgraph &amp;#xD68C;&amp;#xC6D0;
        Orderer --- Member
        Member --- MemberGrade
    end
    subgraph &amp;#xACB0;&amp;#xC81C;
    Order --- PaymentInfo
    end

    subgraph &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;
        Category
    end    

    subgraph &amp;#xB9AC;&amp;#xBDF0;
        Review
    end

    subgraph &amp;#xC0C1;&amp;#xD488;
        Product
        Review --- Product
        Category --- Product
        Product --- OrderLine
    end
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xC744; &amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC880; &amp;#xB354; &amp;#xC77C;&amp;#xAD00;&amp;#xC131; &amp;#xC788;&amp;#xB294; &amp;#xAD6C;&amp;#xC870;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB418;&amp;#xBA70;, &amp;#xC77C;&amp;#xAD00;&amp;#xC131;&amp;#xC774; &amp;#xD655;&amp;#xBCF4;&amp;#xB418;&amp;#xB294; &amp;#xB9CC;&amp;#xD07C; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xB2E8;&amp;#xC21C;&amp;#xD558;&amp;#xACE0; &amp;#xD655;&amp;#xC7A5;&amp;#xC5D0; &amp;#xC6A9;&amp;#xC774;&amp;#xD55C; &amp;#xAD6C;&amp;#xC870;&amp;#xB85C; &amp;#xAC00;&amp;#xC838;&amp;#xAC08; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xAD6C;&amp;#xD604; &amp;#xBAA8;&amp;#xB378;&amp;#xC5D0;&amp;#xC11C; &amp;#xC989;, &amp;#xC2E4;&amp;#xC81C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;(&amp;#xBCA8;&amp;#xB958;, &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;)&amp;#xB97C; &amp;#xD568;&amp;#xAED8; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xACE0; &amp;#xC774;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB77C;&amp;#xC774;&amp;#xD504;&amp;#xC0AC;&amp;#xC774;&amp;#xD074;&amp;#xB3C4; &amp;#xB3D9;&amp;#xC77C;&amp;#xD558;&amp;#xAC8C; &amp;#xAC00;&amp;#xC838;&amp;#xAC00;&amp;#xAC8C; &amp;#xB420; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC774; &amp;#xB192;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC704; &amp;#xB3C4;&amp;#xD45C;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB294; &lt;strong&gt;&amp;#xACBD;&amp;#xACC4;&lt;/strong&gt;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &lt;strong&gt;&amp;#xACBD;&amp;#xACC4;&amp;#xB97C; &amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAE30;&amp;#xC900;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xADDC;&amp;#xCE59;&amp;#xACFC; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC744; &amp;#xAE30;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xAE30;&amp;#xC900;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xD568;&amp;#xAED8; &amp;#xC0DD;&amp;#xC131;&amp;#xB418;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB098; &amp;#xC694;&amp;#xC18C;&amp;#xB4E4;&amp;#xC740; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB85C; &amp;#xBB36;&amp;#xC77C; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC774; &amp;#xB192;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xACE0; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xB294; &amp;#xC8FC;&amp;#xCCB4;&amp;#xAC00; &amp;#xB2E4;&amp;#xB974;&amp;#xB2E4;&amp;#xBA74; &amp;#xAC19;&amp;#xC740; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB85C; &amp;#xBB36;&amp;#xC774;&amp;#xAE30; &amp;#xD798;&amp;#xB4E4; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC88B;&amp;#xC740; &amp;#xC608;&amp;#xAC00; &amp;#xBC14;&amp;#xB85C; &amp;#xC0C1;&amp;#xD488;/&amp;#xB9AC;&amp;#xBDF0;&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xC774;&amp;#xB2E4;. &amp;#xC0C1;&amp;#xD488;&amp;#xC740; &amp;#xB2F4;&amp;#xB2F9;&amp;#xC790;&amp;#xAC00; &amp;#xC0DD;&amp;#xC131;/&amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xACE0; &amp;#xB9AC;&amp;#xBDF0;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xC2E4;&amp;#xC81C; &amp;#xACE0;&amp;#xAC1D;&amp;#xC774; &amp;#xC0DD;&amp;#xC131;/&amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC0C1;&amp;#xD488;&amp;#xACFC; &amp;#xB9AC;&amp;#xBDF0;&amp;#xB97C; &amp;#xB3D9;&amp;#xC2DC;&amp;#xC5D0; &amp;#xC870;&amp;#xD68C;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC774; &amp;#xC0DD;&amp;#xAE34;&amp;#xB2E4;&amp;#xBA74; &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC870;&amp;#xD68C; &amp;#xC804;&amp;#xC6A9;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;(DAO)&amp;#xC744; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC11C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBCF4;&amp;#xD1B5;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0;&amp;#xC11C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xC5EC; &amp;#xC774;&amp;#xB97C; &amp;#xC870;&amp;#xD569;&amp;#xD558;&amp;#xB294; &amp;#xD615;&amp;#xC2DD;&amp;#xC774;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8-%EB%A3%A8%ED%8A%B8&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xB300;&amp;#xD45C;&amp;#xD558;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC774;&amp;#xBA70; &lt;strong&gt;&amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/strong&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xBD80;&amp;#xB974;&amp;#xAE30;&amp;#xB3C4; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC18D;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB294; &amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0; &amp;#xC9C1;&amp;#xC811;/&amp;#xAC04;&amp;#xC811;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC18D;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&amp;#xB418;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xD2B9;&amp;#xC815; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB9CC; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC9C0;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774; &amp;#xC0DD;&amp;#xAE30;&amp;#xBA74; &amp;#xC548;&amp;#xB41C;&amp;#xB2E4;. &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xADDC;&amp;#xCE59;&amp;#xACFC; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC744; &amp;#xCDA9;&amp;#xC2E4;&amp;#xD558;&amp;#xAC8C; &amp;#xC9C0;&amp;#xD0A4;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC18D;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xC628;&amp;#xC804;&amp;#xD788; &amp;#xC815;&amp;#xC0C1; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7EC;&amp;#xD55C; &lt;strong&gt;&amp;#xC77C;&amp;#xAD00;&amp;#xB41C; &amp;#xC0C1;&amp;#xD0DC;/&amp;#xC77C;&amp;#xAD00;&amp;#xC131;&lt;/strong&gt;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xB2F4;&amp;#xB2F9;/&amp;#xAD00;&amp;#xB9AC;&amp;#xD560; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC774;&amp;#xAC83;&amp;#xC774; &amp;#xBC14;&amp;#xB85C; &lt;code&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&lt;/code&gt;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC77C;&amp;#xAD00;&amp;#xC131;&amp;#xC744; &amp;#xC720;&amp;#xC9C0;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB4E4;&amp;#xC758; &amp;#xC0C1;&amp;#xD0DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC81C;&amp;#xC5B4;&amp;#xAD8C;&amp;#xC744; &amp;#xAC00;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB418;&amp;#xBA70; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAE30;&amp;#xB2A5;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xC678;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC18D;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC9C1;&amp;#xC811;&amp;#xC801;&amp;#xC778; &amp;#xC811;&amp;#xADFC;&amp;#xC744; &amp;#xBABB;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0;&amp;#xC11C; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD560; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC774;&amp;#xB294; &amp;#xACE7; &amp;#xC5EC;&amp;#xB7EC; &amp;#xC751;&amp;#xC6A9; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC911;&amp;#xBCF5; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &amp;#xC6D0;&amp;#xC778;&amp;#xC774; &amp;#xB418;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xAC00;&amp;#xAE09;&amp;#xC801;&amp;#xC774;&amp;#xBA74; &amp;#xC751;&amp;#xC9D1;&amp;#xC131; &amp;#xC788;&amp;#xAC8C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xBA70; &amp;#xC774;&amp;#xB97C; &amp;#xC9C0;&amp;#xD0A4;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &lt;strong&gt;&amp;#xC138;&amp;#xD130; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC9C0;&amp;#xC591;&lt;/strong&gt; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &lt;strong&gt;&amp;#xBCA8;&amp;#xB958; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBD88;&amp;#xBCC0; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC801;&amp;#xADF9;&amp;#xC801; &amp;#xD65C;&amp;#xC6A9;&lt;/strong&gt;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC2B5;&amp;#xAD00;&amp;#xD654; &amp;#xC2DC;&amp;#xCF1C;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC678;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xC0C1;&amp;#xD0DC; &amp;#xBCC0;&amp;#xD654; &amp;#xC81C;&amp;#xC5B4;&amp;#xAC00; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C4;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xC0C1;&amp;#xD0DC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xB300;&amp;#xD558;&amp;#xC5EC; &amp;#xC65C;/&amp;#xC5B4;&amp;#xB5BB;&amp;#xAC8C; &amp;#xBCC0;&amp;#xD588;&amp;#xB294;&amp;#xC9C0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCD94;&amp;#xC801;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C4;&amp;#xB2E4;.&lt;br&gt;
&amp;#xC2E4;&amp;#xC81C; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB2E4;&amp;#xBCF4;&amp;#xBA74; &amp;#xC774;&amp;#xB97C; &amp;#xC9C0;&amp;#xD0A4;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xC2B5;&amp;#xAD00;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xAC8C;&amp;#xD130;/&amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4; &amp;#xC4F0;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &amp;#xB108;&amp;#xBB34; &amp;#xB9CE;&amp;#xC774; &amp;#xAD6C;&amp;#xACBD;&amp;#xD574;&amp;#xC654;&amp;#xB2E4;. &amp;#xC2E4;&amp;#xC81C; &amp;#xCD08;&amp;#xAE30; &amp;#xB2E8;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC774;&amp;#xB098; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC774; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC544; &amp;#xC0DD;&amp;#xAE30;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC801;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xCD94;&amp;#xD6C4; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xACFC; &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4;&amp;#xAC00; &amp;#xD655;&amp;#xC7A5;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xACE0; &amp;#xCF54;&amp;#xB4DC; &amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xAC00; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C0;&amp;#xBA74; &amp;#xAD00;&amp;#xB9AC;&amp;#xD558;&amp;#xAE30; &amp;#xD798;&amp;#xB4E4;&amp;#xC5B4; &amp;#xC9C0;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC790;&amp;#xBA85;&amp;#xD55C; &amp;#xC0AC;&amp;#xC2E4;&amp;#xC774;&amp;#xB2E4;. &amp;#xCF54;&amp;#xB4DC; &amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xAC00; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C0;&amp;#xBA74; &amp;#xC5B4;&amp;#xCA54; &amp;#xC218; &amp;#xC5C6;&amp;#xB294; &amp;#xC77C;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD558;&amp;#xB294; &amp;#xC0AC;&amp;#xB78C;&amp;#xB3C4; &amp;#xC788;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC; &amp;#xAE38;&amp;#xC5B4;&amp;#xC9C0;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC774;&amp;#xC720;&amp;#xC640; &amp;#xADFC;&amp;#xAC70;&amp;#xAC00; &amp;#xBA85;&amp;#xD655;&amp;#xD55C; &amp;#xAC83;&amp;#xC774; &amp;#xCD94;&amp;#xD6C4; &amp;#xC720;&amp;#xC9C0;&amp;#xBCF4;&amp;#xC218;&amp;#xC131;&amp;#xC774;&amp;#xB098; &amp;#xD655;&amp;#xC7A5;&amp;#xC5D0; &amp;#xC720;&amp;#xB9AC;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;br&gt;
&amp;#xC774;&amp;#xB7EC;&amp;#xD55C; &amp;#xCC28;&amp;#xC6D0;&amp;#xC5D0;&amp;#xC11C; &amp;#xAC00;&amp;#xAE09;&amp;#xC801;&amp;#xC774;&amp;#xBA74; &amp;#xC138;&amp;#xD130; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC744; &amp;#xC9C0;&amp;#xC591;&amp;#xD558;&amp;#xACE0; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xD639;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0C1;&amp;#xD0DC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xC81C;&amp;#xC5B4;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC5EC; &amp;#xC77C;&amp;#xAD00;&amp;#xC131; &amp;#xC788;&amp;#xB294; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC608;&amp;#xC2DC;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Embeddable&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ArticleContent&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; contentType&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;token annotation builtin&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;article&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@SecondaryTable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;article_content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    pkJoinColumns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;PrimaryKeyJoinColumn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Article &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;companion&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            title&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ArticleContent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ArticleContent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; title
            &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@GeneratedValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strategy &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; GenerationType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IDENTITY&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0L&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; title&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Embedded&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@AttributeOverrides&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;table &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;article_content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;AttributeOverride&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;contentType&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;table &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;article_content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ArticleContent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ArticleContent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;modifyContent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ArticleContent&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC73C;&amp;#xB85C; &amp;#xC791;&amp;#xC131;&amp;#xD55C; JPA &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC774;&amp;#xB2E4;. &amp;#xC5EC;&amp;#xB7EC; &amp;#xC5B4;&amp;#xB178;&amp;#xD14C;&amp;#xC774;&amp;#xC158;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC11C; &amp;#xB2E4;&amp;#xC18C; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xC788;&amp;#xAE34; &amp;#xD558;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCDA9;&amp;#xC2E4;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xD55C; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC138;&amp;#xD130; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC81C;&amp;#xD55C;&lt;br&gt;
&amp;#xC138;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC811;&amp;#xADFC; &amp;#xC81C;&amp;#xD55C;&amp;#xC744; &lt;code&gt;protected&lt;/code&gt; &amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xC5EC; &amp;#xC678;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC0C1;&amp;#xD0DC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD568;&lt;/li&gt;
&lt;li&gt;&amp;#xBD88;&amp;#xBCC0; &amp;#xAC1D;&amp;#xCCB4; &amp;#xC0AC;&amp;#xC6A9;&lt;br&gt;
&lt;code&gt;ArticleContent&lt;/code&gt;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC600;&amp;#xC73C;&amp;#xBA70; &amp;#xC2E4;&amp;#xC81C; &amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xAC12;&amp;#xC740; &amp;#xBD88;&amp;#xBCC0; &amp;#xD504;&amp;#xB85C;&amp;#xD37C;&amp;#xD2F0;(&lt;code&gt;val&lt;/code&gt;)&amp;#xB85C; &amp;#xD574;&amp;#xB2F9; &amp;#xAC12;&amp;#xC744; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xC788;&amp;#xB294; &lt;code&gt;content&lt;/code&gt;&amp;#xAC12;&amp;#xC744; &amp;#xC218;&amp;#xC815;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC138;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC811;&amp;#xADFC;&amp;#xC744; &amp;#xC678;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xD560;&amp;#xC218; &amp;#xC5C6;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xACB0;&amp;#xAD6D; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBCC0;&amp;#xACBD;&amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xB370; &amp;#xBCC0;&amp;#xACBD;&amp;#xC740; &lt;code&gt;modifyContent&lt;/code&gt;&amp;#xB77C;&amp;#xB294; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560;&amp;#xB54C;&amp;#xBCF4;&amp;#xB2E4; &amp;#xC880; &amp;#xB354; &amp;#xC758;&amp;#xBBF8;&amp;#xAC00; &amp;#xBA85;&amp;#xD655;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8-%EB%A3%A8%ED%8A%B8%EC%9D%98-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xC758; &amp;#xAE30;&amp;#xB2A5; &amp;#xAD6C;&amp;#xD604;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xB294; &amp;#xB0B4;&amp;#xBD80;&amp;#xC758; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC870;&amp;#xD569;&amp;#xD558;&amp;#xC5EC; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC644;&amp;#xC131;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xADDC;&amp;#xCE59;&amp;#xC0C1; &amp;#xC9C1;&amp;#xC811; &amp;#xAE30;&amp;#xB2A5; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6B4; &amp;#xACBD;&amp;#xC6B0; &amp;#xAE30;&amp;#xB2A5; &amp;#xC2E4;&amp;#xD589;&amp;#xC744; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xC704;&amp;#xC784;&amp;#xD560; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC8FC;&amp;#xBB38; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC608;&amp;#xC2DC;
&lt;ul&gt;
&lt;li&gt;&amp;#xC8FC;&amp;#xBB38; &amp;#xBAA9;&amp;#xB85D; &amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB4E4;&amp;#xC744; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xC5EC; &amp;#xCD1D; &amp;#xC8FC;&amp;#xBB38; &amp;#xAE08;&amp;#xC561;&amp;#xC744; &amp;#xAD6C;&amp;#xD558;&amp;#xB294; &amp;#xC608;&amp;#xC2DC;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;purchase_order&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Access&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;AccessType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;FIELD&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Order &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ... &amp;#xC0DD;&amp;#xB7B5;&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;total_amounts&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@Convert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;converter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; MoneyConverter&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; totalAmount&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Money &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Money&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@ElementCollection&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@CollectionTable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;order_line&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        joinColumns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;JoinColumn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;order_number&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@OrderBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;line_idx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; orderLines&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;OrderLine&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mutableListOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calculateTotalAmounts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;totalAmount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Money&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            totalAmount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orderLines
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;asSequence&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;price&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;totalAmount &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;quantity &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC758; &amp;#xBC94;&amp;#xC704;&amp;#xB294; &amp;#xC791;&amp;#xC744;&amp;#xC218;&amp;#xB85D; &amp;#xC88B;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xAC00;&amp;#xAE09;&amp;#xC801;&amp;#xC774;&amp;#xBA74; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC81C;&amp;#xD55C;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD55C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB9CC;&amp;#xC744; &amp;#xC218;&amp;#xC815;&amp;#xD55C;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xB294; &amp;#xACB0;&amp;#xAD6D; &amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC758; &amp;#xBC94;&amp;#xC704;&amp;#xC5D0; &amp;#xD3EC;&amp;#xD568;&amp;#xC2DC;&amp;#xD0A4;&amp;#xC9C0; &amp;#xC54A;&amp;#xACA0;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;. &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xAC04;&amp;#xC758; &amp;#xC758;&amp;#xC874;&amp;#xC774; &amp;#xC0DD;&amp;#xAE30;&amp;#xAE30; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xBA74; &amp;#xACB0;&amp;#xAD6D; &amp;#xACB0;&amp;#xD569;&amp;#xB3C4;&amp;#xAC00; &amp;#xB192;&amp;#xC544;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB418;&amp;#xACE0; &amp;#xC774;&amp;#xB294; &amp;#xACE7; &amp;#xC218;&amp;#xC815; &amp;#xBE44;&amp;#xC6A9;&amp;#xC774; &amp;#xC99D;&amp;#xAC00;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBBC0;&amp;#xB85C; &amp;#xAC00;&amp;#xAE09;&amp;#xC801;&amp;#xC774;&amp;#xBA74; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC758; &amp;#xBC94;&amp;#xC704;&amp;#xB294; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB85C; &amp;#xC81C;&amp;#xD55C;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xB9CC;&amp;#xC57D;, &amp;#xC5EC;&amp;#xB7EC; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xC218;&amp;#xC815;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774; &amp;#xC0DD;&amp;#xAE34;&amp;#xB2E4;&amp;#xBA74; &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&lt;/code&gt;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xACE0;&amp;#xB824;&amp;#xD574;&amp;#xBCF4;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;. &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xAC04;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xBD84;&amp;#xB9AC;&amp;#xD560;&amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xC73C;&amp;#xBA70; &amp;#xB610;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604; &amp;#xC790;&amp;#xCCB4;&amp;#xB97C; &amp;#xB098;&amp;#xB220;&amp;#xC11C; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB584;&amp;#xBB38;&amp;#xC5D0; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBCF5;&amp;#xC7A1;&amp;#xC131; &amp;#xC5ED;&amp;#xC2DC; &amp;#xB0AE;&amp;#xC544;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%A0%88%ED%8C%8C%EC%A7%80%ED%86%A0%EB%A6%AC%EC%99%80-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8&quot;&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC640; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB294; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xC73C;&amp;#xBBC0;&amp;#xB85C;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xC601;&amp;#xC18D;&amp;#xC131;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC; &amp;#xB610;&amp;#xD55C; &amp;#xD558;&amp;#xB098;&amp;#xB9CC; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xB9DE;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xBB3C;&amp;#xB9AC;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC5D0; &amp;#xC800;&amp;#xC7A5;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD574;&amp;#xC11C;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB97C; &amp;#xAC01;&amp;#xAC01; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC9C0;&amp;#xB294; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB294; &amp;#xCD5C;&amp;#xC18C; &amp;#xC800;&amp;#xC7A5;(&lt;code&gt;save&lt;/code&gt;) &amp;#xBC0F; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790; &amp;#xC870;&amp;#xD68C;(&lt;code&gt;findById&lt;/code&gt;)&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. Data-JPA&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC5D0;&amp;#xC11C; &amp;#xAE30;&amp;#xBCF8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xB300;&amp;#xBD80;&amp;#xBD84;&amp;#xC758; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xCEE4;&amp;#xBC84;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xC5B4;&amp;#xB835;&amp;#xC9C0; &amp;#xC54A;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB294; &amp;#xAC1C;&amp;#xB150;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xB098;&amp;#xC774;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xC804;&amp;#xCCB4;&amp;#xB97C; &amp;#xC800;&amp;#xC7A5;&amp;#xC18C;&amp;#xC5D0; &amp;#xC601;&amp;#xC18D;&amp;#xD654;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xB9CC;&amp;#xC57D; &amp;#xC5F0;&amp;#xAD00; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;/&amp;#xBCA8;&amp;#xB958; &amp;#xC911; &amp;#xC77C;&amp;#xBD80;&amp;#xB9CC; &amp;#xBC18;&amp;#xC601;&amp;#xB418;&amp;#xBA74; &amp;#xC77C;&amp;#xAD00;&amp;#xC131;&amp;#xC774; &amp;#xAE68;&amp;#xC9C0;&amp;#xBBC0;&amp;#xB85C; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;id%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8-%EC%B0%B8%EC%A1%B0&quot;&gt;ID&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD55C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xCC38;&amp;#xC870;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C; &amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD560; &amp;#xB584;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC758; &amp;#xAD00;&amp;#xB9AC; &amp;#xC8FC;&amp;#xCCB4;&amp;#xAC00; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xC774;&amp;#xBBC0;&amp;#xB85C; &amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD55C;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &lt;code&gt;&amp;#xC5F0;&amp;#xAD00;&amp;#xAD00;&amp;#xACC4;&lt;/code&gt;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC788;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xACBD;&amp;#xACC4;&amp;#xAC00; &amp;#xBD88;&amp;#xBD84;&amp;#xBA85;&amp;#xD574;&amp;#xC9C0;&amp;#xACE0; &amp;#xD655;&amp;#xC7A5; &amp;#xBC0F; &amp;#xC131;&amp;#xB2A5;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC774;&amp;#xC288;&amp;#xAC00; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC9C0;&amp;#xC591;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xACE0;, &lt;strong&gt;ID&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xADF8;&amp;#xB098;&amp;#xB9C8; &amp;#xB098;&amp;#xC740; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC5F0;&amp;#xAD00; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xB9E4;&amp;#xD551;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xAC1D;&amp;#xCCB4; &amp;#xADF8;&amp;#xB798;&amp;#xD504;&amp;#xAC00; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD574;&amp;#xC9D0;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBC94;&amp;#xC704;&amp;#xB97C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC560;&amp;#xB9E4;&amp;#xD574;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xACB0;&amp;#xD569;&amp;#xB3C4;&amp;#xAC00; &amp;#xB192;&amp;#xC544;&amp;#xC9D0;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC218;&amp;#xC815;/&amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C4;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xC11C;&amp;#xBE0C;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xBCC4;&amp;#xB85C; &amp;#xC2DC;&amp;#xC2A4;&amp;#xD15C;&amp;#xC744; &amp;#xD655;&amp;#xC7A5;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xBD84;&amp;#xB9AC;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xAC04;&amp;#xC5D0; &amp;#xAD00;&amp;#xACC4; &amp;#xB9E4;&amp;#xD551;&amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xACE0; &amp;#xC218;&amp;#xC815;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xB9CE;&amp;#xC544;&amp;#xC9C8; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xC9C1;&amp;#xC811; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xD328;&amp;#xCE58; &amp;#xC804;&amp;#xB7B5;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD310;&amp;#xB2E8;&amp;#xB3C4; &amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xBD80;&amp;#xAC00;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; N+1&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCCB4;&amp;#xD06C;&amp;#xB3C4; &amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC5EC;&amp;#xB7EC;&amp;#xBAA8;&amp;#xB85C; &amp;#xC190;&amp;#xC774; &amp;#xAC08; &amp;#xC218;&amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ID &amp;#xCC38;&amp;#xC870;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xBCC4;&amp;#xB85C; &amp;#xACBD;&amp;#xACC4;&amp;#xAC00; &amp;#xBA85;&amp;#xD655;&amp;#xD574;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70; &amp;#xB610;&amp;#xD55C; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xC218;&amp;#xC815;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xB97C; &amp;#xC6D0;&amp;#xCC9C;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xB9C9;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xBCC4;&amp;#xB85C; &amp;#xB2E4;&amp;#xB978; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xC911;&amp;#xC694;&amp;#xD55C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0;&amp;#xB294; RDBMS&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xACE0; &amp;#xC870;&amp;#xD68C;/&amp;#xC0BD;&amp;#xC785;/&amp;#xC0AD;&amp;#xC81C; &amp;#xC131;&amp;#xB2A5;&amp;#xC774; &amp;#xC911;&amp;#xC694;&amp;#xD55C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0;&amp;#xB294; NoSQL(MongoDB, DynamoDB)&amp;#xB4F1;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC774; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C0;&amp;#xBA74; &amp;#xD55C; &amp;#xBC88;&amp;#xC758; &amp;#xCFFC;&amp;#xB9AC;&amp;#xB85C; &amp;#xD574;&amp;#xACB0;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xCE90;&amp;#xC2DC;&amp;#xB97C; &amp;#xC801;&amp;#xC6A9;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xC870;&amp;#xD68C; &amp;#xC804;&amp;#xC6A9; &amp;#xC800;&amp;#xC7A5;&amp;#xC18C;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xC5EC; &amp;#xB300;&amp;#xC751;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ID &amp;#xCC38;&amp;#xC870;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xC5C8;&amp;#xC744; &amp;#xB584;, &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xB418;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xD558;&amp;#xB098; &amp;#xC788;&amp;#xB294;&amp;#xB370; &lt;code&gt;&amp;#xC870;&amp;#xC778;&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC870;&amp;#xD68C; &amp;#xAD00;&amp;#xB828; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xD574;&amp;#xB2F9; &amp;#xAD6C;&amp;#xD604;&amp;#xC740; &amp;#xC9C1;&amp;#xC811; &amp;#xCF54;&amp;#xB4DC;&amp;#xB85C; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC788;&amp;#xC9C0;&amp;#xB9CC; &lt;strong&gt;&amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC870;&amp;#xD68C; &amp;#xC804;&amp;#xC6A9; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&lt;/strong&gt;&amp;#xC744; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC801;&amp;#xC808;&amp;#xD558;&amp;#xB2E4;. JPA/Hibernate&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC774;&amp;#xB7F0; &amp;#xC870;&amp;#xD68C; &amp;#xC804;&amp;#xC6A9; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xB294;&amp;#xB370; &amp;#xBC14;&amp;#xB85C; &lt;code&gt;@Subselect&lt;/code&gt;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB2E4;. &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC11C;&amp;#xBE0C;&amp;#xCFFC;&amp;#xB9AC;&amp;#xC808;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30; &amp;#xC2EB;&amp;#xB2E4;&amp;#xBA74; Native&amp;#xCFFC;&amp;#xB9AC;&amp;#xB97C; &amp;#xB9E4;&amp;#xD551;&amp;#xD558;&amp;#xC5EC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8-%EA%B0%84-%EC%A7%91%ED%95%A9-%EC%97%B0%EA%B4%80&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xAC04; &amp;#xC9D1;&amp;#xD569; &amp;#xC5F0;&amp;#xAD00;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xAC04;&amp;#xC5D0; 1:N, N:M&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC8FC;&amp;#xB85C; &amp;#xCF5C;&amp;#xB809;&amp;#xC158;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xB9E4;&amp;#xD551;&amp;#xC744; &amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xBCF4;&amp;#xD1B5; 1:N&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC131;&amp;#xB2A5;&amp;#xC0C1;&amp;#xC758; &amp;#xC774;&amp;#xC288;&amp;#xAC00; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xB4DC;&amp;#xBB3C;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; N&amp;#xC5D0; &amp;#xD574;&amp;#xB2F9;&amp;#xD558;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC1C;&amp;#xC218;&amp;#xAC00; &amp;#xACE0;&amp;#xC815;&amp;#xC801;&amp;#xC774;&amp;#xACE0; &amp;#xB9CE;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; &amp;#xCDA9;&amp;#xBD84;&amp;#xD558;&amp;#xAC8C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C; &amp;#xC774;&amp;#xB7F0; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; &amp;#xBAA8;&amp;#xB4E0; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xD328;&amp;#xCE58;&amp;#xD574;&amp;#xC624;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xB098;&amp;#xB220;&amp;#xC11C; &amp;#xCFFC;&amp;#xB9AC;&amp;#xD558;&amp;#xC5EC; &amp;#xB9E4;&amp;#xD551;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC774;&amp;#xBC84;&amp;#xB124;&amp;#xC774;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;@BatchSize&lt;/code&gt;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC5B4;&amp;#xB178;&amp;#xD14C;&amp;#xC774;&amp;#xC158;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC640; &amp;#xC0C1;&amp;#xD488; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC758; &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4; &amp;#xC124;&amp;#xBA85;&amp;#xD574;&amp;#xBCF4;&amp;#xC790;&amp;#xBA74;, &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC778; &amp;#xC870;&amp;#xD68C; &amp;#xAD6C;&amp;#xD604;&amp;#xC5D0;&amp;#xC11C; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC5D0; &amp;#xC18D;&amp;#xD55C; &amp;#xBAA8;&amp;#xB4E0; &amp;#xC0C1;&amp;#xD488;&amp;#xC744; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB294; &amp;#xB4DC;&amp;#xBB3C;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xBA3C;&amp;#xC800; &amp;#xC870;&amp;#xD68C;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC758; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xAD6C;&amp;#xD558;&amp;#xACE0; &amp;#xD574;&amp;#xB2F9; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xAE30;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xC0C1;&amp;#xD488; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xB9CC;&amp;#xB4DC;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xB9CE;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;M:N&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, RDBMS&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xB9E4;&amp;#xD551;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBCF4;&amp;#xD1B5; &amp;#xC870;&amp;#xC778; &amp;#xD14C;&amp;#xC774;&amp;#xBE14; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xB9CE;&amp;#xC774; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &amp;#xC0C1;&amp;#xD488;&amp;#xACFC; &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC758; &amp;#xC608;&amp;#xB97C; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xBA74; &amp;#xC27D;&amp;#xAC8C; &amp;#xC774;&amp;#xD574;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC0C1;&amp;#xD488; &amp;#xD558;&amp;#xB098;&amp;#xAC00; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC5D0;&amp;#xB9CC; &amp;#xC18D;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C; N&amp;#xAC1C;&amp;#xC758; &amp;#xCE74;&amp;#xD14C;&amp;#xACE0;&amp;#xB9AC;&amp;#xC5D0; &amp;#xC18D;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&amp;#xB97C; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &amp;#xB9E4;&amp;#xD551; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC601;&amp;#xC18D;&amp;#xD654; &amp;#xC2DC;&amp;#xD0AC; &amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC774; &amp;#xACBD;&amp;#xC6B0; &amp;#xC870;&amp;#xC778;&amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xB85C; &lt;code&gt;PRODUCT_CATEGORY&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;mermaid&quot;&gt;graph LR
    PRODUCT ---|1:N| PRODUCT_CATEGORY
    PRODUCT_CATEGORY ---|N:1| CATEGORY
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC544;&amp;#xB798;&amp;#xB294; &amp;#xC0C1;&amp;#xD488; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xAE30;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xC870;&amp;#xC778; &amp;#xD14C;&amp;#xC774;&amp;#xBE14; &amp;#xB9E4;&amp;#xD551; &amp;#xC608;&amp;#xC2DC;&amp;#xB97C; &amp;#xBCF4;&amp;#xC5EC;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;product&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Product &lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@EmbeddedId&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;lateinit&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ProductId
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;

	&lt;span class=&quot;token annotation builtin&quot;&gt;@ElementCollection&lt;/span&gt;
	&lt;span class=&quot;token annotation builtin&quot;&gt;@CollectionTable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;product_category&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                joinColumns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JoinColumn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;product_id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;lateinit&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; categoryIds&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableSet&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;CategoryId&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8%EB%A5%BC-%ED%8C%A9%ED%86%A0%EB%A6%AC%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xB584;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xCC98;&amp;#xB9AC; &amp;#xB85C;&amp;#xC9C1;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0; &amp;#xC774;&amp;#xB97C; &amp;#xC751;&amp;#xC6A9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB97C; &amp;#xC27D;&amp;#xAC8C; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB7F0; &amp;#xAD6C;&amp;#xD604; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xD2C0;&amp;#xB9AC;&amp;#xC9C4; &amp;#xC54A;&amp;#xC558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC911;&amp;#xC694; &amp;#xB85C;&amp;#xC9C1; &amp;#xCC98;&amp;#xB9AC;&amp;#xAC00; &amp;#xC751;&amp;#xC6A9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0; &amp;#xB178;&amp;#xCD9C;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xCD94;&amp;#xD6C4;&amp;#xC5D0; &amp;#xC911;&amp;#xBCF5; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC774; &amp;#xC0DD;&amp;#xAE30;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBCF4;&amp;#xD1B5; &amp;#xC774;&amp;#xB7F0; &amp;#xACBD;&amp;#xC6B0; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C; &amp;#xD574;&amp;#xB2F9; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC751;&amp;#xC9D1;&amp;#xC131; &amp;#xC788;&amp;#xB294; &amp;#xCF54;&amp;#xB4DC; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xACE0; &amp;#xB610;&amp;#xD55C; &amp;#xC5F0;&amp;#xAD00; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xC5EC; &amp;#xD48D;&amp;#xBD80;&amp;#xD558;&amp;#xAC8C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xC5D0; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAE30; &amp;#xD798;&amp;#xB4E4;&amp;#xB2E4;&amp;#xBA74; &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&lt;/code&gt;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &lt;code&gt;&amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&lt;/code&gt;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBCF4;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    &lt;script&gt;
// config mermaid init call
// http://knsv.github.io/mermaid/#configuration
//
// You can edit the 'MERMAID_CONFIG' variable below.
MERMAID_CONFIG = {
  startOnLoad: false
}

if (window['MERMAID_CONFIG']) {
  window['MERMAID_CONFIG'].startOnLoad = false
  window['MERMAID_CONFIG'].cloneCssStyles = false
  window['MERMAID_CONFIG'].theme = &quot;default&quot;
}
mermaid.initialize(window['MERMAID_CONFIG'] || {})

if (typeof(window['Reveal']) !== 'undefined') {
  function mermaidRevealHelper(event) {
    var currentSlide = event.currentSlide
    var diagrams = currentSlide.querySelectorAll('.mermaid')
    for (var i = 0; i &lt; diagrams.length; i++) {
      var diagram = diagrams[i]
      if (!diagram.hasAttribute('data-processed')) {
        mermaid.init(null, diagram, ()=&gt; {
          Reveal.slide(event.indexh, event.indexv)
        })
      }
    }
  }

  Reveal.addEventListener('slidechanged', mermaidRevealHelper)
  Reveal.addEventListener('ready', mermaidRevealHelper)
} else {
  mermaid.init(null, document.getElementsByClassName('mermaid'))
}
&lt;/script&gt;
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/146</guid>
      <comments>https://stylishc.tistory.com/146#entry146comment</comments>
      <pubDate>Wed, 10 Jul 2019 17:21:48 +0900</pubDate>
    </item>
    <item>
      <title>20190609</title>
      <link>https://stylishc.tistory.com/145</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190610&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      
        &lt;script type=&quot;text/x-mathjax-config&quot;&gt;
          MathJax.Hub.Config({&quot;extensions&quot;:[&quot;tex2jax.js&quot;],&quot;jax&quot;:[&quot;input/TeX&quot;,&quot;output/HTML-CSS&quot;],&quot;messageStyle&quot;:&quot;none&quot;,&quot;tex2jax&quot;:{&quot;processEnvironments&quot;:false,&quot;processEscapes&quot;:true,&quot;inlineMath&quot;:[[&quot;$&quot;,&quot;$&quot;],[&quot;\\(&quot;,&quot;\\)&quot;]],&quot;displayMath&quot;:[[&quot;$$&quot;,&quot;$$&quot;],[&quot;\\[&quot;,&quot;\\]&quot;]]},&quot;TeX&quot;:{&quot;extensions&quot;:[&quot;AMSmath.js&quot;,&quot;AMSsymbols.js&quot;,&quot;noErrors.js&quot;,&quot;noUndefined.js&quot;]},&quot;HTML-CSS&quot;:{&quot;availableFonts&quot;:[&quot;TeX&quot;]}});
        &lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; async src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js&quot;&gt;&lt;/script&gt;
        
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;h2 id=&quot;ddd-start-34&amp;#xC7A5;-&amp;#xD559;&amp;#xC2B5;&quot;&gt;DDD Start 3,4&amp;#xC7A5; &amp;#xD559;&amp;#xC2B5;&lt;/h2&gt;
&lt;p&gt;1~2&amp;#xC7A5;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; DDD&amp;#xC640; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xC8FC;&amp;#xC694; &amp;#xAC1C;&amp;#xB150;&amp;#xACFC; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;&amp;#xB4E4;&amp;#xC744; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xC558;&amp;#xACE0;, 3&amp;#xC7A5;&amp;#xBD80;&amp;#xD130;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC601;&amp;#xC5ED;&amp;#xC744; &amp;#xD070; &amp;#xADF8;&amp;#xB9BC;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC138;&amp;#xBD80; &amp;#xADF8;&amp;#xB9BC;&amp;#xC744; &amp;#xC774;&amp;#xD574;&amp;#xD558;&amp;#xB294; &amp;#xBC95;&amp;#xBD80;&amp;#xD130; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xC5EC; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB97C; &amp;#xAD6C;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xACFC; &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xB300;&amp;#xD558;&amp;#xC5EC; &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xAE4A;&amp;#xAC8C; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;. 4&amp;#xC7A5;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC2E4;&amp;#xC81C; JPA&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xB9E4;&amp;#xD551;&amp;#xACFC; &amp;#xBCA8;&amp;#xB958; &amp;#xB9E4;&amp;#xD551;&amp;#xC744; &amp;#xC9C1;&amp;#xC811; &amp;#xC2E4;&amp;#xC2B5; &amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xB294;&amp;#xB370;, &amp;#xC790;&amp;#xBC14;&amp;#xB85C; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB294; &amp;#xB9E4;&amp;#xD551; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xCF54;&amp;#xD2C0;&amp;#xB9B0; &amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB85C; &amp;#xC62E;&amp;#xACA8;&amp;#xC11C; &amp;#xC791;&amp;#xC131;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB2C8; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xAC78;&amp;#xB9AC;&amp;#xB294; &amp;#xC9C0;&amp;#xC810;&amp;#xC774; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC870;&amp;#xAE08; &amp;#xC2DC;&amp;#xAC04;&amp;#xC744; &amp;#xC18C;&amp;#xBAA8; &amp;#xD560;&amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xC5C8;&amp;#xB2E4;. JPA&amp;#xB97C; &amp;#xACF5;&amp;#xBD80;&amp;#xD558;&amp;#xACE0; &amp;#xBC14;&amp;#xB85C; &amp;#xC774; &amp;#xCC45;&amp;#xC744; &amp;#xBD24;&amp;#xC5C8;&amp;#xB354;&amp;#xB77C;&amp;#xBA74; &amp;#xC880; &amp;#xB354; &amp;#xC5C5;&amp;#xBB34; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC758;&amp;#xBBF8; &amp;#xC788;&amp;#xB294; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xAD6C;&amp;#xC131;&amp;#xACFC; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4; &amp;#xB0BC; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xACA0;&amp;#xB2E4;&amp;#xB294; &amp;#xC544;&amp;#xC26C;&amp;#xC6C0;&amp;#xB3C4; &amp;#xB4E4;&amp;#xAE34; &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC9C0;&amp;#xAE08;&amp;#xC774;&amp;#xB77C;&amp;#xB3C4; &amp;#xBAA8;&amp;#xC790;&amp;#xB780; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xBB34;&amp;#xC5C7;&amp;#xC778;&amp;#xC9C0; &amp;#xD655;&amp;#xC778;&amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC88B;&amp;#xC740; &amp;#xAE30;&amp;#xD68C;&amp;#xC778;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xB098;&amp;#xB984; &amp;#xC218;&amp;#xD655;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3&amp;#xC7A5;
&lt;ul&gt;
&lt;li&gt;&amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704; &amp;#xC9C0;&amp;#xC815;: &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;/&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;
&lt;ul&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB294; &lt;code&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&lt;/code&gt; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xC791;&amp;#xC131;&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC758; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC774;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xB85C; &amp;#xBC30;&amp;#xCE58;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xAC04; &amp;#xC5F0;&amp;#xAD00; &amp;#xAD00;&amp;#xACC4; &amp;#xCC38;&amp;#xC870; &amp;#xC804;&amp;#xB7B5;
&lt;ul&gt;
&lt;li&gt;&amp;#xD544;&amp;#xB4DC; &amp;#xB9E4;&amp;#xD551;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xACBD;&amp;#xACC4;&amp;#xAC00; &amp;#xC560;&amp;#xB9E4;&amp;#xD574;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC74C;&lt;/li&gt;
&lt;li&gt;ID&amp;#xAC12;&amp;#xC744; &amp;#xB9E4;&amp;#xD551;&amp;#xD558;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xBA85;&amp;#xB8CC;&amp;#xD574;&amp;#xC9D0;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xB9E4;&amp;#xD55C; &amp;#xACBD;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC870;&amp;#xD68C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;4&amp;#xC7A5;
&lt;ul&gt;
&lt;li&gt;&amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;(&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB8E8;&amp;#xD2B8;) &amp;#xB9E4;&amp;#xD551;&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC758; &amp;#xC8FC;&amp;#xC694; &amp;#xC5ED;&amp;#xD560;&lt;/li&gt;
&lt;li&gt;&amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xB9E4;&amp;#xD551; &amp;#xBC29;&amp;#xBC95;
&lt;ul&gt;
&lt;li&gt;ID&amp;#xAC12; &amp;#xB9E4;&amp;#xD551;(&lt;span class=&quot;citation&quot; data-cites=&quot;EmbeddedId&quot;&gt;@EmbeddedId&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;&amp;#xCEEC;&amp;#xB809;&amp;#xC158; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xB9E4;&amp;#xD551;(&amp;#xCEEC;&amp;#xB7FC;, &amp;#xD14C;&amp;#xC774;&amp;#xBE14;)&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;citation&quot; data-cites=&quot;Convert&quot;&gt;@Convert&lt;/span&gt;, AttributeConvert&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xCEE8;&amp;#xBC84;&amp;#xD130; &amp;#xC0DD;&amp;#xC131; &amp;#xBC0F; &amp;#xC801;&amp;#xC6A9;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB9E4;&amp;#xD551; &amp;#xC804;&amp;#xB7B5;
&lt;ul&gt;
&lt;li&gt;&amp;#xAC19;&amp;#xC740; &amp;#xB77C;&amp;#xC774;&amp;#xD504;&amp;#xC0AC;&amp;#xC774;&amp;#xD074; &amp;#xB0B4;&amp;#xC5D0; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB77C;&amp;#xBA74; &amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4; &amp;#xB9E4;&amp;#xD551;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xCDA9;&amp;#xBD84;&amp;#xD788; &amp;#xD574;&amp;#xACB0;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Embeddable&lt;/code&gt;, &lt;code&gt;@Embedded&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xBD88;&amp;#xBCC0; &amp;#xAC1D;&amp;#xCCB4; &amp;#xD65C;&amp;#xC6A9; &amp;#xBC0F; &lt;code&gt;@AttributeOverrides&lt;/code&gt;, &lt;code&gt;@AttributeOverride&lt;/code&gt;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD55C; &amp;#xCEEC;&amp;#xB7FC; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC7AC;&amp;#xC9C0;&amp;#xC815; &amp;#xBC0F; &amp;#xB9E4;&amp;#xD551;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xB530;&amp;#xB978; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C; &amp;#xB9E4;&amp;#xD551;
&lt;ul&gt;
&lt;li&gt;&amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB77C;&amp;#xACE0; &amp;#xD558;&amp;#xC5EC; &amp;#xBAA8;&amp;#xB4E0; &amp;#xAC83;&amp;#xC744; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB85C; &amp;#xB9E4;&amp;#xD551; &amp;#xD560; &amp;#xC774;&amp;#xC720;&amp;#xB294; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xB77C;&amp;#xC774;&amp;#xD504;&amp;#xC0AC;&amp;#xC774;&amp;#xD074;&amp;#xC774; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815; &amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xB77C;&amp;#xC774;&amp;#xD504;&amp;#xC0AC;&amp;#xC774;&amp;#xD074;&amp;#xC778;&amp;#xC9C0; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xD655;&amp;#xC2E4;&amp;#xD558;&amp;#xAC8C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB0B4;&amp;#xC5D0; &amp;#xC874;&amp;#xC7AC;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xC9C0; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB294; &amp;#xC815;&amp;#xD655;&amp;#xD55C; &amp;#xD310;&amp;#xB2E8;&amp;#xC744; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@ElementCollection&lt;/code&gt;, &lt;code&gt;@CollectionTable&lt;/code&gt;&amp;#xC744; &amp;#xBCC4;&amp;#xB3C4; &amp;#xD14C;&amp;#xC774;&amp;#xBE14; &amp;#xBCA8;&amp;#xB958; &amp;#xB9E4;&amp;#xD551;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xB85C;&amp;#xB529; &amp;#xC804;&amp;#xB7B5;(Eager/Lazy)
&lt;ul&gt;
&lt;li&gt;N+1&lt;/li&gt;
&lt;li&gt;Eager&amp;#xC640; Lazy&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACE0;&amp;#xBBFC;&lt;/li&gt;
&lt;li&gt;Lazy &amp;#xC0AC;&amp;#xC6A9; &amp;#xC2DC;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xBC94;&amp;#xC704; &amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xC804;&amp;#xD30C;/&amp;#xC2DD;&amp;#xBCC4;&amp;#xC790; &amp;#xC0DD;&amp;#xC131; &amp;#xC804;&amp;#xB7B5;
&lt;ul&gt;
&lt;li&gt;Cascade, orphanRemoval&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/145</guid>
      <comments>https://stylishc.tistory.com/145#entry145comment</comments>
      <pubDate>Mon, 10 Jun 2019 08:24:44 +0900</pubDate>
    </item>
    <item>
      <title>DDD - #2 아키텍처</title>
      <link>https://stylishc.tistory.com/144</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;DDD-2&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.13.11/dist/katex.min.css&quot;&gt;
      
      
      
      &lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/npm/mermaid@8.10.2/dist/mermaid.min.js&quot;&gt;&lt;/script&gt;
      
      
      
      
      
      &lt;style&gt;
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;src:local('Roboto Mono'),local('RobotoMono-Regular'),url(https://fonts.gstatic.com/s/robotomono/v7/L0x5DF4xlVMF-BfR8bXMIjhLq3o.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:300;src:local('Source Sans Pro Light'),local('SourceSansPro-Light'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:400;src:local('Source Sans Pro Regular'),local('SourceSansPro-Regular'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:600;src:local('Source Sans Pro SemiBold'),local('SourceSansPro-SemiBold'),url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format('truetype')}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{color:#34495e;border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(100vh - 61px);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:hsla(0,0%,53%,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:hsla(0,0%,53%,0.1)}.sidebar-toggle{background-color:transparent;background-color:hsla(0,0%,100%,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:hsla(0,0%,100%,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;background-color:#f0f0f0;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;blockquote&gt;
&lt;p&gt;DDD Start&amp;#xC758; 2&amp;#xC7A5; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%84%A4-%EA%B0%9C%EC%9D%98-%EC%98%81%EC%97%AD-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98&quot;&gt;&amp;#xC544;&amp;#xD0A4;&amp;#xD14D;&amp;#xCC98; / &amp;#xB124; &amp;#xAC1C;&amp;#xC758; &amp;#xC601;&amp;#xC5ED;? / &amp;#xACC4;&amp;#xCE35; &amp;#xAD6C;&amp;#xC870; &amp;#xC544;&amp;#xD0A4;&amp;#xD14D;&amp;#xCC98;&lt;/h2&gt;

&lt;p&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xlink=&quot;http://www.w3.org/1999/xlink&quot; contentscripttype=&quot;application/ecmascript&quot; contentstyletype=&quot;text/css&quot; height=&quot;617px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:961px;height:617px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 961 617&quot; width=&quot;961px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1qc9tdav4q6j0&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;&quot; x1=&quot;28&quot; x2=&quot;28&quot; y1=&quot;88.4883&quot; y2=&quot;532.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;&quot; x1=&quot;113&quot; x2=&quot;113&quot; y1=&quot;88.4883&quot; y2=&quot;532.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;&quot; x1=&quot;320&quot; x2=&quot;320&quot; y1=&quot;88.4883&quot; y2=&quot;532.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;&quot; x1=&quot;540.5&quot; x2=&quot;540.5&quot; y1=&quot;88.4883&quot; y2=&quot;532.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;&quot; x1=&quot;742&quot; x2=&quot;742&quot; y1=&quot;88.4883&quot; y2=&quot;532.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;40&quot; x=&quot;5&quot; y=&quot;85.5352&quot;&gt;Client&lt;/text&gt;&lt;ellipse cx=&quot;28&quot; cy=&quot;15&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke:#A80036;stroke-width:2.0;&quot;/&gt;&lt;path d=&quot;M28,23 L28,50 M15,31 L41,31 M28,50 L15,65 M28,50 L41,65 &quot; fill=&quot;none&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; style=&quot;stroke:#A80036;stroke-width:2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;40&quot; x=&quot;5&quot; y=&quot;545.3027&quot;&gt;Client&lt;/text&gt;&lt;ellipse cx=&quot;28&quot; cy=&quot;558.2559&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke:#A80036;stroke-width:2.0;&quot;/&gt;&lt;path d=&quot;M28,566.2559 L28,593.2559 M15,574.2559 L41,574.2559 M28,593.2559 L15,608.2559 M28,593.2559 L41,608.2559 &quot; fill=&quot;none&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; style=&quot;stroke:#A80036;stroke-width:2.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;100&quot; x=&quot;61&quot; y=&quot;53&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;86&quot; x=&quot;68&quot; y=&quot;73.5352&quot;&gt;Presentation&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;100&quot; x=&quot;61&quot; y=&quot;531.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;86&quot; x=&quot;68&quot; y=&quot;552.3027&quot;&gt;Presentation&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;92&quot; x=&quot;272&quot; y=&quot;53&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;78&quot; x=&quot;279&quot; y=&quot;73.5352&quot;&gt;Application&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;92&quot; x=&quot;272&quot; y=&quot;531.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;78&quot; x=&quot;279&quot; y=&quot;552.3027&quot;&gt;Application&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;67&quot; x=&quot;505.5&quot; y=&quot;53&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;53&quot; x=&quot;512.5&quot; y=&quot;73.5352&quot;&gt;Domain&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;67&quot; x=&quot;505.5&quot; y=&quot;531.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;53&quot; x=&quot;512.5&quot; y=&quot;552.3027&quot;&gt;Domain&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;108&quot; x=&quot;686&quot; y=&quot;53&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;94&quot; x=&quot;693&quot; y=&quot;73.5352&quot;&gt;Infrastructure&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1qc9tdav4q6j0)&quot; height=&quot;30.4883&quot; style=&quot;stroke:#A80036;stroke-width:1.5;&quot; width=&quot;108&quot; x=&quot;686&quot; y=&quot;531.7676&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;94&quot; x=&quot;693&quot; y=&quot;552.3027&quot;&gt;Infrastructure&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;101,115.7988,111,119.7988,101,123.7988,105,119.7988&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;28&quot; x2=&quot;107&quot; y1=&quot;119.7988&quot; y2=&quot;119.7988&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;59&quot; x=&quot;35&quot; y=&quot;115.0566&quot;&gt;HTTP &amp;#xC694;&amp;#xCCAD;&lt;/text&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;113&quot; x2=&quot;155&quot; y1=&quot;179.7305&quot; y2=&quot;179.7305&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;155&quot; x2=&quot;155&quot; y1=&quot;179.7305&quot; y2=&quot;192.7305&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;114&quot; x2=&quot;155&quot; y1=&quot;192.7305&quot; y2=&quot;192.7305&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;124,188.7305,114,192.7305,124,196.7305,120,192.7305&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;30&quot; x=&quot;120&quot; y=&quot;144.3672&quot;&gt;[&amp;#xD45C;&amp;#xD604;]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;71&quot; x=&quot;124&quot; y=&quot;159.6777&quot;&gt;- &amp;#xC720;&amp;#xD6A8;&amp;#xC131; &amp;#xAC80;&amp;#xC0AC;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;189&quot; x=&quot;124&quot; y=&quot;174.9883&quot;&gt;- &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4; &amp;#xBCC0;&amp;#xD658;/&amp;#xC0DD;&amp;#xC131;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;308,218.041,318,222.041,308,226.041,312,222.041&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;113&quot; x2=&quot;314&quot; y1=&quot;222.041&quot; y2=&quot;222.041&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;135&quot; x=&quot;120&quot; y=&quot;217.2988&quot;&gt;Application Layer &amp;#xD638;&amp;#xCD9C;&lt;/text&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;320&quot; x2=&quot;362&quot; y1=&quot;281.9727&quot; y2=&quot;281.9727&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;362&quot; x2=&quot;362&quot; y1=&quot;281.9727&quot; y2=&quot;294.9727&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;321&quot; x2=&quot;362&quot; y1=&quot;294.9727&quot; y2=&quot;294.9727&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;331,290.9727,321,294.9727,331,298.9727,327,294.9727&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;30&quot; x=&quot;327&quot; y=&quot;246.6094&quot;&gt;[&amp;#xC751;&amp;#xC6A9;]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;145&quot; x=&quot;331&quot; y=&quot;261.9199&quot;&gt;- &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xD638;&amp;#xCD9C;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;82&quot; x=&quot;331&quot; y=&quot;277.2305&quot;&gt;- &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xC2DC;&amp;#xC791;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;529,335.5938,539,339.5938,529,343.5938,533,339.5938&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;320&quot; x2=&quot;535&quot; y1=&quot;339.5938&quot; y2=&quot;339.5938&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;193&quot; x=&quot;327&quot; y=&quot;319.541&quot;&gt;- &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC870;&amp;#xD68C;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;100&quot; x=&quot;327&quot; y=&quot;334.8516&quot;&gt;- &amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC;/&amp;#xB85C;&amp;#xC9C1; &amp;#xD638;&amp;#xCD9C;&lt;/text&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;541&quot; x2=&quot;583&quot; y1=&quot;399.5254&quot; y2=&quot;399.5254&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;583&quot; x2=&quot;583&quot; y1=&quot;399.5254&quot; y2=&quot;412.5254&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;542&quot; x2=&quot;583&quot; y1=&quot;412.5254&quot; y2=&quot;412.5254&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;552,408.5254,542,412.5254,552,416.5254,548,412.5254&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;41&quot; x=&quot;548&quot; y=&quot;364.1621&quot;&gt;[&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;156&quot; x=&quot;552&quot; y=&quot;379.4727&quot;&gt;- &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xD45C;&amp;#xD604;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;156&quot; x=&quot;552&quot; y=&quot;394.7832&quot;&gt;- &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2F4;&amp;#xB2F9;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;730,453.1465,740,457.1465,730,461.1465,734,457.1465&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;541&quot; x2=&quot;736&quot; y1=&quot;457.1465&quot; y2=&quot;457.1465&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;129&quot; x=&quot;548&quot; y=&quot;437.0938&quot;&gt;&amp;#xAD6C;&amp;#xD604;&amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC740;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;177&quot; x=&quot;548&quot; y=&quot;452.4043&quot;&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD55C;&amp;#xB2E4;.&lt;/text&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;742&quot; x2=&quot;784&quot; y1=&quot;501.7676&quot; y2=&quot;501.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;784&quot; x2=&quot;784&quot; y1=&quot;501.7676&quot; y2=&quot;514.7676&quot;/&gt;&lt;line style=&quot;stroke:#A80036;stroke-width:1.0;&quot; x1=&quot;743&quot; x2=&quot;784&quot; y1=&quot;514.7676&quot; y2=&quot;514.7676&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;753,510.7676,743,514.7676,753,518.7676,749,514.7676&quot; style=&quot;stroke:#A80036;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;181&quot; x=&quot;749&quot; y=&quot;481.7148&quot;&gt;&amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC744; &amp;#xCC45;&amp;#xC784;&amp;#xC9C0;&amp;#xBA70;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;205&quot; x=&quot;749&quot; y=&quot;497.0254&quot;&gt;RDB, NoSQL &amp;#xB4F1; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2E4;&amp;#xB8E8;&amp;#xAC8C; &amp;#xB428;&lt;/text&gt;&lt;!--MD5=[95d1cea7c52de3299c0a148dddfd2721]
@startuml
actor Client as A
participant Presentation as B
participant Application as C
participant Domain as D
participant Infrastructure as I
A -&gt; B : HTTP 요청
B -&gt; B : [표현]\n - 유효성 검사\n - 응용 영역에 필요한 객체 변환/생성

B -&gt; C : Application Layer 호출
C -&gt; C : [응용]\n - 적절한 도메인 서비스 호출 \n - 트랜잭션 시작
C -&gt; D : - 도메인에 필요한 도메인 엔티티 조회 \n- 매소드/로직 호출
D -&gt; D : [도메인]\n - 도메인에 필요한 객체를 표현\n - 도메인에 관련된 구현을 담당
D -&gt; I : 구현기술을 다루는 부분은 \n인프라스트럭쳐 레이어를 참조한다.
I -&gt; I : 구현 기술을 다루는 부분을 책임지며\nRDB, NoSQL 등 실제 구현을 다루게 됨
@enduml

PlantUML version 1.2020.26(Tue Dec 22 02:45:07 KST 2020)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Default Encoding: UTF-8
Language: ko
Country: KR
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/p&gt;&lt;p&gt;&amp;#xC544;&amp;#xD0A4;&amp;#xD14D;&amp;#xCC98;&amp;#xB97C; &amp;#xAD6C;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC694;&amp;#xC18C;&amp;#xB294; &amp;#xD06C;&amp;#xAC8C; 4&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &amp;#xB098;&amp;#xB260; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &lt;code&gt;&amp;#xD45C;&amp;#xD604;&lt;/code&gt;, &lt;code&gt;&amp;#xC751;&amp;#xC6A9;&lt;/code&gt;, &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&lt;/code&gt; &amp;#xBC0F; &lt;code&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98;&lt;/code&gt;&amp;#xB85C; &amp;#xB098;&amp;#xB260; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xAC01; &amp;#xACC4;&amp;#xCE35;&amp;#xBCC4;&amp;#xB85C; &amp;#xAC00;&amp;#xC838;&amp;#xC57C; &amp;#xD560; &amp;#xCC45;&amp;#xC784;&amp;#xC740; &amp;#xC704; &amp;#xB2E4;&amp;#xC774;&amp;#xC5B4;&amp;#xADF8;&amp;#xB7A8;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xD655;&amp;#xC778;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xD45C;&amp;#xD604; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&lt;/strong&gt;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC0AC;&amp;#xC6A9;&amp;#xC790; &amp;#xD639;&amp;#xC740; &amp;#xC678;&amp;#xBD80; &amp;#xD074;&amp;#xB77C;&amp;#xC774;&amp;#xC5B8;&amp;#xD2B8;&amp;#xC758; &amp;#xC694;&amp;#xCCAD;&amp;#xC744; &amp;#xBC1B;&amp;#xB294; &amp;#xCCAB; &amp;#xAD00;&amp;#xBB38;&amp;#xC774;&amp;#xBA70;, &amp;#xD574;&amp;#xB2F9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC694;&amp;#xCCAD;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC720;&amp;#xD6A8;&amp;#xC131; &amp;#xAC80;&amp;#xC0AC; &amp;#xBC0F; &amp;#xC751;&amp;#xC6A9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xD638;&amp;#xCD9C;&amp;#xC744; &amp;#xC704;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4; &amp;#xC0DD;&amp;#xC131; &amp;#xBC0F; &amp;#xBCC0;&amp;#xD658; &amp;#xC791;&amp;#xC5C5;&amp;#xC774; &amp;#xC8FC;&amp;#xB85C; &amp;#xC774;&amp;#xB904;&amp;#xC9C4;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xC751;&amp;#xC6A9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&lt;/strong&gt;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xBA70; &amp;#xB300;&amp;#xBD80;&amp;#xBD84;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; &amp;#xC751;&amp;#xC6A9; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; &amp;#xC2DC;&amp;#xC791;&amp;#xB418;&amp;#xB294; &amp;#xC9C0;&amp;#xC810;&amp;#xC774;&amp;#xB2E4;. &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC9C1;&amp;#xC811; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xC9C4; &amp;#xC54A;&amp;#xC73C;&amp;#xBA70;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC601;&amp;#xC5ED;&amp;#xC758; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xC774;&amp;#xB97C; &amp;#xC704;&amp;#xC784;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&lt;/strong&gt;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xACE0; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xACFC; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&lt;/strong&gt;&amp;#xB294; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xACFC; &amp;#xC544;&amp;#xC8FC; &amp;#xBC00;&amp;#xC811;&amp;#xD55C; &amp;#xC5F0;&amp;#xAD00;&amp;#xC774; &amp;#xC788;&amp;#xB294; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC774;&amp;#xB2E4;. &amp;#xC751;&amp;#xC6A9; &amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xBC0F; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xB294; &amp;#xAD6C;&amp;#xD604;&amp;#xAE30;&amp;#xC220;&amp;#xACFC; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0; &amp;#xC758;&amp;#xC874;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xAC01; &amp;#xACC4;&amp;#xCE35;&amp;#xC740; &amp;#xD45C;&amp;#xD604; -&amp;gt; &amp;#xC751;&amp;#xC6A9; -&amp;gt; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; -&amp;gt; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0; &amp;#xC21C;&amp;#xC73C;&amp;#xB85C; &amp;#xC758;&amp;#xC874;&amp;#xD558;&amp;#xAC8C; &amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xAD6C;&amp;#xD604;&amp;#xC758; &amp;#xD3B8;&amp;#xB9AC;&amp;#xD568;&amp;#xC744; &amp;#xC704;&amp;#xD558;&amp;#xC5EC; &amp;#xC751;&amp;#xC6A9; -&amp;gt; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0; &amp;#xD639;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; -&amp;gt; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC73C;&amp;#xB85C; &amp;#xC758;&amp;#xC874;&amp;#xD560; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#xC751;&amp;#xC6A9;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC774; &amp;#xC9C1;&amp;#xC811;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0; &amp;#xC758;&amp;#xC874;&amp;#xC801;&amp;#xC774;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C0;&amp;#xBA70;, &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xD558;&amp;#xAE30; &amp;#xC5B4;&amp;#xB824;&amp;#xC6CC;&amp;#xC9C0;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xC810;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &lt;strong&gt;DIP&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC800;&amp;#xC218;&amp;#xC900;&amp;#xC758; &amp;#xAD6C;&amp;#xD604; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774; &amp;#xACE0;&amp;#xC218;&amp;#xC900;&amp;#xC758; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC5D0; &amp;#xC758;&amp;#xC874;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xC5EC; &amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xB97C; &amp;#xD574;&amp;#xACB0;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC2E4;&amp;#xB9C8;&amp;#xB9AC;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC900;&amp;#xB2E4;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;dip&quot;&gt;DIP&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#xAC1D;&amp;#xCCB4;&amp;#xC9C0;&amp;#xD5A5; &amp;#xC6D0;&amp;#xCE59; SOLID&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; DIP&lt;br&gt;
&amp;#xCD94;&amp;#xC0C1;&amp;#xC744; &amp;#xB9E4;&amp;#xAC1C;(&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;)&amp;#xB85C; &amp;#xBA54;&amp;#xC2DC;&amp;#xC9C0;&amp;#xB97C; &amp;#xC8FC;&amp;#xACE0; &amp;#xBC1B;&amp;#xC74C;(&amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD638;&amp;#xCD9C;)&amp;#xC73C;&amp;#xB85C;&amp;#xC368; &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xCD5C;&amp;#xB300;&amp;#xD55C; &amp;#xB290;&amp;#xC2A8;(&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD568;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xAD6C;&amp;#xD604;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xC6A9;&amp;#xC774;)&amp;#xD558;&amp;#xAC8C; &amp;#xB9CC;&amp;#xB4DC;&amp;#xB294; &amp;#xC6D0;&amp;#xCE59;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%9B%90%EC%B9%99#s-2.5&quot;&gt;&amp;#xB098;&amp;#xBB34;&amp;#xC704;&amp;#xD0A4;, &amp;#xAC1D;&amp;#xCCB4; &amp;#xC9C0;&amp;#xD5A5; &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; &amp;#xC6D0;&amp;#xCE59; &amp;#xC911; DIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nextree.co.kr/p6960/&quot;&gt;Nextree, DIP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;DIP&amp;#xB97C; &amp;#xC801;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xACFC; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xC885;&amp;#xC18D;&amp;#xC131;&amp;#xC744; &amp;#xC27D;&amp;#xAC8C; &amp;#xC81C;&amp;#xAC70;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC800;&amp;#xC218;&amp;#xC900;&amp;#xC758; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774; &amp;#xACE0;&amp;#xC218;&amp;#xC900;&amp;#xC758; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC744; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xAD6C;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;. &amp;#xC989; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC2E4;&amp;#xC81C; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xC758; &amp;#xAD6C;&amp;#xD604; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC774; &amp;#xC5B4;&amp;#xB5A4; &amp;#xC885;&amp;#xB958;&amp;#xC758; &amp;#xAC83;&amp;#xC778;&amp;#xC9C0;&amp;#xC640; &amp;#xC0C1;&amp;#xAD00;&amp;#xC5C6;&amp;#xC774; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0;&amp;#xC11C; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAE30;&amp;#xB2A5; &amp;#xC790;&amp;#xCCB4;&amp;#xC5D0;&amp;#xB9CC; &amp;#xC9D1;&amp;#xC911;&amp;#xD55C; &amp;#xD45C;&amp;#xD604;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;div class=&quot;mermaid&quot;&gt;graph LR
CalculateDiscountService --&amp;gt; RuleDiscounter
RuleDiscounter --&amp;gt; RDB/JPA
RuleDiscounter --&amp;gt; SearchEngine
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC704; &amp;#xC774;&amp;#xBBF8;&amp;#xC9C0;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB4EF;&amp;#xC774; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; RDB&amp;#xB85C; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB358;&amp;#xC9C0;, &amp;#xAC80;&amp;#xC0C9;&amp;#xC5D4;&amp;#xC9C4;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB358;&amp;#xC9C0; &amp;#xC774;&amp;#xB294; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xACE0;&amp;#xC790; &amp;#xD558;&amp;#xB294; &lt;code&gt;&amp;#xAC00;&amp;#xACA9;&amp;#xD560;&amp;#xC778;&lt;/code&gt;&amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xBAA9;&amp;#xC801;&amp;#xC5D0;&amp;#xB9CC; &amp;#xC9D1;&amp;#xC911; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD568;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC2E4;&amp;#xC81C; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xCF54;&amp;#xB4DC; &amp;#xC791;&amp;#xC131; &amp;#xC2DC;, &amp;#xC27D;&amp;#xAC8C; &amp;#xBAA9;(Mock) &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70; &amp;#xB610;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604; &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xB530;&amp;#xB978; &amp;#xBD80;&amp;#xB2F4;&amp;#xC774; &amp;#xC904;&amp;#xAC8C; &amp;#xB420; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC704; &amp;#xC124;&amp;#xBA85;&amp;#xC5D0;&amp;#xC11C; &amp;#xB9D0;&amp;#xD558;&amp;#xB294; &amp;#xC800;&amp;#xC218;&amp;#xC900;&amp;#xACFC; &amp;#xACE0;&amp;#xC218;&amp;#xC900;&amp;#xC744; &amp;#xB098;&amp;#xB204;&amp;#xB294; &amp;#xAE30;&amp;#xC900;&amp;#xC740; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC5D0; &amp;#xC880; &amp;#xB354; &amp;#xD2B9;&amp;#xD654;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB294; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; &amp;#xC800;&amp;#xC218;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xD310;&amp;#xB2E8;&amp;#xD558;&amp;#xBA70;, &amp;#xC751;&amp;#xC6A9; &amp;#xD639;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC740; &amp;#xACE0;&amp;#xC218;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xBD84;&amp;#xB958;&amp;#xD55C;&amp;#xB2E4;.&lt;br&gt;
&amp;#xC2E4;&amp;#xC81C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0;&amp;#xC11C; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xCD94;&amp;#xC0C1;&amp;#xD654; &amp;#xB41C; &amp;#xC751;&amp;#xC6A9; &amp;#xD639;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC744; &amp;#xACE0;&amp;#xC218;&amp;#xC900;&amp;#xC758; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xBCF4;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xD0C0;&amp;#xB2F9;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xC2E4;&amp;#xC81C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC774; &amp;#xD574;&amp;#xACB0;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xBB38;&amp;#xC81C;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCD94;&amp;#xC0C1;&amp;#xD654;&amp;#xAC00; &amp;#xC774;&amp;#xB904;&amp;#xC9C0;&amp;#xB294; &amp;#xAD6C;&amp;#xAC04;&amp;#xC815;&amp;#xB3C4;&amp;#xB85C; &amp;#xC694;&amp;#xC57D;&amp;#xD558;&amp;#xBA74; &amp;#xC88B;&amp;#xC744;&amp;#xAEBC; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;DDD Start 59P &amp;#xC911; &amp;#xC77C;&amp;#xBD80;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98;&amp;#xC5D0; &amp;#xC704;&amp;#xCE58;&amp;#xD55C; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC774;&amp;#xB098; &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xC815;&amp;#xC758;&amp;#xD55C; &lt;code&gt;&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&lt;/code&gt;&amp;#xB97C; &amp;#xC0C1;&amp;#xC18D;&amp;#xBC1B;&amp;#xC544; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xAD6C;&amp;#xC870;&amp;#xAC00; &amp;#xB418;&amp;#xBBC0;&amp;#xB85C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xACFC; &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xC8FC;&amp;#xC9C0; &amp;#xC54A;&amp;#xAC70;&amp;#xB098; &amp;#xCD5C;&amp;#xC18C;&amp;#xD654;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%98%81%EC%97%AD%EC%9D%98-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C%EB%8A%94&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC601;&amp;#xC5ED;&amp;#xC758; &amp;#xAD6C;&amp;#xC131;&amp;#xC694;&amp;#xC18C;&amp;#xB294;?&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&amp;#xC694;&amp;#xC18C;&lt;/th&gt;
&lt;th&gt;&amp;#xC124;&amp;#xBA85;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;. &amp;#xB77C;&amp;#xC774;&amp;#xD504; &amp;#xC0AC;&amp;#xC774;&amp;#xD074;&amp;#xC744; &amp;#xAC00;&amp;#xC9C4;&amp;#xB2E4;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;#xBCA8;&amp;#xB958;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;#xC644;&amp;#xC804;&amp;#xD55C; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xAC12;&amp;#xC744; &amp;#xD45C;&amp;#xD604;. &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC18D;&amp;#xC131;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBAA9;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC8FC;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC9D1;&amp;#xD569;&amp;#xC744; &amp;#xAC00;&amp;#xB9AC;&amp;#xD0A8;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC640; &amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xAC1C;&amp;#xB150;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xB098;&amp;#xB85C; &amp;#xBB36;&amp;#xC5B4; &amp;#xB193;&amp;#xC740; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xC601;&amp;#xC18D;&amp;#xC131;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&amp;#xD55C;&amp;#xB2E4;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;#xD2B9;&amp;#xC815; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0; &amp;#xC885;&amp;#xC18D;&amp;#xC801;&amp;#xC774;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xC124;&amp;#xBA85;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xAD6C;&amp;#xC870;&amp;#xB85C; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info class=&quot;language-&quot;&gt;&lt;code&gt;|-- order
    |-- domain
        |-- Order(Aggregate, Root-Entity)
        |-- OrderLine(Entity)
        |-- Orderer(Entity)
        |-- OrderRepository(Repository)
        |-- Address(Value)
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;DB &amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC758; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/code&gt; vs &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/code&gt;&lt;br&gt;
&amp;#xAC00;&amp;#xC7A5; &amp;#xD070; &amp;#xCC28;&amp;#xC774;&amp;#xC810;&amp;#xC740; &amp;#xBC14;&amp;#xB85C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC640; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xD568;&amp;#xAED8; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;. &amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC758; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB294; &amp;#xB9D0; &amp;#xADF8;&amp;#xB300;&amp;#xB85C; &amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB9CC;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xBE44;&amp;#xC2B7;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xBBF8;&amp;#xBB18;&amp;#xD558;&amp;#xAC8C; &amp;#xB2E4;&amp;#xB978; &amp;#xC9C0;&amp;#xC810;&amp;#xC774; &amp;#xC0DD;&amp;#xAE30;&amp;#xB294;&amp;#xB370;, &amp;#xC5EC;&amp;#xAE30;&amp;#xC11C; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC911;&amp;#xC2EC;&amp;#xC744; &amp;#xC7A1;&amp;#xACE0; &amp;#xC54C;&amp;#xC544;&amp;#xC57C; &amp;#xD560; &amp;#xC0AC;&amp;#xC2E4;&amp;#xC740; &amp;#xBC14;&amp;#xB85C; &lt;strong&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC740; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC640; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xD568;&amp;#xAED8; &amp;#xD45C;&amp;#xD604;&amp;#xD55C;&amp;#xB2E4;&amp;#xB294; &amp;#xC810;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC758; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xC9D1;&amp;#xC911;&amp;#xD558;&amp;#xC5EC; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xBA74; &amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xB9D0;&amp;#xD55C;&amp;#xB300;&amp;#xB85C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xC73C;&amp;#xBA70; &amp;#xB610;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xAD00;&amp;#xC810;&amp;#xC5D0;&amp;#xC11C; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xB193;&amp;#xC740; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC774;&amp;#xB2E4;. &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xCCA0;&amp;#xC800;&amp;#xD558;&amp;#xAC8C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAD00;&amp;#xC810;&amp;#xC5D0;&amp;#xC11C; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xBA70; &amp;#xC784;&amp;#xC758;&amp;#xB85C; &amp;#xD574;&amp;#xB2F9; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xC0C1;&amp;#xD0DC; &amp;#xAC12;&amp;#xC774; &amp;#xBCC0;&amp;#xACBD;&amp;#xB418;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xBA74; &amp;#xC548;&amp;#xB41C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB97C; &amp;#xB2EC;&amp;#xC131;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC810;&amp;#xC744; &amp;#xBA85;&amp;#xC2EC;&amp;#xD558;&amp;#xBA74; &amp;#xC88B;&amp;#xC744;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;#xC138;&amp;#xD130;(setter)&amp;#xC758; &amp;#xC9C0;&amp;#xC591;&lt;/strong&gt;&lt;/em&gt;, &amp;#xBB34;&amp;#xBD84;&amp;#xBCC4;&amp;#xD55C; &amp;#xC0C1;&amp;#xD0DC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC740; &lt;code&gt;&amp;#xC9C0;&amp;#xC591;&lt;/code&gt;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xBA70;, &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4; &lt;code&gt;private&lt;/code&gt; &amp;#xC811;&amp;#xADFC;&amp;#xC790;&amp;#xB97C; &amp;#xD560;&amp;#xB2F9;&amp;#xD558;&amp;#xBA70; &amp;#xC678;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &amp;#xC811;&amp;#xADFC;&amp;#xC774; &amp;#xC548;&amp;#xB418;&amp;#xB3C4;&amp;#xB85D; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; &amp;#xC0DD;&amp;#xC131; &amp;#xC2DC;, &lt;code&gt;&amp;#xC815;&amp;#xC801; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xB9E4;&amp;#xC11C;&amp;#xB4DC;&lt;/code&gt; &amp;#xD639;&amp;#xC740; &lt;code&gt;&amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&lt;/strong&gt;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC0DD;&amp;#xC131;&amp;#xC740; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC644;&amp;#xC804;&amp;#xD55C; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB85C; &amp;#xC774;&amp;#xB904;&amp;#xC838;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC0DD;&amp;#xC131; &amp;#xADDC;&amp;#xCE59; &amp;#xC77C;&amp;#xC815;&amp;#xD558;&amp;#xB2E4;&amp;#xBA74; &lt;code&gt;&amp;#xC815;&amp;#xC801; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&lt;/code&gt;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774; &amp;#xC88B;&amp;#xACE0;, &amp;#xB9CC;&amp;#xC57D; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xADDC;&amp;#xCE59;&amp;#xC774; &amp;#xB2E4;&amp;#xC591;&amp;#xD558;&amp;#xBA74; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &lt;code&gt;&amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&lt;/code&gt;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC88B;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;#xC758;&amp;#xBBF8; &amp;#xD639;&amp;#xC740; &amp;#xAC1C;&amp;#xB150;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xB098;&amp;#xB85C; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xBA74; &lt;code&gt;&amp;#xBCA8;&amp;#xB958;(Value)&lt;/code&gt; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC801;&amp;#xADF9;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xB294;&amp;#xAC8C; &amp;#xC88B;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xC774;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC740; &amp;#xBD88;&amp;#xBCC0;(Immutable)&amp;#xD55C; &amp;#xC811;&amp;#xADFC;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xAC1D;&amp;#xCCB4; &amp;#xC790;&amp;#xCCB4;&amp;#xB97C; &amp;#xC644;&amp;#xC804;&amp;#xD788; &amp;#xAD50;&amp;#xCCB4;&amp;#xD558;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&amp;#xC744; &amp;#xCDE8;&amp;#xD558;&amp;#xC790;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B1%B0%ED%8A%B8aggregate&quot;&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;(Aggregate)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xBE44;&amp;#xC2B7;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xC0C1;&amp;#xC704; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C; &amp;#xC811;&amp;#xADFC;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &lt;em&gt;&lt;strong&gt;&amp;#xC5F0;&amp;#xAD00;/&amp;#xAD00;&amp;#xB828; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xD558;&amp;#xB098;&amp;#xB85C; &amp;#xBB36;&amp;#xC740; &amp;#xAD70;&amp;#xC9D1;.&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4;, &amp;#xC8FC;&amp;#xBB38;&amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC740; &amp;#xBC30;&amp;#xC1A1;&amp;#xC9C0;, &amp;#xC8FC;&amp;#xBB38;&amp;#xC790;, &amp;#xC8FC;&amp;#xBB38; &amp;#xBAA9;&amp;#xB85D; &amp;#xB4F1;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xBAA8;&amp;#xB378;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&amp;#xB418;&amp;#xB294;&amp;#xB370; &amp;#xC774; &amp;#xBAA8;&amp;#xB4E0; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xAD70;&amp;#xC9D1; &amp;#xD615;&amp;#xD0DC;&amp;#xB85C; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xC5EC; &lt;code&gt;&amp;#xC8FC;&amp;#xBB38;&lt;/code&gt;&amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xC0C1;&amp;#xC704; &amp;#xAC1C;&amp;#xB150;&amp;#xC73C;&amp;#xB85C; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00;&amp;#xB41C; &amp;#xAC1D;&amp;#xCCB4;/&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xAD00;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC640; &amp;#xBCA8;&amp;#xB958; &amp;#xB4F1;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0;&amp;#xC11C; &amp;#xD45C;&amp;#xD604;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xD639;&amp;#xC740; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD558;&amp;#xC704; &amp;#xAC1D;&amp;#xCCB4; &amp;#xD639;&amp;#xC740; &amp;#xBCA8;&amp;#xB958;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC811;&amp;#xADFC;&amp;#xC740; &amp;#xB8E8;&amp;#xD2B8; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xAC04;&amp;#xC811;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC774;&amp;#xB904;&amp;#xC838;&amp;#xC57C; &amp;#xD558;&amp;#xBA70;, &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xB0B4;&amp;#xBD80;&amp;#xB85C; &amp;#xC228;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xCEA1;&amp;#xC290;&amp;#xD654;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xB3D5;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%A0%88%ED%8C%8C%EC%A7%80%ED%86%A0%EB%A6%ACrepository&quot;&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;(Repository)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC704;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&lt;/strong&gt;&amp;#xB85C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xC788;&amp;#xAC8C; &amp;#xC989;, &amp;#xC9C0;&amp;#xC18D;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB824;&amp;#xBA74; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xBCF4;&amp;#xAD00;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7F0; &amp;#xBCF4;&amp;#xAD00;&amp;#xC744; &amp;#xC704;&amp;#xD558;&amp;#xC5EC; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xBC14;&amp;#xB85C; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC800;&amp;#xC7A5;&amp;#xC740; &amp;#xC8FC;&amp;#xB85C; RDB, NoSQL &amp;#xB4F1;&amp;#xC758; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC8FC;&amp;#xB85C;, &lt;em&gt;&lt;strong&gt;&amp;#xC5D0;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC800;&amp;#xC7A5;&amp;#xD558;&amp;#xACE0; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB294; &amp;#xC8FC;&amp;#xB85C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xC18D;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA70;, &amp;#xD574;&amp;#xB2F9; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xC758; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB294; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604; &amp;#xAE30;&amp;#xC220;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0; &amp;#xC18D;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;#xC751;&amp;#xC6A9;&amp;#xC601;&amp;#xC5ED;&amp;#xACFC; &amp;#xBC00;&amp;#xC811;&amp;#xD55C; &amp;#xAD00;&amp;#xB828;&lt;/em&gt;&amp;#xC774; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xC800;&amp;#xC7A5; &amp;#xD560;&amp;#xB54C; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB97C; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xC751;&amp;#xC6A9; &amp;#xC601;&amp;#xC5ED;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xAD00;&amp;#xB9AC;&amp;#xB294; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xAE30;&amp;#xC220;&amp;#xC5D0; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%9D%B8%ED%94%84%EB%9D%BC%EC%8A%A4%ED%8A%B8%EB%9F%AD%EC%B2%98&quot;&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xD45C;&amp;#xD604;, &amp;#xC751;&amp;#xC6A9;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xC601;&amp;#xC5ED;&amp;#xC744; &amp;#xC9C0;&amp;#xC6D0;&amp;#xD558;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xC218;&amp;#xD589;&lt;/li&gt;
&lt;li&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xC124;&amp;#xBA85;&amp;#xD55C; DIP&amp;#xCC98;&amp;#xB7FC;, &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCC98; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC758; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xBC14;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xCC38;&amp;#xC870;/&amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xD558;&amp;#xAE30; &amp;#xC27D;&amp;#xAC8C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC8FC;&amp;#xBA70; &amp;#xBCC0;&amp;#xACBD;&amp;#xC5D0; &amp;#xC6A9;&amp;#xC774;&amp;#xD558;&amp;#xAC8C; &amp;#xD574;&amp;#xC900;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%AA%A8%EB%93%88-%EA%B5%AC%EC%84%B1%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B5%AC%EC%A1%B0%EB%8A%94&quot;&gt;&amp;#xBAA8;&amp;#xB4C8; &amp;#xAD6C;&amp;#xC131;/&amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xAD6C;&amp;#xC870;&amp;#xB294;?&lt;/h2&gt;

&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%98%81%EC%97%AD%EB%B3%84%EB%A1%9C-%EA%B5%AC%EC%84%B1&quot;&gt;&amp;#xC601;&amp;#xC5ED;&amp;#xBCC4;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC751;&amp;#xC6A9;/&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC5F0;&amp;#xAD00; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;/&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB07C;&amp;#xB9AC; &amp;#xBB36;&amp;#xC5B4;&amp;#xC11C; &amp;#xB2E4;&amp;#xC2DC; &amp;#xD328;&amp;#xD0A4;&amp;#xC9D5;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info class=&quot;language-&quot;&gt;&lt;code&gt;|-- presentation
|-- domain
    |-- order
    |-- member
|-- application
    |-- order
    |-- member
|-- infrastructure
&lt;/code&gt;&lt;/pre&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8%EB%B3%84%EB%A1%9C-%EA%B5%AC%EC%84%B1&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xBCC4;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC774; &amp;#xD06C;&amp;#xB2E4;&amp;#xBA74; &amp;#xC11C;&amp;#xBE0C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;(&amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;)&amp;#xBCC4;&amp;#xB85C; &amp;#xB098;&amp;#xB258;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info class=&quot;language-&quot;&gt;&lt;code&gt;|-- order
    |-- presentation
    |-- domain
    |-- application
    |-- infrastructure
|-- member
    |-- presentation
    |-- domain
    |-- application
    |-- infrastructure
&lt;/code&gt;&lt;/pre&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C%EC%9D%98-%EC%9D%BC%EB%B0%98-%EA%B5%AC%EC%A1%B0%EB%8A%94&quot;&gt;Spring &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC77C;&amp;#xBC18; &amp;#xAD6C;&amp;#xC870;&amp;#xB294;?&lt;/h3&gt;

&lt;p&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xC815;&amp;#xB9AC;&amp;#xD55C; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xAD6C;&amp;#xC870;/&amp;#xBA85;&amp;#xCE6D;&amp;#xC744; &amp;#xADF8;&amp;#xB300;&amp;#xB85C; &amp;#xB530;&amp;#xB77C;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xC740; &amp;#xC811;&amp;#xADFC;&amp;#xC774;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC5EC;&amp;#xD0DC;&amp;#xAE4C;&amp;#xC9C0; &amp;#xACAA;&amp;#xC5B4;&amp;#xBD24;&amp;#xB358; &amp;#xAD6C;&amp;#xC870;&amp;#xB3C4; &amp;#xD55C;&amp;#xBC88; &amp;#xB2E4;&amp;#xC2DC; &amp;#xC815;&amp;#xB9AC;&amp;#xD574;&amp;#xBCF4;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xC744;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xC544;&amp;#xB798;&amp;#xC5D0; &amp;#xAE30;&amp;#xC220;&amp;#xD574;&amp;#xBD24;&amp;#xB2E4;.&lt;/p&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EB%A0%88%EC%9D%B4%EC%96%B4-%ED%8C%A8%ED%82%A4%EC%A7%80-%EB%8B%A8%EC%9C%84-%EA%B5%AC%EC%A1%B0&quot;&gt;&amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xB2E8;&amp;#xC704; &amp;#xAD6C;&amp;#xC870;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&lt;/li&gt;
&lt;li&gt;&amp;#xAC1C;&amp;#xC778;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xD300;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xAC00;&amp;#xC774;&amp;#xB4DC;&amp;#xAC00; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;&amp;#xBA74; &amp;#xC120;&amp;#xD638;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB2E4;. &amp;#xC65C;&amp;#xB0D0;&amp;#xD558;&amp;#xBA74;, &amp;#xBB34;&amp;#xBD84;&amp;#xBCC4;&amp;#xD55C; DI&amp;#xAC00; &amp;#xC27D;&amp;#xAC8C; &amp;#xBC1C;&amp;#xC0DD; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xAC01; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774; &amp;#xAD00;&amp;#xC2EC;&amp;#xC0AC;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC758; &amp;#xBAA8;&amp;#xB4C8;&amp;#xC774;&amp;#xB098; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC27D;&amp;#xAC8C; &amp;#xCC38;&amp;#xC870;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB418;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info class=&quot;language-&quot;&gt;&lt;code&gt;|-- controller
|-- service
|-- repository
|-- model
|-- config
|-- Application.java
&lt;/code&gt;&lt;/pre&gt;&lt;h4 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%8B%A8%EC%9C%84%EC%9D%98-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B5%AC%EC%A1%B0&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB2E8;&amp;#xC704;&amp;#xC758; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xAD6C;&amp;#xC870;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xAD00;&amp;#xC2EC; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xBCC4;&amp;#xB85C; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0; &amp;#xAD6C;&amp;#xC870;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&lt;/li&gt;
&lt;li&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC5B8;&amp;#xAE09;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xB300;&amp;#xB85C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xBCC4;&amp;#xB85C; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xAC1C;&amp;#xC218;&amp;#xAC00; &amp;#xB298;&amp;#xC5B4;&amp;#xB098;&amp;#xAC70;&amp;#xB098; &amp;#xAD00;&amp;#xC2EC;&amp;#xC0AC;&amp;#xBCC4;&amp;#xB85C; &amp;#xB2E4;&amp;#xC2DC; &amp;#xBD84;&amp;#xB9AC;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xD328;&amp;#xD0A4;&amp;#xC9C0;&amp;#xB0B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xB2E4;&amp;#xC2DC; &amp;#xBD84;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xC804;&amp;#xB7B5;&amp;#xB3C4; &amp;#xCDE8;&amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info class=&quot;language-&quot;&gt;&lt;code&gt;|-- order
    |-- OrderController.java
    |-- OrderService.java
    |-- OrderRepository.java
    |-- Order.java
    |-- OrderLine.java
    |-- Orderer.java
|-- member
|-- config
|-- Application.java
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&amp;#xACB0;&amp;#xAD6D; &amp;#xB808;&amp;#xC774;&amp;#xC5B4; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xB450;&amp;#xB290;&amp;#xB0D0; &amp;#xC544;&amp;#xB2C8;&amp;#xBA74; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xB450;&amp;#xB290;&amp;#xB0D0;&amp;#xB294; &amp;#xAC19;&amp;#xC774; &amp;#xD504;&amp;#xB85C;&amp;#xC81D;&amp;#xD2B8;&amp;#xB97C; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xB294; &amp;#xAD6C;&amp;#xC131;&amp;#xC6D0;&amp;#xB4E4;&amp;#xC758; &amp;#xD638;&amp;#xBD88;&amp;#xD638;&amp;#xC5D0; &amp;#xC758;&amp;#xD574;&amp;#xC11C;&amp;#xB3C4; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xACE0;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xBCC4;&amp;#xB85C; &amp;#xC0C1;&amp;#xD638;&amp;#xAC04;&amp;#xC5D0; &amp;#xCC38;&amp;#xC870;&amp;#xAC00; &amp;#xC544;&amp;#xC608; &amp;#xC548;&amp;#xB418;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC778;&amp;#xC9C0; &amp;#xC544;&amp;#xB2CC;&amp;#xC9C0; &amp;#xC720;&amp;#xBB34;&amp;#xB3C4; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBB34;&amp;#xBD84;&amp;#xBCC4;&amp;#xD558;&amp;#xAC8C; &amp;#xC5B4;&amp;#xB5A4; &amp;#xC811;&amp;#xADFC;&amp;#xC774; &amp;#xB9DE;&amp;#xB2E4;&amp;#xB294; &amp;#xC758;&amp;#xACAC;&amp;#xBCF4;&amp;#xB2E4;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xACFC; &amp;#xC694;&amp;#xAD6C;&amp;#xC0AC;&amp;#xD56D; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xD300;&amp;#xC6D0;&amp;#xB4E4;&amp;#xC758; &amp;#xC774;&amp;#xD574;&amp;#xB3C4;&amp;#xC5D0; &amp;#xC9D1;&amp;#xC911;&amp;#xD558;&amp;#xC5EC; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xD560;&amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;

      &lt;/div&gt;
      
      
    
    
    &lt;script&gt;
// config mermaid init call
// http://knsv.github.io/mermaid/#configuration
//
// You can edit the 'MERMAID_CONFIG' variable below.
MERMAID_CONFIG = {
  startOnLoad: false
}

if (window['MERMAID_CONFIG']) {
  window['MERMAID_CONFIG'].startOnLoad = false
  window['MERMAID_CONFIG'].cloneCssStyles = false
  window['MERMAID_CONFIG'].theme = &quot;default&quot;
}
mermaid.initialize(window['MERMAID_CONFIG'] || {})
if (typeof(window['Reveal']) !== 'undefined') {
  function mermaidRevealHelper(event) {
    var currentSlide = event.currentSlide
    var diagrams = currentSlide.querySelectorAll('.mermaid')
    for (var i = 0; i &lt; diagrams.length; i++) {
      var diagram = diagrams[i]
      if (!diagram.hasAttribute('data-processed')) {
        mermaid.init(null, diagram, ()=&gt; {
          Reveal.slide(event.indexh, event.indexv)
        })
      }
    }
  }
  Reveal.addEventListener('slidechanged', mermaidRevealHelper)
  Reveal.addEventListener('ready', mermaidRevealHelper)
} else {
  mermaid.init(null, document.getElementsByClassName('mermaid'))
}
&lt;/script&gt;
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/144</guid>
      <comments>https://stylishc.tistory.com/144#entry144comment</comments>
      <pubDate>Sat, 8 Jun 2019 20:55:19 +0900</pubDate>
    </item>
    <item>
      <title>DDD - #1 도메인</title>
      <link>https://stylishc.tistory.com/143</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;DDD_#1&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;blockquote&gt;
&lt;p&gt;DDD Start&amp;#xC758; 1&amp;#xC7A5; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC815;&amp;#xB9AC;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&amp;#xC18C;&amp;#xD504;&amp;#xD2B8;&amp;#xC6E8;&amp;#xC5B4;&amp;#xB85C; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xB824;&amp;#xACE0; &amp;#xD558;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xC758; &amp;#xC601;&amp;#xC5ED;.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC740; &amp;#xB2E4;&amp;#xC2DC; &amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC73C;&amp;#xB85C; &amp;#xB098;&amp;#xB20C; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB807;&amp;#xAC8C; &amp;#xB098;&amp;#xB220;&amp;#xB193;&amp;#xC740; &amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xB07C;&amp;#xB9AC; &amp;#xC5F0;&amp;#xB3D9;&amp;#xD558;&amp;#xC5EC; &amp;#xC644;&amp;#xC804;&amp;#xD55C; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC774;&amp;#xB807;&amp;#xAC8C; &amp;#xBB38;&amp;#xC81C;&amp;#xC758; &amp;#xC601;&amp;#xC5ED;&amp;#xC744; &amp;#xD574;&amp;#xACB0;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC5D0;&amp;#xC11C; &amp;#xAF2D; &amp;#xBAA8;&amp;#xB4E0; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC18C;&amp;#xD504;&amp;#xD2B8;&amp;#xC6E8;&amp;#xC5B4;&amp;#xB85C; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xD544;&amp;#xC694;&amp;#xB294; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xC989;, &amp;#xD574;&amp;#xB2F9; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0;&amp;#xC11C; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC678;&amp;#xBD80; &amp;#xC5C5;&amp;#xCCB4; &amp;#xB610;&amp;#xB294; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC5F0;&amp;#xB3D9; &amp;#xD560; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&amp;#xBB38;&amp;#xC81C; &amp;#xC601;&amp;#xC5ED;&amp;#xC744; &amp;#xAC1C;&amp;#xB150;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD45C;&amp;#xD604;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xC5EC;&amp;#xB7EC; &amp;#xC774;&amp;#xD574; &amp;#xB2F9;&amp;#xC0AC;&amp;#xC790;&amp;#xAC00; &amp;#xC774;&amp;#xD574;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xAC1C;&amp;#xB150;&amp;#xC801; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xB2E8;&amp;#xC21C;&amp;#xD788; &amp;#xAD6C;&amp;#xD604; &amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xBAA8;&amp;#xB378;&amp;#xC774; &amp;#xC544;&amp;#xB2CC;, &amp;#xC5EC;&amp;#xB7EC; &amp;#xC774;&amp;#xD574; &amp;#xB2F9;&amp;#xC0AC;&amp;#xC790;&amp;#xAC00; &amp;#xC774;&amp;#xD574;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBAA8;&amp;#xB378;&amp;#xB85C;&amp;#xC11C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC758;&amp;#xBBF8;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &amp;#xD574;&amp;#xB2F9; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C;, &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;
&lt;ul&gt;
&lt;li&gt;UML, &amp;#xADF8;&amp;#xB798;&amp;#xD504; &amp;#xB4F1; &amp;#xAC00;&amp;#xC7A5; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xC54C;&amp;#xB9DE;&amp;#xB294; &amp;#xD45C;&amp;#xD604;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xAD6C;&amp;#xD604; &amp;#xBAA8;&amp;#xB378;&amp;#xC740; &amp;#xAC1C;&amp;#xB150; &amp;#xBAA8;&amp;#xB378;&amp;#xACFC; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xAC1C;&amp;#xB150; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xCD5C;&amp;#xB300;&amp;#xD55C; &amp;#xB530;&amp;#xB974;&amp;#xB3C4;&amp;#xB85D; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC740; &amp;#xC5EC;&amp;#xB7EC; &amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC73C;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131; &amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC774; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xC601;&amp;#xC5ED;&amp;#xBCC4;&amp;#xB85C; &amp;#xAC19;&amp;#xC740; &amp;#xD639;&amp;#xC2DC; &amp;#xBE44;&amp;#xC2B7;&amp;#xD55C; &amp;#xC6A9;&amp;#xC5B4;&amp;#xB3C4; &amp;#xB2E4;&amp;#xB974;&amp;#xAC8C; &amp;#xD574;&amp;#xC11D;&amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xC5EC;&amp;#xB7EC; &amp;#xD558;&amp;#xC704; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xD558;&amp;#xB098;&amp;#xC758; &amp;#xD45C;&amp;#xD604; &amp;#xBAA8;&amp;#xB378;&amp;#xB85C; &amp;#xBAA8;&amp;#xB378;&amp;#xB9C1;&amp;#xD558;&amp;#xBA74; &amp;#xD63C;&amp;#xC120;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC88B;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xBC29;&amp;#xBC95;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8-%ED%8C%A8%ED%84%B4&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378; &amp;#xD328;&amp;#xD134;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xD45C;&amp;#xD604;(Presentation)&lt;br&gt;
&amp;#xC0AC;&amp;#xC6A9;&amp;#xC790;&amp;#xC758; &amp;#xC694;&amp;#xCCAD;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;, &amp;#xC5EC;&amp;#xAE30;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC790;&amp;#xB294; &amp;#xC2E4; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC790; &amp;#xD639;&amp;#xC740; &amp;#xC678;&amp;#xBD80; &amp;#xC2DC;&amp;#xC2A4;&amp;#xD15C;&amp;#xC774; &amp;#xB420; &amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC751;&amp;#xC6A9;(Application)&lt;br&gt;
&amp;#xC694;&amp;#xCCAD; &amp;#xBC1B;&amp;#xC740; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC2E4;&amp;#xD589;, &amp;#xC5C5;&amp;#xBB34; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xC9C1;&amp;#xC811; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA70;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xACC4;&amp;#xCE35;&amp;#xC744; &amp;#xC870;&amp;#xD569;&amp;#xD558;&amp;#xC5EC; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC2E4;&amp;#xD589;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;(Domain)&lt;br&gt;
&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xADDC;&amp;#xCE59;&amp;#xC744; &amp;#xC2E4;&amp;#xD589;&lt;/li&gt;
&lt;li&gt;&amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB7ED;&amp;#xCCD0;(Infrastructure)&lt;br&gt;
&amp;#xC800;&amp;#xC218;&amp;#xC900;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC989;, &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4; &amp;#xD639;&amp;#xC740; &amp;#xBA54;&amp;#xC2DC;&amp;#xC9D5;&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xC2DC;&amp;#xC2A4;&amp;#xD15C; &amp;#xC885;&amp;#xC18D;&amp;#xC801;&amp;#xC778; &amp;#xBD80;&amp;#xBD84;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%97%94%ED%8B%B0%ED%8B%B0%EB%B2%A8%EB%A5%98&quot;&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;/&amp;#xBCA8;&amp;#xB958;&lt;/h2&gt;

&lt;p&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC640; &amp;#xBCA8;&amp;#xB958;&amp;#xB97C; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xAD6C;&amp;#xBD84;&amp;#xD574;&amp;#xC57C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xC62C;&amp;#xBC14;&amp;#xB974;&amp;#xAC8C; &amp;#xC124;&amp;#xACC4;&amp;#xD558;&amp;#xACE0; &amp;#xAD6C;&amp;#xD604;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xAD6C;&amp;#xBD84;&amp;#xD558;&amp;#xC5EC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xB9E4;&amp;#xC6B0; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%97%94%ED%8B%B0%ED%8B%B0&quot;&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/h3&gt;

&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Order&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderNumber&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&lt;/span&gt;
	&lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xACE0;&amp;#xC720;&amp;#xC758; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C4;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xC704;&amp;#xD55C; &amp;#xACE0;&amp;#xC720;&amp;#xC758; &amp;#xBCA8;&amp;#xB958; &amp;#xAC12;&amp;#xC744; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9; &amp;#xD560;&amp;#xC218;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC740; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xD2B9;&amp;#xC9D5; &amp;#xD639;&amp;#xC740; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAE30;&amp;#xC220;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC720;&amp;#xC758;&amp;#xBBF8;&amp;#xD55C; &amp;#xADDC;&amp;#xCE59;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;
&lt;ul&gt;
&lt;li&gt;&amp;#xBE44;&amp;#xC2B7;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4;, &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC2DD;&amp;#xBCC4;&amp;#xC790; &amp;#xC0DD;&amp;#xC131; &amp;#xADDC;&amp;#xCE59;&amp;#xC774; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UUID&lt;/li&gt;
&lt;li&gt;&amp;#xAC12;&amp;#xC744; &amp;#xC9C1;&amp;#xC811; &amp;#xC785;&amp;#xB825;
&lt;ul&gt;
&lt;li&gt;&amp;#xD68C;&amp;#xC6D0;&amp;#xAC00;&amp;#xC785;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC774;&amp;#xBA54;&amp;#xC77C; &amp;#xD639;&amp;#xC740; &amp;#xC544;&amp;#xC774;&amp;#xB514;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC77C;&amp;#xB828;&amp;#xBC88;&amp;#xD638; &amp;#xC0AC;&amp;#xC6A9;
&lt;ul&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xC758; &amp;#xC2DC;&amp;#xD000;&amp;#xC2A4;(&amp;#xC624;&amp;#xB77C;&amp;#xD074; &amp;#xB4F1;) &amp;#xD639;&amp;#xC740; &amp;#xC790;&amp;#xB3D9;&amp;#xC99D;&amp;#xAC00; &amp;#xAC12;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%B2%A8%EB%A5%98&quot;&gt;&amp;#xBCA8;&amp;#xB958;&lt;/h3&gt;

&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;OrderLine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; product&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Product&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; price&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; quantity&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; amounts&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xAC12;&amp;#xC744; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;/&amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C;&amp;#xC11C; &amp;#xAC1C;&amp;#xB150;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC644;&amp;#xC804;&amp;#xD55C; &amp;#xD558;&amp;#xB098;&amp;#xB97C; &amp;#xD45C;&amp;#xD604;&amp;#xD560; &amp;#xB584; &amp;#xC0AC;&amp;#xC6A9;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xB098; &amp;#xC774;&amp;#xC0C1;&amp;#xC758; &amp;#xD544;&amp;#xB4DC;/&amp;#xBA64;&amp;#xBC84; &amp;#xAC12;&amp;#xC744; &amp;#xD3EC;&amp;#xD568;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xB9CE;&amp;#xC73C;&amp;#xB098;, &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xD558;&amp;#xB098; &amp;#xC774;&amp;#xC0C1;&amp;#xC744; &amp;#xD3EC;&amp;#xD568;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC544;&amp;#xB2C8;&amp;#xB2E4;. &amp;#xC758;&amp;#xBBF8;&amp;#xB97C; &amp;#xC880; &amp;#xB354; &amp;#xBA85;&amp;#xD655;&amp;#xD558;&amp;#xAC8C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xBCA8;&amp;#xB958; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC704;&amp;#xD55C; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xCD94;&amp;#xAC00;&amp;#xD560; &amp;#xC218; &amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD; &amp;#xD560;&amp;#xB54C;&amp;#xB294; &amp;#xAE30;&amp;#xC874; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;(&amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD; &amp;#xB4F1;)&amp;#xBCF4;&amp;#xB2E4;&amp;#xB294; &amp;#xC0C8;&amp;#xB85C;&amp;#xC6B4; &amp;#xBCA8;&amp;#xB958; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC744; &amp;#xC120;&amp;#xD638;&amp;#xD55C;&amp;#xB2E4;.(Immutable&amp;#xD55C; &amp;#xC811;&amp;#xADFC;)
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &amp;#xCC38;&amp;#xC870; &amp;#xD22C;&amp;#xBA85;&amp;#xC131;&amp;#xACFC; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC989;, &amp;#xCC38;&amp;#xC870; &amp;#xAC12;&amp;#xC774; &amp;#xBC14;&amp;#xB00C;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC0C1;&amp;#xD0DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0C1;&amp;#xD0DC; &amp;#xAC12;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xC758;&amp;#xB3C4;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8%EC%97%90-%EC%84%B8%ED%84%B0%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EA%B8%B0&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378;&amp;#xC5D0; &amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC138;&amp;#xD130;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC740; &lt;code&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xD575;&amp;#xC2EC; &amp;#xAC1C;&amp;#xB150;&amp;#xC774;&amp;#xB098; &amp;#xC758;&amp;#xB3C4;&amp;#xB97C; &amp;#xBA85;&amp;#xD655;&amp;#xD558;&amp;#xAC8C; &amp;#xD45C;&amp;#xD604;&amp;#xD558;&amp;#xAE30; &amp;#xD798;&amp;#xB4E4;&amp;#xAC8C; &amp;#xD55C;&amp;#xB2E4;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC644;&amp;#xBCBD;&amp;#xD55C; &amp;#xC0C1;&amp;#xD0DC;&amp;#xAC00; &amp;#xC544;&amp;#xB2D0; &amp;#xC218; &amp;#xC788;&amp;#xAC8C; &amp;#xB418;&amp;#xBBC0;&amp;#xB85C;, &amp;#xC7A0;&amp;#xC815;&amp;#xC801;&amp;#xC778; &amp;#xC5D0;&amp;#xB7EC; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC744; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC774;&amp;#xB97C; &amp;#xB9C9;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294;, &lt;strong&gt;&amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xC644;&amp;#xBCBD;&amp;#xD55C; &amp;#xC0C1;&amp;#xD0DC; &amp;#xAC12;&amp;#xC744; &amp;#xC8FC;&amp;#xC785;&amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt; &amp;#xC989;, &lt;code&gt;&amp;#xC0DD;&amp;#xC131;&amp;#xC790;&lt;/code&gt; &amp;#xD639;&amp;#xC740; &lt;code&gt;&amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC;&lt;/code&gt; &amp;#xB4F1;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4; &amp;#xD639;&amp;#xC740; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBAA8;&amp;#xB450; &amp;#xBC1B;&amp;#xC544;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; Order &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderNumber&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderNo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; totalAmount&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Money&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; shippingInfo&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ShippingInfo
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderLine&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;OrderLine&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; orderState&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderState &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; OrderState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PAYMENT_WAITING&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; createdAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; updatedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;companion&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
			orderNumber&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; OrderNo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			totalAmount&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Money&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			shippingInfo&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ShippingInfo
			orderLine&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;OrderLine&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Order&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
			orderNumber &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; orderNumber&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			totalAmount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; totalAmount&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			shippingInfo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; shippingInfo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			orderLine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; orderLine&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			orderState &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; OrderState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PAYMENT_WAITING&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			createdAt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			updatedAt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;			
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;Kotlin&amp;#xC758; &amp;#xAE30;&amp;#xBCF8;&amp;#xAC12; &amp;#xD560;&amp;#xB2F9;(Default Value Assignment)&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xD544;&amp;#xC218; &amp;#xAC12;&amp;#xACFC; &amp;#xC635;&amp;#xC158; &amp;#xAC12;&amp;#xC744; &amp;#xB098;&amp;#xB220;&amp;#xC11C; &amp;#xD560;&amp;#xB2F9; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xD3B8;&amp;#xB9AC;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%9A%A9%EC%96%B4&quot;&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC6A9;&amp;#xC5B4;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC758; &amp;#xC6A9;&amp;#xC5B4;&amp;#xB97C; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xCDA9;&amp;#xBD84;&amp;#xD558;&amp;#xAC8C; &amp;#xBC18;&amp;#xC601;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74;, &amp;#xAC1C;&amp;#xBC1C;&amp;#xC790;&amp;#xB4E4;&amp;#xC740; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC758;&amp;#xBBF8; &amp;#xD574;&amp;#xC11D;&amp;#xC5D0; &amp;#xBD80;&amp;#xB2F4;&amp;#xC744; &amp;#xC8FC;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// &amp;#xC774;&amp;#xAC8C; &amp;#xBB54;&amp;#xB9D0;&amp;#xC774;&amp;#xC57C;...&lt;/span&gt;
emum &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; OrderState &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	STEP1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; STPE2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; STEP3 &lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC2E4;&amp;#xC81C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB294; &amp;#xC720;&amp;#xC758;&amp;#xBBF8;&amp;#xD55C; &amp;#xB2E8;&amp;#xC5B4; &amp;#xC120;&amp;#xD0DD;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC;, &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xD574;&amp;#xC11D;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC744; &amp;#xC904;&amp;#xC774;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;. &amp;#xC774;&amp;#xB97C; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xB2E8;&amp;#xC5B4; &amp;#xC120;&amp;#xD0DD;&amp;#xC744; &amp;#xC704;&amp;#xD55C; &amp;#xC774;&amp;#xD574; &amp;#xAD00;&amp;#xACC4;&amp;#xC790;&amp;#xB4E4;&amp;#xC758; &amp;#xB178;&amp;#xB825;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;emum &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;OrderState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; statement&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;PAYMENT_WAITING&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC785;&amp;#xAE08;&amp;#xB300;&amp;#xAE30;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;PREPARING&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xBC30;&amp;#xC1A1;&amp;#xC900;&amp;#xBE44;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
	&lt;span class=&quot;token function&quot;&gt;SHIPPED&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xCD9C;&amp;#xACE0;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
	&lt;span class=&quot;token function&quot;&gt;DELIVERING&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xBC30;&amp;#xC1A1;&amp;#xC911;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
	&lt;span class=&quot;token function&quot;&gt;DELIVERY_COMPLETED&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xBC30;&amp;#xC1A1;&amp;#xC644;&amp;#xB8CC;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/143</guid>
      <comments>https://stylishc.tistory.com/143#entry143comment</comments>
      <pubDate>Sat, 8 Jun 2019 20:54:25 +0900</pubDate>
    </item>
    <item>
      <title>20190603</title>
      <link>https://stylishc.tistory.com/142</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190603&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-h2-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%82%AC%EC%9A%A9-%EC%A4%91-%EC%86%8C%EC%86%8C%ED%95%9C-%EC%82%BD%EC%A7%88&quot;&gt;1. H2 &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC911; &amp;#xC18C;&amp;#xC18C;&amp;#xD55C; &amp;#xC0BD;&amp;#xC9C8;&lt;/h1&gt;

&lt;p&gt;&amp;#xC2E0;&amp;#xADDC; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; API &amp;#xAC1C;&amp;#xBC1C;&amp;#xC5D0; H2 &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC801;&amp;#xADF9;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xCEEC;&amp;#xB7FC;&amp;#xBA85;&amp;#xC5D0; &amp;#xC608;&amp;#xC57D;&amp;#xC5B4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xC624;&amp;#xB79C; &amp;#xC2DC;&amp;#xAC04; &amp;#xC0BD;&amp;#xC9C8;&amp;#xC744; &amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xC2E4;&amp;#xC81C; &amp;#xC5D0;&amp;#xB7EC; &amp;#xC2A4;&amp;#xD0DD;&amp;#xD2B8;&amp;#xB808;&amp;#xC774;&amp;#xC2A4;&amp;#xC5D0; &amp;#xC608;&amp;#xC545;&amp;#xC5B4;&amp;#xB77C;&amp;#xB294; &amp;#xBA54;&amp;#xC138;&amp;#xC9C0;&amp;#xAC00; &amp;#xBCF4;&amp;#xC774;&amp;#xC9C8; &amp;#xC54A;&amp;#xC544;&amp;#xC11C; &amp;#xB354; &amp;#xD574;&amp;#xB9E8; &amp;#xBD80;&amp;#xBD84;&amp;#xB3C4; &amp;#xC788;&amp;#xC5C8;&amp;#xB358;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.h2database.com/html/advanced.html#keywords&quot;&gt;Keywords / Reserved Words&lt;br&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-ddd-1%EC%9E%A5-~-2%EC%9E%A5-%ED%95%99%EC%8A%B5&quot;&gt;2. DDD 1&amp;#xC7A5; ~ 2&amp;#xC7A5; &amp;#xD559;&amp;#xC2B5;&lt;/h1&gt;

&lt;p&gt;DDD Start &amp;#xCC45;&amp;#xC744; &amp;#xC77D;&amp;#xC73C;&amp;#xBA74;&amp;#xC11C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xACC4;&amp;#xC18D; &amp;#xC815;&amp;#xB9AC;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. &amp;#xCC45;&amp;#xC774; &amp;#xCC38; &amp;#xC88B;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB294;&amp;#xB370;, &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604; &amp;#xCF54;&amp;#xB4DC;&amp;#xB3C4; &amp;#xAC19;&amp;#xC774; &amp;#xC608;&amp;#xC81C; &amp;#xD615;&amp;#xC2DD;&amp;#xC73C;&amp;#xB85C; &amp;#xBCF4;&amp;#xC5EC;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC2E4;&amp;#xC81C; JPA-Hibernate&amp;#xB97C; &amp;#xC8FC;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xB098;&amp;#xB85C;&amp;#xC11C;&amp;#xB294; &amp;#xCC38; &amp;#xACF5;&amp;#xAC10;&amp;#xC774; &amp;#xAC00;&amp;#xBA74;&amp;#xC11C;&amp;#xB3C4; &amp;#xBD80;&amp;#xC871;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xBB34;&amp;#xC5C7;&amp;#xC778;&amp;#xC9C0; &amp;#xC815;&amp;#xD655;&amp;#xD558;&amp;#xAC8C; &amp;#xC54C;&amp;#xAC8C; &amp;#xD574;&amp;#xC8FC;&amp;#xB294;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0; vs &amp;#xBCA8;&amp;#xB958;&lt;/li&gt;
&lt;li&gt;&amp;#xBB34;&amp;#xBD84;&amp;#xBCC4;&amp;#xD55C; &amp;#xC138;&amp;#xD130;&amp;#xB294; &amp;#xBB34;&amp;#xC870;&amp;#xAC74; &lt;code&gt;&amp;#xC9C0;&amp;#xC591;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&amp;#xC758;&amp;#xBBF8; &amp;#xC788;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC6A9;&amp;#xC5B4; &amp;#xC120;&amp;#xC815; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xC774;&amp;#xB97C; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0; &amp;#xCDA9;&amp;#xBD84;&amp;#xD788; &amp;#xD45C;&amp;#xD604;&lt;/li&gt;
&lt;li&gt;&amp;#xACC4;&amp;#xCE35; &amp;#xAD6C;&amp;#xC870; &amp;#xC544;&amp;#xD0A4;&amp;#xD14D;&amp;#xCC98;&lt;/li&gt;
&lt;li&gt;DIP&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC601;&amp;#xC5ED;&amp;#xC758; &amp;#xC8FC;&amp;#xC694; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC;
&lt;ul&gt;
&lt;li&gt;&amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&lt;/li&gt;
&lt;li&gt;&amp;#xBCA8;&amp;#xB958;&lt;/li&gt;
&lt;li&gt;&amp;#xC560;&amp;#xADF8;&amp;#xB9AC;&amp;#xAC70;&amp;#xD2B8;&lt;/li&gt;
&lt;li&gt;&amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&lt;/li&gt;
&lt;li&gt;&amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xC77C;&amp;#xB2E8; &amp;#xACF5;&amp;#xBD80;&amp;#xD55C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774;&amp;#xB77C; &amp;#xD0A4;&amp;#xC6CC;&amp;#xB4DC; &amp;#xC704;&amp;#xC8FC;&amp;#xB85C; &amp;#xB098;&amp;#xC5F4;&amp;#xD574;&amp;#xBD24;&amp;#xB294;&amp;#xB370;, &amp;#xAE30;&amp;#xC874; &amp;#xCF54;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB9AC;&amp;#xD329;&amp;#xD1A0;&amp;#xB9C1;&amp;#xC744; &amp;#xC9C4;&amp;#xD589;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xCC45;&amp;#xC5D0;&amp;#xC11C; &amp;#xBD24;&amp;#xB358; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC77C;&amp;#xBD80; &amp;#xC801;&amp;#xC6A9;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &amp;#xC880; &amp;#xB354; &amp;#xC758;&amp;#xBBF8; &amp;#xC788;&amp;#xB294; &amp;#xC811;&amp;#xADFC;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD560;&amp;#xAC70; &amp;#xAC19;&amp;#xC544; &amp;#xB098;&amp;#xB984; &amp;#xC218;&amp;#xD655;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4; &amp;#x1F603;&lt;/p&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/142</guid>
      <comments>https://stylishc.tistory.com/142#entry142comment</comments>
      <pubDate>Mon, 3 Jun 2019 22:50:07 +0900</pubDate>
    </item>
    <item>
      <title>20190528</title>
      <link>https://stylishc.tistory.com/141</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190528&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-transactional&quot;&gt;1. @Transactional&lt;/h1&gt;

&lt;p&gt;&amp;#xD68C;&amp;#xC0AC; &amp;#xC5C5;&amp;#xBB34; &amp;#xC911;, &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xD658;&amp;#xACBD;&amp;#xC5D0;&amp;#xC11C; &amp;#xC801;&amp;#xC808;&amp;#xD558;&amp;#xAC8C; @Transactional&amp;#xC744; &amp;#xBD80;&amp;#xC5EC;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD574;&amp;#xC11C; &amp;#xC2E4;&amp;#xC218;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xBA54;&amp;#xBAA8;&amp;#xD558;&amp;#xB824;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repository&amp;#xB97C; &amp;#xC758;&amp;#xC874;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xB808;&amp;#xC774;&amp;#xC5B4;&amp;#xC5D0;&amp;#xC11C; &amp;#xBA85;&amp;#xC2DC;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; @Transactional&amp;#xC744; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xB9E4;&amp;#xC11C;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB9C8;&amp;#xD0B9; &amp;#xD574;&amp;#xB193;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xC0C1;&amp;#xD0DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xD574;&amp;#xB2F9; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xC758; &amp;#xD638;&amp;#xCD9C;&amp;#xC774; &amp;#xC885;&amp;#xB8CC;&amp;#xB41C; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; @OneToMany(FetchType.Lazy)&amp;#xB85C; &amp;#xB9C8;&amp;#xD0B9;&amp;#xB41C; &amp;#xD558;&amp;#xC704; &amp;#xBAA8;&amp;#xB378; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xAC00; &amp;#xC870;&amp;#xD68C;&amp;#xB97C; &amp;#xC2DC;&amp;#xB3C4;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;&amp;#xC11C; &amp;#xC0DD;&amp;#xAE30;&amp;#xB294; &amp;#xBB38;&amp;#xC81C;&amp;#xC600;&amp;#xB2E4;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#xAE30;&amp;#xBCF8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; Data JPA&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; Repository&amp;#xB294; CRUD &amp;#xC624;&amp;#xD37C;&amp;#xB808;&amp;#xC774;&amp;#xC158;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xAC00;&amp;#xC838;&amp;#xAC00;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xB418;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC740; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0;&amp;#xC11C; FetchType.Lazy&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xC989; &amp;#xC9C0;&amp;#xC5F0; &amp;#xB85C;&amp;#xB529;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C;&amp;#xAC00; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xB418;&amp;#xB294; &amp;#xB4EF; &amp;#xD588;&amp;#xB2E4;. &amp;#xB9CC;&amp;#xC57D; &amp;#xB808;&amp;#xD30C;&amp;#xC9C0;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xACE0; &amp;#xC2F6;&amp;#xB2E4;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xB97C; &amp;#xD558;&amp;#xBA74; &amp;#xB418;&amp;#xACE0;, &amp;#xB610;&amp;#xD55C; &lt;code&gt;readOnly&lt;/code&gt; &amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC18D;&amp;#xC131;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; Replication &amp;#xAD6C;&amp;#xC870;&amp;#xC0C1;&amp;#xC5D0;&amp;#xC11C; &amp;#xD574;&amp;#xB2F9; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC774; Read Replication&amp;#xC744; &amp;#xCC38;&amp;#xC870;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CrudRepository&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
  &lt;span class=&quot;token annotation punctuation&quot;&gt;@Transactional&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;timeout &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&amp;#xB610;&amp;#xD55C;, &amp;#xB9CC;&amp;#xC57D; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; @Transactional&amp;#xC758; &amp;#xC18D;&amp;#xC131; &amp;#xAC12;&amp;#xC774; readOnly=true&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xACE0;, &amp;#xB9E4;&amp;#xC11C;&amp;#xB4DC;&amp;#xAC00; READ &amp;#xC624;&amp;#xD37C;&amp;#xB808;&amp;#xC774;&amp;#xC158;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; CUD &amp;#xC624;&amp;#xD37C;&amp;#xB808;&amp;#xC774;&amp;#xC158;&amp;#xC744; &amp;#xCDE8;&amp;#xD55C;&amp;#xB2E4;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &lt;code&gt;@Modifying&lt;/code&gt;&amp;#xC744; &amp;#xBD99;&amp;#xC5EC;&amp;#xC11C; &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158;&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Transactional&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;readOnly &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;token class-name&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findByLastname&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; lastname&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token annotation punctuation&quot;&gt;@Modifying&lt;/span&gt;
  &lt;span class=&quot;token annotation punctuation&quot;&gt;@Transactional&lt;/span&gt;
  &lt;span class=&quot;token annotation punctuation&quot;&gt;@Query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;delete from User u where u.active = false&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;deleteInactiveUsers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/141</guid>
      <comments>https://stylishc.tistory.com/141#entry141comment</comments>
      <pubDate>Tue, 28 May 2019 21:27:35 +0900</pubDate>
    </item>
    <item>
      <title>@JsonView와 @JsonFilter를 사용하여 Partial response 구현하기</title>
      <link>https://stylishc.tistory.com/140</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;PartialReseponse&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      
        &lt;script type=&quot;text/x-mathjax-config&quot;&gt;
          MathJax.Hub.Config({&quot;extensions&quot;:[&quot;tex2jax.js&quot;],&quot;jax&quot;:[&quot;input/TeX&quot;,&quot;output/HTML-CSS&quot;],&quot;messageStyle&quot;:&quot;none&quot;,&quot;tex2jax&quot;:{&quot;processEnvironments&quot;:false,&quot;processEscapes&quot;:true,&quot;inlineMath&quot;:[[&quot;$&quot;,&quot;$&quot;],[&quot;\\(&quot;,&quot;\\)&quot;]],&quot;displayMath&quot;:[[&quot;$$&quot;,&quot;$$&quot;],[&quot;\\[&quot;,&quot;\\]&quot;]]},&quot;TeX&quot;:{&quot;extensions&quot;:[&quot;AMSmath.js&quot;,&quot;AMSsymbols.js&quot;,&quot;noErrors.js&quot;,&quot;noUndefined.js&quot;]},&quot;HTML-CSS&quot;:{&quot;availableFonts&quot;:[&quot;TeX&quot;]}});
        &lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; async src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js&quot;&gt;&lt;/script&gt;
        
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}html body{font-family:&quot;Helvetica Neue&quot;,Helvetica,&quot;Segoe UI&quot;,Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body&gt;:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body&gt;p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body&gt;ul,html body&gt;ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li&gt;p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote&gt;:first-child{margin-top:0}html body blockquote&gt;:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:&quot;\00a0&quot;}html body pre&gt;code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview  &quot;&gt;
      &lt;h1 id=&quot;jsonview&amp;#xC640;-jsonfilter&amp;#xB97C;-&amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC;-partial-response-&amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAE30;&quot;&gt;&lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xC640;&quot;&gt;@JsonView&amp;#xC640;&lt;/span&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonFilter&amp;#xB97C;&quot;&gt;@JsonFilter&amp;#xB97C;&lt;/span&gt; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; Partial response &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAE30;&lt;/h1&gt;
&lt;h2 id=&quot;&amp;#xAC1C;&amp;#xC694;&quot;&gt;&amp;#xAC1C;&amp;#xC694;&lt;/h2&gt;
&lt;p&gt;JSON HTTP API&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD560; &amp;#xB54C;, &amp;#xD398;&amp;#xC774;&amp;#xC9D5;&amp;#xB9CC; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB97C; &amp;#xC27D;&amp;#xAC8C; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC5EC;&amp;#xAE30;&amp;#xC11C; &amp;#xD55C; &amp;#xAC78;&amp;#xC74C; &amp;#xB354; &amp;#xB098;&amp;#xC544;&amp;#xAC00; &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xB098;&amp;#xC740; &amp;#xD37C;&amp;#xD3EC;&amp;#xBA3C;&amp;#xC2A4;&amp;#xB97C; &amp;#xC704;&amp;#xD558;&amp;#xC5EC; &amp;#xD074;&amp;#xB77C;&amp;#xC774;&amp;#xC5B8;&amp;#xD2B8;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xD544;&amp;#xB4DC;&amp;#xB9CC; &amp;#xACE8;&amp;#xB77C;&amp;#xC11C; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC0C1;&amp;#xD669;&amp;#xC744; &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP Reqeust&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;text language-text&quot; data-role=&quot;codeBlock&quot; data-info=&quot;text&quot;&gt;&lt;code&gt;HTTP/1.1 GET /books/1?fields=isbn,title&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;HTTP Response&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;text language-text language-javascript&quot; data-role=&quot;codeBlock&quot; data-info=&quot;javascript&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;978-3-16-148410-0&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Book Title&amp;quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#xCC45; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC870;&amp;#xD68C;&amp;#xD558;&amp;#xB294; JSON API&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xD5E4;&amp;#xB2F9; API&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xB294; &amp;#xC815;&amp;#xBCF4; &amp;#xC911; &amp;#xC77C;&amp;#xBD80; &amp;#xC815;&amp;#xBCF4;&amp;#xB9CC;&amp;#xC744; &amp;#xD074;&amp;#xB77C;&amp;#xC774;&amp;#xC5B8;&amp;#xD2B8;&amp;#xC5D0;&amp;#xC11C; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; fields &amp;#xCFFC;&amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB9C1;&amp;#xC5D0; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xD0A4; &amp;#xAC12;&amp;#xC744; &amp;#xCF64;&amp;#xB9C8; &amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB85C; &amp;#xB098;&amp;#xC5F4;&amp;#xD558;&amp;#xC5EC; &amp;#xC694;&amp;#xCCAD;&amp;#xD558;&amp;#xB294; &amp;#xC608;&amp;#xC2DC;&amp;#xC774;&amp;#xB2E4;. &amp;#xD074;&amp;#xB77C;&amp;#xC774;&amp;#xC5B8;&amp;#xD2B8;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xC751;&amp;#xB2F5;&amp;#xB9CC;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xB294; &amp;#xB3D9;&amp;#xC2DC;&amp;#xC5D0; &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xB098;&amp;#xC740; &amp;#xB124;&amp;#xD2B8;&amp;#xC6CC;&amp;#xD06C; &amp;#xB808;&amp;#xBCA8;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xD37C;&amp;#xD3EC;&amp;#xBA3C;&amp;#xC2A4;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xAC08; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7F0; &amp;#xBD80;&amp;#xBD84;&amp;#xC801;&amp;#xC778; &amp;#xC751;&amp;#xB2F5; &amp;#xAC12;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC744; &lt;code&gt;Partial Response&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xBD80;&amp;#xB974;&amp;#xBA70; REST&amp;#xC640; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xBB38;&amp;#xC11C;&amp;#xC5D0;&amp;#xC11C; &amp;#xC2EC;&amp;#xC2EC;&amp;#xCC2E;&amp;#xAC8C; &amp;#xBC1C;&amp;#xACAC;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/drive/api/v3/performance&quot;&gt;GOOGLE-REST-Improve performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bcho.tistory.com/914&quot;&gt;&amp;#xC870;&amp;#xB300;&amp;#xD611;&amp;#xB2D8; &amp;#xBE14;&amp;#xB85C;&amp;#xADF8;, REST API &amp;#xB514;&amp;#xC790;&amp;#xC778; &amp;#xAC00;&amp;#xC774;&amp;#xB4DC;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/architecture/best-practices/api-design&quot;&gt;MS, API &amp;#xB514;&amp;#xC790;&amp;#xC778;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xC5B8;&amp;#xC5B4;&amp;#xC640; &amp;#xD658;&amp;#xACBD;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC774;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC5D0;&amp;#xB294; &amp;#xCC28;&amp;#xC774;&amp;#xAC00; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xB294;&amp;#xB370;, &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; Spring Framework, Boot &amp;#xD658;&amp;#xACBD;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; JSON &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; GSON &amp;#xD639;&amp;#xC740; Jackson &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;&amp;#xAC00; &amp;#xB2F4;&amp;#xB2F9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370; &amp;#xADF8; &amp;#xC911;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; Jackson&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xD658;&amp;#xACBD;&amp;#xC5D0;&amp;#xC11C; &amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; partial response&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xC608;&amp;#xC81C;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD574;&amp;#xBCF4;&amp;#xB824;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;h2 id=&quot;&amp;#xAC1C;&amp;#xBC1C;-&amp;#xD658;&amp;#xACBD;&quot;&gt;&amp;#xAC1C;&amp;#xBC1C; &amp;#xD658;&amp;#xACBD;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kotlin 1.3.31&lt;/li&gt;
&lt;li&gt;Spring Boot 2.1.5 RELEASE
&lt;ul&gt;
&lt;li&gt;WEB&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;jsonview&amp;#xB97C;-&amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;-&amp;#xC608;&amp;#xC81C;&quot;&gt;1. &lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xB97C;&quot;&gt;@JsonView&amp;#xB97C;&lt;/span&gt; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xC608;&amp;#xC81C;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&quot;&gt;@JsonView&lt;/span&gt; &amp;#xC5B4;&amp;#xB178;&amp;#xD14C;&amp;#xC774;&amp;#xC158;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xACC4;&amp;#xCE35;&amp;#xC801;&amp;#xC778; &amp;#xBD80;&amp;#xBD84; &amp;#xB80C;&amp;#xB354;&amp;#xB9C1;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xC5D0;&quot;&gt;@JsonView&amp;#xC5D0;&lt;/span&gt; &amp;#xB300;&amp;#xD55C; &amp;#xACC4;&amp;#xCE35; &amp;#xC815;&amp;#xC758; &amp;#xC608;&amp;#xC640; &amp;#xC720;&amp;#xC800;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC608;&amp;#xC81C; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; Views &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; List
    &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; Get&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;List&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UUID &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; UUID&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;randomUUID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;List&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; email&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;List&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Get&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; createdAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Get&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; updatedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#xC704;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xC120;&amp;#xC5B8;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &lt;code&gt;@JsonView(Dto.Views.List::class)&lt;/code&gt;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xBAA8;&amp;#xB4E0; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC720;&amp;#xC800; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;&amp;#xB9CC;&amp;#xC744; Jackson &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;&amp;#xAC00; serialize&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;. &amp;#xBC18;&amp;#xB300;&amp;#xB85C;, &lt;code&gt;@JsonView(Dto.Views.Get::class)&lt;/code&gt;&amp;#xC73C;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xB193;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74; &amp;#xC720;&amp;#xC800; &amp;#xC5D4;&amp;#xD2F0;&amp;#xD2F0;&amp;#xC758; &amp;#xBAA8;&amp;#xB4E0; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAC00; serialize&amp;#xB41C;&amp;#xB2E4;.&lt;/p&gt;
&lt;p&gt;Spring Mvc&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC694;&amp;#xCCAD; &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC; &amp;#xB9E4;&amp;#xD551; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xC5D0; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xB97C;&quot;&gt;@JsonView&amp;#xB97C;&lt;/span&gt; &amp;#xBA85;&amp;#xC2DC;&amp;#xD574;&amp;#xC8FC;&amp;#xBA74; &amp;#xD574;&amp;#xB2F9; &amp;#xBDF0;&amp;#xB85C; Serailize &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xC9C0;&amp;#xC6D0;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RestController&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookController &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;companion&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Dto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Park&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            email &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;park@gmail.com&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@GetMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/get&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Dto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Get&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;jsonViewGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; user

    &lt;span class=&quot;token annotation builtin&quot;&gt;@GetMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/list&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@JsonView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Dto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Views&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;List&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;jsonViewList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xB97C;&quot;&gt;@JsonView&amp;#xB97C;&lt;/span&gt; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xACB0;&amp;#xACFC;&amp;#xAC00; &amp;#xBC18;&amp;#xD658;&amp;#xB418;&amp;#xB294;&amp;#xC9C0; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; &amp;#xC791;&amp;#xC131;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;. &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&amp;#xB294; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8;&amp;#xC758; &amp;#xD1B5;&amp;#xD569;&amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xD658;&amp;#xACBD;&amp;#xC744; &amp;#xADF8;&amp;#xB300;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD588;&amp;#xC73C;&amp;#xBA70;, jsonPath &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD574;&amp;#xB2F9; &amp;#xD0A4; &amp;#xAC12;&amp;#xC774; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xB294;&amp;#xC9C0; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC815;&amp;#xD655;&amp;#xD55C;&amp;#xC9C0; &amp;#xC720;&amp;#xBB34;&amp;#xAE4C;&amp;#xC9C0; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD574;&amp;#xBD24;&amp;#xB2E4;.&lt;/p&gt;
&lt;h3 id=&quot;&amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&quot;&gt;&amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&lt;/h3&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RunWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;SpringRunner&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@SpringBootTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;webEnvironment &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; SpringBootTest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;WebEnvironment&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RANDOM_PORT&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@AutoConfigureMockMvc&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MvcJacksonviewApplicationTests &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;lateinit&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; mockMvc&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MockMvc

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; `JsonView_Get_Test`&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mockMvc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;perform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/get&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andDo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;MediaType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;APPLICATION_JSON_UTF8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; `JsonView_List_Test`&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mockMvc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;perform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/list&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andDo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;MediaType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;APPLICATION_JSON_UTF8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].name&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].name&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;[0].updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; `JsonFilter_single`&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mockMvc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;perform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/json-filter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;fields&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andDo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;MediaType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;APPLICATION_JSON_UTF8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;h2 id=&quot;jsonfilter&amp;#xB97C;-&amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294;-&amp;#xC608;&amp;#xC81C;&quot;&gt;2. &lt;span class=&quot;citation&quot; data-cites=&quot;JsonFilter&amp;#xB97C;&quot;&gt;@JsonFilter&amp;#xB97C;&lt;/span&gt; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC608;&amp;#xC81C;&lt;/h2&gt;
&lt;p&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCF8; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xC758;&quot;&gt;@JsonView&amp;#xC758;&lt;/span&gt; &amp;#xACBD;&amp;#xC6B0;, &amp;#xB531; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xB193;&amp;#xC740; &amp;#xACC4;&amp;#xCE35; &amp;#xAD6C;&amp;#xC870; &amp;#xD639;&amp;#xC740; &amp;#xBDF0;&amp;#xAC00; &amp;#xC544;&amp;#xB2D0; &amp;#xACBD;&amp;#xC6B0; &amp;#xD544;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC120;&amp;#xD0DD; &amp;#xC790;&amp;#xCCB4;&amp;#xAC00; &amp;#xBD88;&amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xACB0;&amp;#xAD6D; &amp;#xC11C;&amp;#xBC84; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158;&amp;#xC5D0;&amp;#xC11C; &amp;#xC815;&amp;#xD574;&amp;#xB193;&amp;#xC740; &amp;#xAD6C;&amp;#xC870;&amp;#xB85C;&amp;#xB9CC; &amp;#xBD80;&amp;#xBD84; &amp;#xBDF0;&amp;#xB97C; &amp;#xC751;&amp;#xB2F5; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xAD6C;&amp;#xC870;&amp;#xC778;&amp;#xB370;, &amp;#xC2E4;&amp;#xC81C; &amp;#xC694;&amp;#xCCAD;&amp;#xC5D0; &amp;#xBD80;&amp;#xD569;&amp;#xD558;&amp;#xB294; &amp;#xC751;&amp;#xB2F5; &amp;#xAC12;&amp;#xB9CC; &amp;#xC804;&amp;#xB2EC;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; Jackson&amp;#xC758; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonFilter&quot;&gt;@JsonFilter&lt;/span&gt; &amp;#xC5B4;&amp;#xB178;&amp;#xD14C;&amp;#xC774;&amp;#xC158;&amp;#xACFC; Spring MVC&amp;#xC758; MappingJacksonValue&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xD574;&amp;#xB2F9; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@JsonFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;bookFilter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Book&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; isbn&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; title&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; createdAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; updatedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LocalDateTime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; GetReq &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; fields&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; List&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;emptyList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RestController&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookController &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;companion&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Dto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Book &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Dto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Book&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            isbn &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; UUID&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;randomUUID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Content&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@GetMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/json-filter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;jsonFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reqDto&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; GetReq&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;MappingJacksonValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        filters &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;SimpleFilterProvider&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;also&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            it&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;bookFilter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reqDto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fields&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; SimpleBeanPropertyFilter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filterOutAllExcept&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reqDto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fields&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toSet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; SimpleBeanPropertyFilter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;serializeAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;h3 id=&quot;&amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;-1&quot;&gt;&amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xCF54;&amp;#xB4DC;&lt;/h3&gt;
&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RunWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;SpringRunner&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@SpringBootTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;webEnvironment &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; SpringBootTest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;WebEnvironment&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RANDOM_PORT&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@AutoConfigureMockMvc&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MvcJacksonviewApplicationTests &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;lateinit&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; mockMvc&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MockMvc

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; `JsonFilter_single`&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mockMvc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;perform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/json-filter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;fields&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andDo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;MediaType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;APPLICATION_JSON_UTF8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; `JsonFilter_comma_separator`&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mockMvc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;perform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/json-filter&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;fields&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn,title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andDo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;MediaType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;APPLICATION_JSON_UTF8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;isbn&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isString&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;createdAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;andExpect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jsonPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedAt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;doesNotExist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&amp;#xC640;&quot;&gt;@JsonView&amp;#xC640;&lt;/span&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;JsonFilter&amp;#xB97C;&quot;&gt;@JsonFilter&amp;#xB97C;&lt;/span&gt; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; partial response&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xD574;&amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xB294;&amp;#xB370;, &amp;#xC5EC;&amp;#xAE30;&amp;#xC11C;  &amp;#xC870;&amp;#xAE08; &amp;#xB354; &amp;#xB098;&amp;#xC544;&amp;#xAC00; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD55C; &amp;#xC870;&amp;#xAC74;&amp;#xC774;&amp;#xB098; &amp;#xAD6C;&amp;#xC870;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &lt;a href=&quot;https://github.com/bohnman/squiggly-java&quot;&gt;Squiggly Filter&lt;/a&gt;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xC88B;&amp;#xC740; &amp;#xC120;&amp;#xD0DD;&amp;#xC774; &amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xC744;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC608;&amp;#xC81C;&amp;#xB294; &lt;a href=&quot;https://github.com/thefeeling/spring-code/tree/develop/spring-mvc-jacksonview&quot;&gt;&amp;#xB9C1;&amp;#xD06C;&lt;/a&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xD655;&amp;#xC778; &amp;#xAC00;&amp;#xB2A5;&amp;#xD569;&amp;#xB2C8;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;&amp;#xCC38;&amp;#xACE0;&quot;&gt;&amp;#xCC38;&amp;#xACE0;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeday.me/ko/qa/20190512/527260.html&quot;&gt;spring-mvc &amp;#x2013; Spring MVC &amp;#xCEE8;&amp;#xD2B8;&amp;#xB864;&amp;#xB7EC;&amp;#xC5D0;&amp;#xC11C; JsonView&amp;#xC758; &amp;#xB3D9;&amp;#xC801; &amp;#xC120;&amp;#xD0DD;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.baeldung.com/jackson-json-view-annotation&quot;&gt;Jackson JSON Views&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Spring</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/140</guid>
      <comments>https://stylishc.tistory.com/140#entry140comment</comments>
      <pubDate>Mon, 27 May 2019 09:33:17 +0900</pubDate>
    </item>
    <item>
      <title>20190526</title>
      <link>https://stylishc.tistory.com/139</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190526&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-rx%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%B5%EB%B6%80-%EC%9D%BC%EB%8B%A8-%EC%A4%91%EC%A7%80&quot;&gt;1. Rx&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACF5;&amp;#xBD80; &amp;#xC77C;&amp;#xB2E8; &amp;#xC911;&amp;#xC9C0;!&lt;/h1&gt;

&lt;p&gt;&amp;#xCD5C;&amp;#xADFC; &amp;#xC57D; &amp;#xD55C;&amp;#xB2EC; &amp;#xAC00;&amp;#xB7C9; &amp;#xD2C8;&amp;#xD2C8;&amp;#xD788; Rx&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACF5;&amp;#xBD80;&amp;#xB97C; &amp;#xC9C0;&amp;#xC18D;&amp;#xD574;&amp;#xC654;&amp;#xB2E4;. &amp;#xACB0;&amp;#xB860;&amp;#xBD80;&amp;#xD130; &amp;#xB9D0;&amp;#xD558;&amp;#xC790;&amp;#xBA74; &amp;#xB2F9;&amp;#xBD84;&amp;#xAC04;&amp;#xC740; Rx&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xB2E4;&amp;#xB978; &amp;#xACF5;&amp;#xBD80;&amp;#xC5D0; &amp;#xC9D1;&amp;#xC911;&amp;#xD574;&amp;#xC57C; &amp;#xD560;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;. &amp;#xBB3C;&amp;#xB860; Rx &amp;#xC790;&amp;#xCCB4;&amp;#xB3C4; &amp;#xC4F0;&amp;#xC784;&amp;#xC0C8;&amp;#xAC00; &amp;#xBB34;&amp;#xCC99; &amp;#xC88B;&amp;#xC740; &amp;#xC0DD;&amp;#xD0DC;&amp;#xACC4;&amp;#xB77C;&amp;#xB294; &amp;#xC810;&amp;#xC740; &amp;#xBD80;&amp;#xC815; &amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xB2F9;&amp;#xC7A5; &amp;#xBAA8;&amp;#xC790;&amp;#xB780; &amp;#xAE30;&amp;#xBCF8;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACF5;&amp;#xBD80;&amp;#xB098; &amp;#xC5C5;&amp;#xBB34;&amp;#xC640; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xD559;&amp;#xC2B5;&amp;#xC5D0; &amp;#xC880; &amp;#xB354; &amp;#xD22C;&amp;#xC790;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC55E;&amp;#xC73C;&amp;#xB85C; &amp;#xB354; &amp;#xD06C;&amp;#xAC8C; &amp;#xB3C4;&amp;#xC6C0;&amp;#xC774; &amp;#xB418;&amp;#xB9AC;&amp;#xB77C; &amp;#xC0DD;&amp;#xAC01;&amp;#xD588;&amp;#xB2E4;. &amp;#xADF8;&amp;#xB9CC; &amp;#xB450;&amp;#xB294; &amp;#xC774;&amp;#xC720;&amp;#xB97C; &amp;#xAC04;&amp;#xB2E8;&amp;#xD558;&amp;#xAC8C; &amp;#xC368;&amp;#xBCF4;&amp;#xBA74; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RDB&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC9C0;&amp;#xC6D0; &amp;#xBD80;&amp;#xC2E4;, &amp;#xCD94;&amp;#xD6C4;&amp;#xC5D0; R2DBC&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC0DD;&amp;#xD0DC;&amp;#xACC4;&amp;#xAC00; &amp;#xCDA9;&amp;#xBD84;&amp;#xD558;&amp;#xAC8C; &amp;#xD655;&amp;#xBCF4;&amp;#xB418;&amp;#xBA74; &amp;#xADF8;&amp;#xB54C; &amp;#xC2DC;&amp;#xC791;&amp;#xD574;&amp;#xB3C4; &amp;#xB2A6;&amp;#xC9C0; &amp;#xC54A;&amp;#xB2E4;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD588;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Kotlin Coroutine&amp;#xC73C;&amp;#xB85C;&amp;#xB3C4; Rx&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xCDA9;&amp;#xBD84;&amp;#xD788; &amp;#xBCF4;&amp;#xC644;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;! &amp;#xC5ED;&amp;#xC2DC; &amp;#xBE44;&amp;#xB3D9;&amp;#xAE30;&amp;#xC640; &amp;#xAD00;&amp;#xB828;&amp;#xB41C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB294; async~await&amp;#xAC00; &amp;#xCD5C;&amp;#xACE0;&amp;#xAC00; &amp;#xC544;&amp;#xB2D0;&amp;#xAE4C;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD55C;&amp;#xB2E4;. coroutine &amp;#xC790;&amp;#xCCB4;&amp;#xAC00; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xAC15;&amp;#xB825;&amp;#xD55C; &amp;#xC11C;&amp;#xD3EC;&amp;#xD2B8;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xBA74; &amp;#xAD73;&amp;#xC774; Rx&amp;#xAC00; &amp;#xD544;&amp;#xC694; &amp;#xC5C6;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;!&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-ddd%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%B5%EB%B6%80%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%B4%EB%B3%B4%EC%9E%90&quot;&gt;2. DDD&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACF5;&amp;#xBD80;&amp;#xB97C; &amp;#xC2DC;&amp;#xC791;&amp;#xD574;&amp;#xBCF4;&amp;#xC790;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;DDD Start! 1&amp;#xC7A5;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xBAA8;&amp;#xB378; &amp;#xC2DC;&amp;#xC791;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB9C8; DDD&amp;#xB97C; &amp;#xCC98;&amp;#xC74C; &amp;#xB4E4;&amp;#xC5B4;&amp;#xBCF8;&amp;#xAC74; &amp;#xBA87; &amp;#xB144;&amp;#xC804;&amp;#xC758; &amp;#xC77C;&amp;#xC778;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;. &amp;#xAF2D; &amp;#xD55C;&amp;#xBC88;&amp;#xC740; &amp;#xCC45;&amp;#xC744; &amp;#xC77D;&amp;#xC5B4;&amp;#xBCF4;&amp;#xACE0; &amp;#xC5C5;&amp;#xBB34;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC5B4;&amp;#xB290; &amp;#xC815;&amp;#xB3C4; &amp;#xC801;&amp;#xC6A9;&amp;#xC744; &amp;#xD574;&amp;#xBD10;&amp;#xC57C;&amp;#xC9C0; &amp;#xD558;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xB9CC; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xC5C8;&amp;#xC9C0; &amp;#xC2E4;&amp;#xC81C;&amp;#xB85C; &amp;#xD589;&amp;#xB3D9;&amp;#xC73C;&amp;#xB85C; &amp;#xC62E;&amp;#xAE30;&amp;#xC9C4; &amp;#xBABB;&amp;#xD588;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xCC45;&amp;#xC740; DDD Start&amp;#xB77C;&amp;#xB294; &amp;#xCC45;&amp;#xC744; &amp;#xAD6C;&amp;#xB9E4;&amp;#xD588;&amp;#xACE0;, 1&amp;#xC7A5;&amp;#xC744; &amp;#xC815;&amp;#xB3C5;&amp;#xD588;&amp;#xB294;&amp;#xB370; &amp;#xCC45;&amp;#xC774; &amp;#xC5B4;&amp;#xB835;&amp;#xC9C0; &amp;#xC54A;&amp;#xACE0; &amp;#xC798; &amp;#xC77D;&amp;#xD600;&amp;#xC11C; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;. &amp;#xD2B9;&amp;#xD788;, &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xB2E8;&amp;#xC5B4; &amp;#xC790;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC774;&amp;#xD574;&amp;#xB3C4;&amp;#xAC00; &amp;#xC880; &amp;#xB354; &amp;#xB192;&amp;#xC544;&amp;#xC838;&amp;#xC11C; &amp;#xC88B;&amp;#xC558;&amp;#xACE0; &amp;#xC2E4;&amp;#xC81C; &amp;#xC774;&amp;#xB97C; &amp;#xCF54;&amp;#xB4DC; &amp;#xB808;&amp;#xBCA8;&amp;#xB85C; &amp;#xC870;&amp;#xAE08;&amp;#xC529; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xBCF4;&amp;#xB294; &amp;#xCC45;&amp;#xC758; &amp;#xC804;&amp;#xAC1C;&amp;#xAC00; &amp;#xD2B9;&amp;#xD788; &amp;#xB9D8;&amp;#xC5D0; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xBB3C;&amp;#xB860;, &amp;#xC6A9;&amp;#xC5B4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC815;&amp;#xB9AC;&amp;#xB3C4; &amp;#xC798;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB2E4;! &amp;#xB2F9;&amp;#xBD84;&amp;#xAC04;&amp;#xC740; &amp;#xAD00;&amp;#xB828; &amp;#xAC1C;&amp;#xB150;&amp;#xC744; &amp;#xC801;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD3EC;&amp;#xC2A4;&amp;#xD305;&amp;#xC744; &amp;#xC791;&amp;#xC131;&amp;#xD574;&amp;#xBCFC; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774;&amp;#xACE0;, &amp;#xC774;&amp;#xD574;&amp;#xAC00; &amp;#xC548;&amp;#xB418;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC790;&amp;#xB8CC;&amp;#xB97C; &amp;#xCC3E;&amp;#xC544;&amp;#xC11C; &amp;#xBCF4;&amp;#xC644;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC73C;&amp;#xB85C; &amp;#xACF5;&amp;#xBD80;&amp;#xB97C; &amp;#xC9C4;&amp;#xD589;&amp;#xD558;&amp;#xBA74; &amp;#xC88B;&amp;#xACA0;&amp;#xB2E4;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xC774; &amp;#xB4E4;&amp;#xC5C8;&amp;#xB2E4;.&lt;/p&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/139</guid>
      <comments>https://stylishc.tistory.com/139#entry139comment</comments>
      <pubDate>Sun, 26 May 2019 21:15:44 +0900</pubDate>
    </item>
    <item>
      <title>MapStruct 맛보기</title>
      <link>https://stylishc.tistory.com/138</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;mume markdown-preview   &quot;&gt;
&lt;h1 id=&quot;mapstruct&quot; class=&quot;mume-header&quot;&gt;mapStruct&lt;/h1&gt;
&lt;h2 id=&quot;summary-why&quot; class=&quot;mume-header&quot; data-ke-size=&quot;size26&quot;&gt;Summary &amp;amp; Why?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입 세이프하게 bean 매핑을 도와주는 어노테이션 프로세서&lt;/li&gt;
&lt;li&gt;보통 JPA 기반의 어플리케이션을 개발하게 되면 만나게 되는 DTO 변환 작업은 대부분이 반복적인 작업이 대부분&lt;/li&gt;
&lt;li&gt;ModelMapper와 같은 매핑 구현체가 존재하지만, ModelMapper의 경우 리플렉션 기반으로 동작하기도 하고 퍼포먼스에 대한 이슈가 많은편&lt;/li&gt;
&lt;li&gt;도메인 객체를 풍부하게 사용하면서, 반환 데이터가 달라지게 될 경우 이를 적절하고 큰 힘을 들이지 않고 매핑할 수 있도록 도와주는 것이 바로 mapStruct&lt;/li&gt;
&lt;li&gt;&lt;i&gt;mapStruct 역시 메뉴얼에서 확인할 수 있듯이, 편하게 사용하려면 어느정도의 학습 기간을 거쳐야 편하게 사용할 수 있는듯하다.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;simple-usage&quot; class=&quot;mume-header&quot; data-ke-size=&quot;size26&quot;&gt;Simple Usage&lt;/h2&gt;
&lt;h3 id=&quot;%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD&quot; class=&quot;mume-header&quot; data-ke-size=&quot;size23&quot;&gt;개발 환경&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kotlin 1.3.31&lt;/li&gt;
&lt;li&gt;Spring BOOT 2.1.5 RELEASE(WEB, DATA-JPA)&lt;/li&gt;
&lt;li&gt;H2&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    val kotlinVersion = &quot;1.3.31&quot;
    id(&quot;org.springframework.boot&quot;) version &quot;2.1.5.RELEASE&quot;
    id(&quot;io.spring.dependency-management&quot;) version &quot;1.0.7.RELEASE&quot;
    id(&quot;org.jetbrains.kotlin.jvm&quot;) version kotlinVersion
    id(&quot;org.jetbrains.kotlin.plugin.spring&quot;) version kotlinVersion
    id(&quot;org.jetbrains.kotlin.plugin.jpa&quot;) version kotlinVersion
    id(&quot;org.jetbrains.kotlin.kapt&quot;) version kotlinVersion
}

group = &quot;me.daniel&quot;
version = &quot;0.0.1-SNAPSHOT&quot;
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

noArg {
    annotation(&quot;javax.persistence.Entity&quot;)
    annotation(&quot;javax.persistence.MappedSuperclass&quot;)
    annotation(&quot;javax.persistence.Embeddable&quot;)
}
allOpen {
    annotation(&quot;javax.persistence.Entity&quot;)
    annotation(&quot;javax.persistence.MappedSuperclass&quot;)
    annotation(&quot;javax.persistence.Embeddable&quot;)
}

dependencies {
    implementation(&quot;org.springframework.boot:spring-boot-starter-data-jpa&quot;)
    implementation(&quot;org.springframework.boot:spring-boot-starter-web&quot;)
    implementation(&quot;com.fasterxml.jackson.module:jackson-module-kotlin&quot;)
    implementation(&quot;org.jetbrains.kotlin:kotlin-reflect&quot;)
    implementation(&quot;org.jetbrains.kotlin:kotlin-stdlib-jdk8&quot;)
    runtimeOnly(&quot;com.h2database:h2&quot;)
    testImplementation(&quot;org.springframework.boot:spring-boot-starter-test&quot;)
    // map-struct
    // map-struct Annotation Processor
    implementation(&quot;org.mapstruct:mapstruct:1.3.0.Final&quot;)
    kapt(&quot;org.mapstruct:mapstruct-processor:1.3.0.Final&quot;)
    kaptTest(&quot;org.mapstruct:mapstruct-processor:1.3.0.Final&quot;)

}

tasks.withType&amp;lt;KotlinCompile&amp;gt; {
    kotlinOptions {
        freeCompilerArgs = listOf(&quot;-Xjsr305=strict&quot;)
        jvmTarget = &quot;1.8&quot;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;@Mapper
interface UserMapper {
    fun toUser(req: CreateDTO): User
    fun fromUser(user: User): ResponseDTO
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;kapt를 활용하여 매퍼 클래스에 대응하는 Java 구현체를 생성해주는데, 도메인 객체와 DTO 객체간의 1:1 매핑을 지원하며, 1:1 매핑이 원활하게 되기 위해서는 Source 쪽의 타입 선언와 Target쪽의 타입 선언이 똑같아야 자연스럽게 매핑을 처리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;@Mapper
public interface AddressMapper {

    @Mapping(source = &quot;person.description&quot;, target = &quot;description&quot;)
    @Mapping(source = &quot;address.houseNo&quot;, target = &quot;houseNumber&quot;)
    DeliveryAddressDto personAndAddressToDeliveryAddressDto(Person person, Address address);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1:1 매핑이 아니라고 추가적인 매핑을 진행해야 하는 경우, 위와 같이 매핑에 대한 룰을 지정해주면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;@Mapper(componentModel = &quot;spring&quot;)
interface UserMapper {
    @Mapping(source = &quot;roles&quot;, target = &quot;_roles&quot;, qualifiedByName = [&quot;toUserRole&quot;])
    fun toUser(req: CreateDTO): User
    fun fromUser(user: User): ResponseDTO

    @Named(&quot;toUserRole&quot;)
    fun toUserRole(roles: List&amp;lt;UserRole.Role&amp;gt;) = roles.map {
        UserRole().apply {
            this.role = it
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;추가적인 매핑말고도 조금 복잡한 매핑 룰이 필요한 경우 인터페이스의 &lt;code&gt;default&lt;/code&gt; 메서드를 선언하여 이를 활용할 수 있다.(코틀린에서는 바로 method를 선언해두면 이게 default 메서드 역할을 수행해준다.) 이 때 사용하는 어노테이션이 바로 &lt;code&gt;@Named&lt;/code&gt; 어노테이션으로 선언해놓은 값을 &lt;code&gt;qualifiedByName&lt;/code&gt;에 매핑해주면 된다.&lt;/li&gt;
&lt;li&gt;생성한 매퍼에 대해 컴포넌트 모델을 지정 할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;default: 컴포넌트 모델을 생성하지 않으며, &lt;code&gt;Mappers#getMapper(Class)&lt;/code&gt;로 선언해두었던 매퍼 인터페이스의 타입으로 객체를 가져올 수 있다.&lt;/li&gt;
&lt;li&gt;spring, jsr330: 컴포넌트 모델을 스프링 어플리케이션 컨텍스트에서 컴포넌트 스캔을 통하여 DI 받을 수 있다. 실제 선언해둔 코드 일부를 살펴보면 아래와 같다.&lt;br /&gt;&lt;img src=&quot;https://i.imgur.com/PrFkBbM.png&quot; alt=&quot;mapstruct-img&quot; /&gt;&lt;/li&gt;
&lt;li&gt;cdi&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tip-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%A0%90&quot; class=&quot;mume-header&quot; data-ke-size=&quot;size26&quot;&gt;Tip &amp;amp; 사용 시 주의점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;source&lt;/code&gt;측과 &lt;code&gt;target&lt;/code&gt;측의 클래스 선언에서 기본 생성자가 반드시 선언되어 있어야 한다.&lt;/li&gt;
&lt;li&gt;Kotlin, SpringBoot, Data-JPA와 함께 사용하게 될 경우, &lt;code&gt;kotlin-jpa&lt;/code&gt; 플러그인을 활용하여 no-argument-consturctor에 대해 코드를 생성해주는 방식으로 기본 셋팅을 해놓고 진행하는데, 기본 생성자에 대해 바이트코드 레벨에서 Generation을 해주기 때문에 &lt;b&gt;결국 기본 생성자를 명시적으로 선언해줘야 하는 불편함이 존재하는거 같다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;@Entity(name = &quot;T_USER&quot;)
class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long = 0L

    @Column(name = &quot;name&quot;, length = 20)
    var name: String = &quot;&quot;

    @Column(name = &quot;email&quot;, length = 100)
    var email: String = &quot;&quot;

    @Column(name = &quot;gender&quot;, length = 10)
    var gender: UserGender = UserGender.MALE

    @OneToMany(mappedBy = &quot;user&quot;, cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
    @BatchSize(size = 30)
    var _roles: MutableList&amp;lt;UserRole&amp;gt; = mutableListOf()

    @Column(name = &quot;foreigner&quot;, length = 10)
    var foreigner: Boolean = false

    @CreatedDate
    @Column(name = &quot;createdAt&quot;, columnDefinition = &quot;DATETIME&quot;)
    var _createdAt: LocalDateTime = LocalDateTime.now()

    @LastModifiedDate
    @Column(name = &quot;updatedAt&quot;, columnDefinition = &quot;DATETIME&quot;)
    var _updatedAt: LocalDateTime = LocalDateTime.now()

    enum class UserGender {
        MALE, FEMALE
    }

    constructor(name: String = &quot;&quot;, email: String = &quot;&quot;) {
        this.name = name
        this.email = email
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 엔티티 코드 예제인데, 위 코드와 같이 별도의 생성자 선언을 안해두고 사용했을 경우 기본 생성자만 포함이 된다. 만약 별도의 생성자 선언이 필요한 경우 코드 가장 하단과 같이 필요한 선언을 해두면 되며 Kotlin의 Argument Default Value를 적극적으로 활용하여 필수 인자값과 그렇지 않은 값을 분리하는 전략을 취하는 것이 좋을거 같다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컬럼과 매핑되는 프로퍼티가 아닌 값을 매핑하게 될 경우가 생길 수 있는데, 이럴 때 사용하면 좋은 것이 Lazy Delegate이다. 관계 매핑에 사용되는 것이 아닌 해당 도메인 객체의 상태를 유연하게 유연하게 표현할 수 있으며 바인딩한 프로퍼티를 바로 mapStruct 바인딩으로 넘길 수 있어서 실제 예제 코드를 작성해보니 편리함을 느낄 수 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot;&gt;&lt;code&gt;class User {
    ...생략...

    @get:Transient
    @delegate:Transient
    val roles: MutableList&amp;lt;String&amp;gt; by lazy {
        this._roles.map { it.role.name }.toMutableList()
    }

    @get:Transient
    @delegate:Transient
    val createdAt: LocalDateTime by lazy {
        this._createdAt
    }

    @get:Transient
    @delegate:Transient
    val updatedAt: LocalDateTime by lazy {
        this._updatedAt
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Generation 해주는 코드는 기본적으로 세터 기반의 데이터 바인딩을 해주고 있는 것을 확인 할수 있는데,이를 빌더 기반으로 변경하는 것도 가능하다고 한다. 빌더 구현체로는 유명한 Lombok, AutoValue 등이 사용 가능하다고 메뉴얼에 명시되어 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://mapstruct.org/documentation/stable/reference/html/#mapping-with-builders&quot;&gt;참고 링크&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;하지만, 코틀린 기반으로 사용하게 될 경우 보통 lombok과 같은 빌더 구현을 대체 해주는 구현이 없어서 당분간은 세터 기반의 주입을 사용해야 될듯&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드는 &lt;a href=&quot;https://github.com/thefeeling/spring-code/tree/develop/kotlin-spring-boot-mapstruct&quot;&gt;링크&lt;/a&gt;를 통하여 확인 할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;</description>
      <category>Programing/Spring</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/138</guid>
      <comments>https://stylishc.tistory.com/138#entry138comment</comments>
      <pubDate>Sun, 26 May 2019 20:58:18 +0900</pubDate>
    </item>
    <item>
      <title>20190507</title>
      <link>https://stylishc.tistory.com/137</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190507&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-rxjava-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%BD%EA%B8%B0%EC%8B%A4%EC%8A%B5&quot;&gt;1. RxJava &amp;#xB9AC;&amp;#xC561;&amp;#xD2F0;&amp;#xBE0C; &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; &amp;#xC77D;&amp;#xAE30;/&amp;#xC2E4;&amp;#xC2B5;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;4&amp;#xC7A5;, RxJava &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;RxJava&amp;#xC640; RxKotlin&amp;#xB294; Reactive Stream &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xC5D0; &amp;#xD574;&amp;#xB2F9;&amp;#xD558;&amp;#xB294; &lt;code&gt;Flowable&lt;/code&gt;&amp;#xACFC; &lt;code&gt;Observable&lt;/code&gt;&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xBFD0;&amp;#xB9CC; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C; &lt;code&gt;&amp;#xBCC0;&amp;#xD658;&lt;/code&gt;, &lt;code&gt;&amp;#xD544;&amp;#xD130;&lt;/code&gt;, &lt;code&gt;&amp;#xACB0;&amp;#xD569;&lt;/code&gt;, &lt;code&gt;&amp;#xC0C1;&amp;#xD0DC; &amp;#xD1B5;&amp;#xC9C0;&lt;/code&gt;, &lt;code&gt;&amp;#xC9D1;&amp;#xACC4;&lt;/code&gt; &amp;#xB4F1;&amp;#xC758; &amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC591;&amp;#xD55C; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB294; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xCCB4;&amp;#xC778;(MethodChain) &amp;#xD639;&amp;#xC740; FluentAPI &amp;#xBC29;&amp;#xC2DD;&amp;#xC73C;&amp;#xB85C; &amp;#xC2E4;&amp;#xC81C; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xC5D0;&amp;#xAC8C; &amp;#xC804;&amp;#xB2EC;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xCD5C;&amp;#xC885; &amp;#xD615;&amp;#xD0DC;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB85C; &amp;#xC27D;&amp;#xAC8C; &amp;#xBCC0;&amp;#xD658;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xC758; &amp;#xC885;&amp;#xB958;&amp;#xBCC4;&amp;#xB85C; &amp;#xAE30;&amp;#xBCF8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC2E4;&amp;#xD589;&amp;#xD558;&amp;#xB294; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xAC00; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xC774;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC9C0;&amp;#xC815;&amp;#xC740; &amp;#xBCC4;&amp;#xB3C4; &amp;#xC2A4;&amp;#xCE90;&amp;#xC904;&amp;#xB7EC; &amp;#xC9C0;&amp;#xC815;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;1~3&amp;#xC7A5;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; Flowable/Observable&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC2E4;&amp;#xC2B5;&amp;#xC744; &amp;#xD558;&amp;#xB098;&amp;#xB3C4; &amp;#xC548; &amp;#xBE7C;&amp;#xB193;&amp;#xACE0; &amp;#xD574;&amp;#xBD10;&amp;#xC11C; &amp;#xADF8;&amp;#xB7F0;&amp;#xC9C0; 4&amp;#xC7A5; &amp;#xCCAB; &amp;#xBD80;&amp;#xBD84;&amp;#xC778; Flowable/Observable&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xAE4C;&amp;#xC9C0;&amp;#xB294; &amp;#xD06C;&amp;#xAC8C; &amp;#xB9C9;&amp;#xD798;&amp;#xC774; &amp;#xC5C6;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xBCC0;&amp;#xD658; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xBD80;&amp;#xD130; &amp;#xC2E0;&amp;#xACBD; &amp;#xC368;&amp;#xC11C; &amp;#xBD10;&amp;#xC57C; &amp;#xD560; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xB9CE;&amp;#xC774; &amp;#xBCF4;&amp;#xC778;&amp;#xB2E4;. &amp;#xD2B9;&amp;#xD788; &lt;code&gt;flatMap&lt;/code&gt; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC00;&amp;#xC9C0; &amp;#xBC29;&amp;#xBC95;&amp;#xB4E4; &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; &lt;code&gt;concatMap&lt;/code&gt;&amp;#xACFC; &lt;code&gt;concatMapEager&lt;/code&gt;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC; &amp;#xBC29;&amp;#xC2DD;&amp;#xC740; &amp;#xBE44;&amp;#xC2B7;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xB0B4;&amp;#xBD80; &amp;#xBA54;&amp;#xCEE4;&amp;#xB2C8;&amp;#xC998;&amp;#xC740; &amp;#xBC84;&amp;#xD37C;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB0D0; &amp;#xC548;&amp;#xD558;&amp;#xB0D0;&amp;#xB85C; &amp;#xC0DD;&amp;#xAC01;&amp;#xBCF4;&amp;#xB2E4; &amp;#xD06C;&amp;#xAC8C; &amp;#xB2E4;&amp;#xB984;&amp;#xC744; &amp;#xC54C; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xB2E4;.  &amp;#xCC45;&amp;#xC5D0;&amp;#xC11C; &amp;#xC124;&amp;#xBA85;&amp;#xC744; &amp;#xC77C;&amp;#xBD80;&amp;#xB7EC; &amp;#xAC08;&amp;#xAC8C; &amp;#xC548;&amp;#xB2EC;&amp;#xC544; &amp;#xB193;&amp;#xC740; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xC798; &amp;#xC548;&amp;#xC4F0;&amp;#xC774;&amp;#xB098;? &amp;#xC774;&amp;#xB7F0; &amp;#xC0DD;&amp;#xAC01;&amp;#xB3C4; &amp;#xB4E4;&amp;#xC5C8;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC5B4;&amp;#xCC28;&amp;#xD53C; &amp;#xD55C;&amp;#xB540; &amp;#xD55C;&amp;#xB540; &amp;#xC608;&amp;#xC81C;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD574;&amp;#xB3C4; &amp;#xC2E4;&amp;#xC81C; &amp;#xC5C5;&amp;#xBB34;&amp;#xB098; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD560; &amp;#xB54C;&amp;#xB294; &amp;#xAE4C;&amp;#xBA39;&amp;#xB294; &amp;#xC77C;&amp;#xC774; &amp;#xB2E4;&amp;#xBC18;&amp;#xC0AC;&amp;#xC774;&amp;#xB2C8; &amp;#xC77C;&amp;#xB2E8; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC; &amp;#xD558;&amp;#xB098;&amp;#xC529; &amp;#xB2E4; &amp;#xD0C0;&amp;#xC774;&amp;#xD551;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74;&amp;#xC11C; &amp;#xAC1C;&amp;#xB150;&amp;#xC774;&amp;#xB791; &amp;#xAC10;&amp;#xC744; &amp;#xC775;&amp;#xD788;&amp;#xB294;&amp;#xAC8C; &amp;#xC911;&amp;#xC694;&amp;#xD560;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%84%A4%EA%B3%84&quot;&gt;2. &amp;#xD14C;&amp;#xC774;&amp;#xBE14; &amp;#xC124;&amp;#xACC4;&lt;/h1&gt;

&lt;p&gt;&amp;#xD55C; &amp;#xB2EC; &amp;#xC804;&amp;#xC5D0; &amp;#xD14C;&amp;#xC774;&amp;#xBE14; &amp;#xC124;&amp;#xACC4;&amp;#xB97C; &amp;#xD560; &amp;#xC77C;&amp;#xC774; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC791;&amp;#xC131;&amp;#xD588;&amp;#xB358; &amp;#xC2A4;&amp;#xD0A4;&amp;#xB9C8;&amp;#xC640; &amp;#xC2DC;&amp;#xD000;&amp;#xC2A4; &amp;#xBB38;&amp;#xC11C;&amp;#xB97C; &amp;#xBCF4;&amp;#xBA74;&amp;#xC11C; &amp;#xAE09;&amp;#xD568;&amp;#xC73C;&amp;#xB85C; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD55C; &amp;#xC624;&amp;#xD0C0;&amp;#xC640; &amp;#xC2E4;&amp;#xC81C; &amp;#xC124;&amp;#xACC4;&amp;#xB97C; &amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xB193;&amp;#xCE5C; &amp;#xBD80;&amp;#xBD84;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xC5EC; github&amp;#xC5D0; &amp;#xB2E4;&amp;#xC2DC; &amp;#xC62C;&amp;#xB824;&amp;#xB450;&amp;#xC5C8;&amp;#xB2E4;. plantuml&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xB290;&amp;#xB07C;&amp;#xB294; &amp;#xAC70;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xD3B8;&amp;#xB9AC;&amp;#xD558;&amp;#xBA74;&amp;#xC11C;&amp;#xB3C4; &amp;#xC2E4;&amp;#xC81C;&amp;#xB85C; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD55C; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778;&amp;#xC744; &amp;#xADF8;&amp;#xB9B4; &amp;#xB54C;&amp;#xB294; &amp;#xC774;&amp;#xAC8C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC70;&amp;#xB098; &amp;#xD06C;&amp;#xAC8C; &amp;#xB2E4;&amp;#xB984;&amp;#xC774; &amp;#xC5C6;&amp;#xC74C;&amp;#xC744; &amp;#xB9E4;&amp;#xBC88; &amp;#xB290;&amp;#xB07C;&amp;#xACE4; &amp;#xD55C;&amp;#xB2E4;. &amp;#xADF8;&amp;#xB798;&amp;#xB3C4; &amp;#xB9C8;&amp;#xC6B0;&amp;#xC2A4;&amp;#xB85C; &amp;#xC77C;&amp;#xC77C;&amp;#xC774; &amp;#xADF8;&amp;#xB9AC;&amp;#xB294; &amp;#xC218;&amp;#xACE0;&amp;#xB97C; &amp;#xB35C;&amp;#xC5B4;&amp;#xC8FC;&amp;#xB2C8; &amp;#xADF8;&amp;#xAC83;&amp;#xB9CC;&amp;#xC73C;&amp;#xB85C;&amp;#xB3C4; &amp;#xC5BC;&amp;#xB9C8;&amp;#xB098; &amp;#xAC10;&amp;#xC0AC;&amp;#xD55C; &amp;#xC77C;&amp;#xC778;&amp;#xAC00;!&lt;/p&gt;
&lt;p&gt;&amp;#xC124;&amp;#xACC4;&amp;#xB97C; &amp;#xD574;&amp;#xB193;&amp;#xACE0; &amp;#xB098;&amp;#xC11C; &amp;#xBCF4;&amp;#xB2C8;, &amp;#xD788;&amp;#xC2A4;&amp;#xD1A0;&amp;#xB9AC; &amp;#xC131;&amp;#xACA9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; JSON serialize &amp;#xD6C4; &amp;#xB2E8;&amp;#xC77C; &amp;#xB808;&amp;#xCF54;&amp;#xB4DC;&amp;#xB85C; &amp;#xBCF4;&amp;#xAD00;&amp;#xD558;&amp;#xB294; &amp;#xC124;&amp;#xACC4; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC120;&amp;#xD0DD;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xB9C8;&amp;#xC74C;&amp;#xC5D0; &amp;#xAC78;&amp;#xB9B0;&amp;#xB2E4;. &amp;#xCC28;&amp;#xB77C;&amp;#xB9AC;, JSON &amp;#xCEEC;&amp;#xB7FC;&amp;#xC744; &amp;#xD65C;&amp;#xC6A9;&amp;#xD574;&amp;#xC11C; &amp;#xC368;&amp;#xBCF4;&amp;#xB294; &amp;#xAC74; &amp;#xC5B4;&amp;#xB560;&amp;#xC744;&amp;#xAE4C; &amp;#xD558;&amp;#xB294; &amp;#xC0DD;&amp;#xAC01;&amp;#xB3C4; &amp;#xB4E0;&amp;#xB2E4;.&lt;/p&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/137</guid>
      <comments>https://stylishc.tistory.com/137#entry137comment</comments>
      <pubDate>Tue, 7 May 2019 21:51:24 +0900</pubDate>
    </item>
    <item>
      <title>RxJava, RxKotlin #1 ReactiveStream/기본개념</title>
      <link>https://stylishc.tistory.com/136</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;Rx#1&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;reactive-programming&quot;&gt;Reactive Programming&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAC00; &amp;#xD1B5;&amp;#xC9C0;&amp;#xB418;&amp;#xBA74; &amp;#xC774;&amp;#xC5D0; &amp;#xBC18;&amp;#xC751;&amp;#xD558;&amp;#xC5EC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC758; &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; &amp;#xBAA8;&amp;#xB378;. &amp;#xC989;, &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB7A8;&amp;#xC5D0;&amp;#xC11C; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC9C1;&amp;#xC811; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0;&amp;#xC640;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;(pull)&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC740; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;(push).&lt;/li&gt;
&lt;li&gt;&amp;#xC774;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xB0B4;&amp;#xB294; &lt;code&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/code&gt;&amp;#xC640; &amp;#xC774;&amp;#xB97C; &amp;#xC18C;&amp;#xBE44;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &lt;code&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/code&gt;&amp;#xB85C; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xB098;&amp;#xB220; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xD504;&amp;#xB85C;&amp;#xC138;&amp;#xC2A4;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xC640; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC758; &amp;#xC5ED;&amp;#xD560;&amp;#xC774; &amp;#xBD84;&amp;#xB9AC;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC73C;&amp;#xBBC0;&amp;#xB85C;, &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC0DD;&amp;#xC0B0;&amp;#xD558;&amp;#xC5EC; &amp;#xC804;&amp;#xB2EC;&amp;#xD558;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xAE4C;&amp;#xC9C0; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xBA70;, &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC544;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xB9CC;&amp;#xC744; &amp;#xC218;&amp;#xD589;&amp;#xD55C;&amp;#xB2E4;. &amp;#xC989;, &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC640; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xB294; &amp;#xAC01;&amp;#xAC01;&amp;#xC758; &amp;#xC5ED;&amp;#xD560;&amp;#xB9CC; &amp;#xCDA9;&amp;#xC2E4;&amp;#xD558;&amp;#xAC8C; &amp;#xC218;&amp;#xD589;&amp;#xD558;&amp;#xBA74; &amp;#xB418;&amp;#xACE0;, &amp;#xBC18;&amp;#xB300;&amp;#xD3B8;&amp;#xC5D0;&amp;#xC11C; &amp;#xC5B4;&amp;#xB5A4; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xD558;&amp;#xB294;&amp;#xC9C0;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xAD00;&amp;#xC2EC; &amp;#xBC16;&amp;#xC758; &amp;#xC77C;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC774;&amp;#xCC98;&amp;#xB7FC;, &amp;#xC5ED;&amp;#xD560;&amp;#xC774; &amp;#xBD84;&amp;#xB9AC;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC27D;&amp;#xAC8C; &amp;#xBE44;&amp;#xB3D9;&amp;#xAE30; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;reactive-stream&quot;&gt;Reactive Stream&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC2A4;&amp;#xD2B8;&amp;#xB9BC;&lt;/code&gt;&amp;#xC744; &lt;code&gt;&amp;#xBE44;&amp;#xB3D9;&amp;#xAE30;&lt;/code&gt;&amp;#xB85C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xACF5;&amp;#xD1B5; &amp;#xBA54;&amp;#xCEE4;&amp;#xB2C8;&amp;#xC998;/&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;.&lt;/li&gt;
&lt;li&gt;Reactive Stream&amp;#xC740; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB9CC; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC0C1;&amp;#xC138; &amp;#xAD6C;&amp;#xD604;&amp;#xC740; &amp;#xAC01; &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;/&amp;#xD504;&amp;#xB808;&amp;#xC784;&amp;#xC6CC;&amp;#xD06C;&amp;#xC5D0;&amp;#xC11C; &amp;#xCC45;&amp;#xC784;&amp;#xC744; &amp;#xAC00;&amp;#xC838;&amp;#xAC04;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EA%B5%AC%ED%98%84%EC%B2%B4&quot;&gt;&amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Reactive_Streams#cite_note-17&quot;&gt;&amp;#xC704;&amp;#xD0A4;&amp;#xD53C;&amp;#xB514;&amp;#xC544; &amp;#xCC38;&amp;#xACE0;&lt;/a&gt;&lt;br&gt;
&lt;img src=&quot;https://cdn-images-1.medium.com/max/1600/1*70ZfCOn5Qadc8nZ_k_JhKQ.png&quot; alt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%8A%A4%ED%8A%B8%EB%A6%BC&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB9BC;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Collection&amp;#xACFC; &amp;#xAC19;&amp;#xC774; &amp;#xC774;&amp;#xBBF8; &amp;#xC0DD;&amp;#xC131;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xD3EC;&amp;#xD568;&amp;#xD558;&amp;#xC5EC; &lt;code&gt;&amp;#xC55E;&amp;#xC73C;&amp;#xB85C; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xB370;&amp;#xC774;&amp;#xD130;&lt;/code&gt; &amp;#xD639;&amp;#xC740; &lt;code&gt;&amp;#xBC1C;&amp;#xC0DD; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC774; &amp;#xC788;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&lt;/code&gt;&amp;#xAE4C;&amp;#xC9C0; &amp;#xD3EC;&amp;#xD568;&amp;#xD558;&amp;#xB294; &amp;#xAC1C;&amp;#xB150;.&lt;/li&gt;
&lt;li&gt;&amp;#xD0A4;&amp;#xBCF4;&amp;#xB4DC; &amp;#xD639;&amp;#xC740; &amp;#xB9C8;&amp;#xC6B0;&amp;#xC2A4; &amp;#xAC19;&amp;#xC740; UI&amp;#xC0C1;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD; &amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xD574;&amp;#xB2F9; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAE4C;&amp;#xC9C0; &amp;#xD3EC;&amp;#xD568;&amp;#xD558;&amp;#xB294; &amp;#xAC1C;&amp;#xB150;&amp;#xC73C;&amp;#xB85C; &amp;#xBCFC; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB9BC;&amp;#xC758; &amp;#xC18C;&amp;#xC2A4; &amp;#xC885;&amp;#xB958;&amp;#xB4E4;&amp;#xC740;?
&lt;ul&gt;
&lt;li&gt;SQL &amp;#xCFFC;&amp;#xB9AC;&amp;#xB4E4;&lt;/li&gt;
&lt;li&gt;GUI &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&lt;/li&gt;
&lt;li&gt;HTTP &amp;#xAE30;&amp;#xBC18; &amp;#xC11C;&amp;#xBE44;&amp;#xC2A4;&lt;/li&gt;
&lt;li&gt;TCP &amp;#xC18C;&amp;#xCF13;&lt;/li&gt;
&lt;li&gt;&amp;#xD30C;&amp;#xC77C; &amp;#xC2DC;&amp;#xC2A4;&amp;#xD15C;&lt;/li&gt;
&lt;li&gt;Kafka&amp;#xAC19;&amp;#xC740; &amp;#xBA54;&amp;#xC2DC;&amp;#xC9C0; &amp;#xD050;&amp;#xB4E4;&lt;/li&gt;
&lt;li&gt;&amp;#xAE30;&amp;#xD0C0; &amp;#xB4F1;&amp;#xB4F1;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EA%B5%AC%EC%84%B1&quot;&gt;&amp;#xAD6C;&amp;#xC131;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reactive Stream&amp;#xC740; Publisher&amp;#xC640; Subscriber&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&amp;#xB418;&amp;#xBA70;, Subscriber&amp;#xAC00; Publisher&amp;#xB97C; &amp;#xAD6C;&amp;#xB3C5;&amp;#xD558;&amp;#xBA74; Publisher&amp;#xAC00; &amp;#xD1B5;&amp;#xBCF4;&amp;#xD558;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xC74C;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xlink=&quot;http://www.w3.org/1999/xlink&quot; contentscripttype=&quot;application/ecmascript&quot; contentstyletype=&quot;text/css&quot; height=&quot;530px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:428px;height:530px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 428 530&quot; width=&quot;428px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1bpxalwgh9wlx&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; height=&quot;90.8867&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;296&quot; x=&quot;13&quot; y=&quot;334.6621&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; height=&quot;44.2656&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot; width=&quot;296&quot; x=&quot;13&quot; y=&quot;381.2832&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;44&quot; x2=&quot;44&quot; y1=&quot;86.4883&quot; y2=&quot;442.5488&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;278&quot; x2=&quot;278&quot; y1=&quot;86.4883&quot; y2=&quot;442.5488&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;23&quot; y=&quot;83.5352&quot;&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;44&quot; cy=&quot;13&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M44,21 L44,48 M31,29 L57,29 M44,48 L31,63 M44,48 L57,63 &quot; fill=&quot;none&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;23&quot; y=&quot;455.084&quot;&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;44&quot; cy=&quot;468.0371&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M44,476.0371 L44,503.0371 M31,484.0371 L57,484.0371 M44,503.0371 L31,518.0371 M44,503.0371 L57,518.0371 &quot; fill=&quot;none&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;257&quot; y=&quot;83.5352&quot;&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;278&quot; cy=&quot;13&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M278,21 L278,48 M265,29 L291,29 M278,48 L265,63 M278,48 L291,63 &quot; fill=&quot;none&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;257&quot; y=&quot;455.084&quot;&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;278&quot; cy=&quot;468.0371&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M278,476.0371 L278,503.0371 M265,484.0371 L291,484.0371 M278,503.0371 L265,518.0371 M278,503.0371 L291,518.0371 &quot; fill=&quot;none&quot; filter=&quot;url(#f1bpxalwgh9wlx)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;55,113.7988,45,117.7988,55,121.7988,51,117.7988&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;49&quot; x2=&quot;277&quot; y1=&quot;117.7988&quot; y2=&quot;117.7988&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;113.0566&quot;&gt;1&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;91&quot; x=&quot;74&quot; y=&quot;113.0566&quot;&gt;&amp;#xAD6C;&amp;#xB3C5;(subscribe)&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;266,143.1094,276,147.1094,266,151.1094,270,147.1094&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;44&quot; x2=&quot;272&quot; y1=&quot;147.1094&quot; y2=&quot;147.1094&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;51&quot; y=&quot;142.3672&quot;&gt;2&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;196&quot; x=&quot;64&quot; y=&quot;142.3672&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4; &amp;#xC900;&amp;#xBE44; &amp;#xC644;&amp;#xB8CC;(onSubscribe)&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;55,172.4199,45,176.4199,55,180.4199,51,176.4199&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;49&quot; x2=&quot;277&quot; y1=&quot;176.4199&quot; y2=&quot;176.4199&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;171.6777&quot;&gt;3&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;197&quot; x=&quot;74&quot; y=&quot;171.6777&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC694;&amp;#xCCAD;(Subscription.request)&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;44&quot; x2=&quot;86&quot; y1=&quot;205.7305&quot; y2=&quot;205.7305&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;86&quot; x2=&quot;86&quot; y1=&quot;205.7305&quot; y2=&quot;218.7305&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;45&quot; x2=&quot;86&quot; y1=&quot;218.7305&quot; y2=&quot;218.7305&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;55,214.7305,45,218.7305,55,222.7305,51,218.7305&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;51&quot; y=&quot;200.9883&quot;&gt;4&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;59&quot; x=&quot;64&quot; y=&quot;200.9883&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC0DD;&amp;#xC0B0;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;266,244.041,276,248.041,266,252.041,270,248.041&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;44&quot; x2=&quot;272&quot; y1=&quot;248.041&quot; y2=&quot;248.041&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;51&quot; y=&quot;243.2988&quot;&gt;5&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;113&quot; x=&quot;64&quot; y=&quot;243.2988&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4;(onNext)&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;278&quot; x2=&quot;320&quot; y1=&quot;277.3516&quot; y2=&quot;277.3516&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;320&quot; x2=&quot;320&quot; y1=&quot;277.3516&quot; y2=&quot;290.3516&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;279&quot; x2=&quot;320&quot; y1=&quot;290.3516&quot; y2=&quot;290.3516&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;289,286.3516,279,290.3516,289,294.3516,285,290.3516&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;285&quot; y=&quot;272.6094&quot;&gt;6&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;118&quot; x=&quot;298&quot; y=&quot;272.6094&quot;&gt;&amp;#xD1B5;&amp;#xBCF4;&amp;#xBC1B;&amp;#xC740; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;55,315.6621,45,319.6621,55,323.6621,51,319.6621&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;49&quot; x2=&quot;277&quot; y1=&quot;319.6621&quot; y2=&quot;319.6621&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;314.9199&quot;&gt;7&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;197&quot; x=&quot;74&quot; y=&quot;314.9199&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC694;&amp;#xCCAD;(Subscription.request)&lt;/text&gt;&lt;path d=&quot;M13,334.6621 L75,334.6621 L75,341.6621 L65,351.6621 L13,351.6621 L13,334.6621 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;90.8867&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;296&quot; x=&quot;13&quot; y=&quot;334.6621&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;28&quot; y=&quot;348.2305&quot;&gt;alt&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;154&quot; x=&quot;90&quot; y=&quot;347.2969&quot;&gt;[&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4;&amp;#xB97C; &amp;#xBAA8;&amp;#xB450; &amp;#xB9C8;&amp;#xCCE4;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;266,369.2832,276,373.2832,266,377.2832,270,373.2832&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;44&quot; x2=&quot;272&quot; y1=&quot;373.2832&quot; y2=&quot;373.2832&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;51&quot; y=&quot;368.541&quot;&gt;8&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;195&quot; x=&quot;64&quot; y=&quot;368.541&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4; &amp;#xC644;&amp;#xB8CC; &amp;#xD1B5;&amp;#xBCF4;(onComplete)&lt;/text&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;13&quot; x2=&quot;309&quot; y1=&quot;382.2832&quot; y2=&quot;382.2832&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;144&quot; x=&quot;18&quot; y=&quot;392.918&quot;&gt;[&amp;#xCC98;&amp;#xB9AC; &amp;#xC911; &amp;#xC5D0;&amp;#xB7EC;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD588;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;266,413.5488,276,417.5488,266,421.5488,270,417.5488&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;44&quot; x2=&quot;272&quot; y1=&quot;417.5488&quot; y2=&quot;417.5488&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;51&quot; y=&quot;412.8066&quot;&gt;9&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;102&quot; x=&quot;64&quot; y=&quot;412.8066&quot;&gt;&amp;#xC5D0;&amp;#xB7EC; &amp;#xD1B5;&amp;#xBCF4;(onError)&lt;/text&gt;&lt;!--
@startuml
actor 생산자 as A
actor 소비자 as B
autonumber
B -&gt; A: 구독(subscribe)
A -&gt; B: 데이터 통보 준비 완료(onSubscribe)
B -&gt; A: 데이터 요청(Subscription.request)
A -&gt; A: 데이터 생산
A -&gt; B: 데이터 통보(onNext)
B -&gt; B: 통보받은 데이터를 처리
B -&gt; A: 데이터 요청(Subscription.request)
alt 데이터 통보를 모두 마쳤을 경우
A -&gt; B: 데이터 통보 완료 통보(onComplete)
else 처리 중 에러가 발생했을 경우
A -&gt; B: 에러 통보(onError)
end
@enduml

PlantUML version 1.2019.03(Sun Mar 10 20:04:44 KST 2019)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 10.0.1+10
Operating System: Mac OS X
OS Version: 10.14.3
Default Encoding: US-ASCII
Language: ko
Country: KR
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xAD6C;&amp;#xB3C5;(subscribe)&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xBA74; &amp;#xC774;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; Subscription&amp;#xC774; &amp;#xC0DD;&amp;#xC131;&amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Subscriber&amp;#xAC00; Publisher&amp;#xB97C; &amp;#xAD6C;&amp;#xB3C5;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74; &amp;#xC774;&amp;#xD6C4; &amp;#xB2E8;&amp;#xACC4;&amp;#xB294; &amp;#xC9C4;&amp;#xD589;&amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;onComplete, onError&amp;#xC640; &amp;#xAC19;&amp;#xC774;, &amp;#xD655;&amp;#xC815; Action&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xBA74; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xC5D0;&amp;#xAC8C; &amp;#xD1B5;&amp;#xBCF4;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Subscriber&amp;#xB294; Publisher&amp;#xC5D0;&amp;#xAC8C; &amp;#xBC1B;&amp;#xC744; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC1C;&amp;#xC218;&amp;#xB97C; &amp;#xC694;&amp;#xCCAD; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xC694;&amp;#xCCAD; &amp;#xBC1B;&amp;#xC740; Publisher&amp;#xB294; &amp;#xB2E4;&amp;#xC2DC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC0DD;&amp;#xC0B0;&amp;#xD558;&amp;#xC5EC; Subscriber&amp;#xC5D0;&amp;#xAC8C; &amp;#xC804;&amp;#xB2EC;(onNext)&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xBC1B;&amp;#xC744; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC1C;&amp;#xC218;&amp;#xB97C; &amp;#xC694;&amp;#xCCAD;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xCE21;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC; &amp;#xC18D;&amp;#xB3C4;&amp;#xC640; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xCE21;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC; &amp;#xC18D;&amp;#xB3C4;&amp;#xAC00; &amp;#xB2E4;&amp;#xB97C; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC774;&amp;#xB97C; &amp;#xC81C;&amp;#xC5B4; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xC218;&amp;#xB2E8;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%ED%91%9C%EC%A4%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4&quot;&gt;&amp;#xD45C;&amp;#xC900; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&lt;/th&gt;
&lt;th&gt;&amp;#xC124;&amp;#xBA85;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Publisher&lt;/td&gt;
&lt;td&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC0DD;&amp;#xC131;/&amp;#xD1B5;&amp;#xBCF4;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subscriber&lt;/td&gt;
&lt;td&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xCC98;&amp;#xB9AC;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC694;&amp;#xCCAD;/ &amp;#xAD6C;&amp;#xB3C5; &amp;#xD574;&amp;#xC9C0; &amp;#xAC00;&amp;#xB2A5;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processor&lt;/td&gt;
&lt;td&gt;Publisher &amp;amp; Subscriber&amp;#xC758; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xBAA8;&amp;#xB450; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xC74C;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;#xC704; &amp;#xD45C;&amp;#xC900; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xBCF4;&amp;#xBA74; &amp;#xC54C; &amp;#xC218; &amp;#xC788;&amp;#xB4EF;&amp;#xC774;, &amp;#xBD84;&amp;#xBA85;&amp;#xD558;&amp;#xAC8C; &lt;code&gt;&amp;#xC5ED;&amp;#xD560; &amp;#xBD84;&amp;#xB9AC;&lt;/code&gt;&amp;#xAC00; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC74C;&amp;#xC744; &amp;#xC54C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC774;&amp;#xB294; &amp;#xACE7; &amp;#xCC98;&amp;#xB9AC; &amp;#xB2E8;&amp;#xC704; &amp;#xBCC4;&amp;#xB85C; &amp;#xAC1C;&amp;#xBCC4; &amp;#xCC45;&amp;#xC784;&amp;#xC744; &amp;#xAC00;&amp;#xC838; &amp;#xAC08; &amp;#xC218; &amp;#xC788;&amp;#xC74C;&amp;#xC744; &amp;#xB73B;&amp;#xD568;.&lt;/p&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EA%B7%9C%EC%B9%99&quot;&gt;&amp;#xADDC;&amp;#xCE59;&lt;/h2&gt;

&lt;p&gt;Reactive Stream&amp;#xC740; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xD1B5;&amp;#xC9C0;&amp;#xD558;&amp;#xB294; &amp;#xAD6C;&amp;#xC870;&amp;#xC774;&amp;#xBA70;, Reactive Stream&amp;#xC5D0;&amp;#xC11C; &amp;#xC815;&amp;#xD574;&amp;#xB193;&amp;#xC740; &amp;#xADDC;&amp;#xC57D;&amp;#xC744; &amp;#xCDA9;&amp;#xBD84;&amp;#xD558;&amp;#xAC8C; &amp;#xC9C0;&amp;#xCF1C;&amp;#xC57C; &amp;#xAD6C;&amp;#xC870;&amp;#xAC00; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xB3D9;&amp;#xC791;&amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;#xAD6C;&amp;#xB3C5; &amp;#xC2DC;&amp;#xC791; &amp;#xD1B5;&amp;#xC9C0;(onSubscribe)&amp;#xB294; &amp;#xAD6C;&amp;#xB3C5;&amp;#xC5D0;&amp;#xC11C; &amp;#xD55C; &amp;#xBC88;&amp;#xB9CC; &amp;#xBC1C;&amp;#xC0DD;&lt;/li&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xC9C0;&amp;#xB294; &amp;#xC21C;&amp;#xCC28;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC774;&amp;#xB904;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;null&amp;#xC744; &amp;#xD1B5;&amp;#xC9C0;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Publisher&amp;#xB294; &amp;#xCC98;&amp;#xB9AC; &amp;#xC644;&amp;#xB8CC;(onComplete) &amp;#xD639;&amp;#xC740; &amp;#xC5D0;&amp;#xB7EC;(onError)&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC885;&amp;#xB8CC;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;#xC8FC;&amp;#xC758;] &amp;#xAC19;&amp;#xC740; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xD65C;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xAD6C;&amp;#xB3C5;(subscribe)&amp;#xB97C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, Publisher/Subscriber&amp;#xC758; &amp;#xB0B4;&amp;#xBD80; &amp;#xC0C1;&amp;#xD0DC;&amp;#xB97C; &amp;#xCD08;&amp;#xAE30;&amp;#xD654;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74; &amp;#xC758;&amp;#xB3C4;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xACB0;&amp;#xACFC;&amp;#xB85C; &amp;#xC774;&amp;#xC5B4;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC65C;&amp;#xB0D0;&amp;#xD558;&amp;#xBA74;, onComplete &amp;#xD639;&amp;#xC740; onError&amp;#xC758; &amp;#xD1B5;&amp;#xC9C0;&amp;#xAC00; &amp;#xC774;&amp;#xB904;&amp;#xC9C4; &amp;#xC774;&amp;#xD6C4; &amp;#xC2DC;&amp;#xC810;&amp;#xC5D0;&amp;#xB294; Publisher&amp;#xB294; &amp;#xCC98;&amp;#xB9AC;&amp;#xAC00; &amp;#xB05D;&amp;#xB9C8;&amp;#xCE5C; &amp;#xAC83;&amp;#xC73C;&amp;#xB85C; &amp;#xD310;&amp;#xB2E8;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;rxjavakotlin%EC%97%90%EC%84%9C-%EA%BC%AD-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-%EA%B5%AC%EC%A1%B0%EB%8A%94&quot;&gt;RxJava,Kotlin&amp;#xC5D0;&amp;#xC11C; &amp;#xAF2D; &amp;#xC54C;&amp;#xC544;&amp;#xC57C; &amp;#xD560; &amp;#xAD6C;&amp;#xC870;&amp;#xB294;?&lt;/h2&gt;

&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%83%9D%EC%82%B0%EC%9E%90%EC%86%8C%EB%B9%84%EC%9E%90%EA%B5%AC%EB%8F%85&quot;&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;/&amp;#xAD6C;&amp;#xB3C5;&lt;/h3&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ReactiveStream &amp;#xC9C0;&amp;#xC6D0; &amp;#xC720;/&amp;#xBB34;&lt;/th&gt;
&lt;th&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/th&gt;
&lt;th&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/th&gt;
&lt;th&gt;&amp;#xAD00;&amp;#xACC4;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;Flowable&lt;/td&gt;
&lt;td&gt;Subscriber&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;Observable&lt;/td&gt;
&lt;td&gt;Observer&lt;/td&gt;
&lt;td&gt;Disposable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC9C0;&amp;#xC6D0; &amp;#xC720;&amp;#xBB34;&amp;#xC758; &amp;#xAC00;&amp;#xC7A5; &amp;#xD070; &amp;#xCC28;&amp;#xC774;&amp;#xC810;&amp;#xC740; &lt;code&gt;&amp;#xBC30;&amp;#xC555;(Backpressure)&lt;/code&gt;&amp;#xC758; &amp;#xC801;&amp;#xC6A9; &amp;#xC720;&amp;#xBB34;, &amp;#xBC30;&amp;#xC555;&amp;#xC774; &amp;#xC801;&amp;#xC6A9;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xCE21;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC694;&amp;#xCCAD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC74C;. &amp;#xBC30;&amp;#xC555; &amp;#xC678;&amp;#xC5D0;&amp;#xB294; &amp;#xCC98;&amp;#xB9AC; &amp;#xBAA8;&amp;#xB378;&amp;#xC740; &amp;#xAC70;&amp;#xC758; &amp;#xB611;&amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xlink=&quot;http://www.w3.org/1999/xlink&quot; contentscripttype=&quot;application/ecmascript&quot; contentstyletype=&quot;text/css&quot; height=&quot;697px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:581px;height:697px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 581 697&quot; width=&quot;581px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1t3w83d7yggbc&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;296.75&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;557&quot; x=&quot;13&quot; y=&quot;191.4199&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;88.9316&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;303&quot; x=&quot;23&quot; y=&quot;245.041&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;133.1973&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;296&quot; x=&quot;264&quot; y=&quot;347.9727&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; height=&quot;44.2656&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot; width=&quot;296&quot; x=&quot;264&quot; y=&quot;436.9043&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;90.8867&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;303&quot; x=&quot;23&quot; y=&quot;502.1699&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; height=&quot;44.2656&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot; width=&quot;303&quot; x=&quot;23&quot; y=&quot;548.791&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;54&quot; x2=&quot;54&quot; y1=&quot;86.4883&quot; y2=&quot;610.0566&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;295&quot; x2=&quot;295&quot; y1=&quot;86.4883&quot; y2=&quot;610.0566&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;529&quot; x2=&quot;529&quot; y1=&quot;86.4883&quot; y2=&quot;610.0566&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;33&quot; y=&quot;83.5352&quot;&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;54&quot; cy=&quot;13&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M54,21 L54,48 M41,29 L67,29 M54,48 L41,63 M54,48 L67,63 &quot; fill=&quot;none&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;33&quot; y=&quot;622.5918&quot;&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;54&quot; cy=&quot;635.5449&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M54,643.5449 L54,670.5449 M41,651.5449 L67,651.5449 M54,670.5449 L41,685.5449 M54,670.5449 L67,685.5449 &quot; fill=&quot;none&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;274&quot; y=&quot;83.5352&quot;&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;295&quot; cy=&quot;13&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M295,21 L295,48 M282,29 L308,29 M295,48 L282,63 M295,48 L308,63 &quot; fill=&quot;none&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;36&quot; x=&quot;274&quot; y=&quot;622.5918&quot;&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&lt;/text&gt;&lt;ellipse cx=&quot;295&quot; cy=&quot;635.5449&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M295,643.5449 L295,670.5449 M282,651.5449 L308,651.5449 M295,670.5449 L282,685.5449 M295,670.5449 L308,685.5449 &quot; fill=&quot;none&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;38&quot; x=&quot;508&quot; y=&quot;51&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;24&quot; x=&quot;515&quot; y=&quot;71.5352&quot;&gt;&amp;#xAD6C;&amp;#xB3C5;&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1t3w83d7yggbc)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;38&quot; x=&quot;508&quot; y=&quot;609.0566&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;24&quot; x=&quot;515&quot; y=&quot;629.5918&quot;&gt;&amp;#xAD6C;&amp;#xB3C5;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;65,113.7988,55,117.7988,65,121.7988,61,117.7988&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;59&quot; x2=&quot;294&quot; y1=&quot;117.7988&quot; y2=&quot;117.7988&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;71&quot; y=&quot;113.0566&quot;&gt;1&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;91&quot; x=&quot;84&quot; y=&quot;113.0566&quot;&gt;&amp;#xAD6C;&amp;#xB3C5;(subscribe)&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;517,143.1094,527,147.1094,517,151.1094,521,147.1094&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;523&quot; y1=&quot;147.1094&quot; y2=&quot;147.1094&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;142.3672&quot;&gt;2&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;250&quot; x=&quot;74&quot; y=&quot;142.3672&quot;&gt;&amp;#xAD6C;&amp;#xB3C5; &amp;#xAD00;&amp;#xACC4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCC38;&amp;#xC870; &amp;#xAC1D;&amp;#xCCB4; &amp;#xC0DD;&amp;#xC0DD;(Subscription)&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;283,172.4199,293,176.4199,283,180.4199,287,176.4199&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;289&quot; y1=&quot;176.4199&quot; y2=&quot;176.4199&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;171.6777&quot;&gt;3&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;196&quot; x=&quot;74&quot; y=&quot;171.6777&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4; &amp;#xC900;&amp;#xBE44; &amp;#xC644;&amp;#xB8CC;(onSubscribe)&lt;/text&gt;&lt;path d=&quot;M13,191.4199 L87,191.4199 L87,198.4199 L77,208.4199 L13,208.4199 L13,191.4199 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;296.75&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;557&quot; x=&quot;13&quot; y=&quot;191.4199&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;29&quot; x=&quot;28&quot; y=&quot;204.9883&quot;&gt;loop&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;140&quot; x=&quot;102&quot; y=&quot;204.0547&quot;&gt;[&amp;#xD1B5;&amp;#xBCF4;&amp;#xD560; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAC00; &amp;#xC5C6;&amp;#xC744; &amp;#xB54C;&amp;#xAE4C;&amp;#xC9C0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;517,226.041,527,230.041,517,234.041,521,230.041&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;295&quot; x2=&quot;523&quot; y1=&quot;230.041&quot; y2=&quot;230.041&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;302&quot; y=&quot;225.2988&quot;&gt;4&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;197&quot; x=&quot;315&quot; y=&quot;225.2988&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC694;&amp;#xCCAD;(Subscription.request)&lt;/text&gt;&lt;path d=&quot;M23,245.041 L85,245.041 L85,252.041 L75,262.041 L23,262.041 L23,245.041 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;88.9316&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;303&quot; x=&quot;23&quot; y=&quot;245.041&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;38&quot; y=&quot;258.6094&quot;&gt;alt&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;134&quot; x=&quot;100&quot; y=&quot;257.6758&quot;&gt;[&amp;#xAD6C;&amp;#xB3C5; &amp;#xD574;&amp;#xC9C0; &amp;#xC0C1;&amp;#xD0DC;&amp;#xAC00; &amp;#xC544;&amp;#xB2D0; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;96&quot; y1=&quot;283.6621&quot; y2=&quot;283.6621&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;96&quot; x2=&quot;96&quot; y1=&quot;283.6621&quot; y2=&quot;296.6621&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;55&quot; x2=&quot;96&quot; y1=&quot;296.6621&quot; y2=&quot;296.6621&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;65,292.6621,55,296.6621,65,300.6621,61,296.6621&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;278.9199&quot;&gt;5&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;59&quot; x=&quot;74&quot; y=&quot;278.9199&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC0DD;&amp;#xC0B0;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;283,321.9727,293,325.9727,283,329.9727,287,325.9727&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;289&quot; y1=&quot;325.9727&quot; y2=&quot;325.9727&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;61&quot; y=&quot;321.2305&quot;&gt;6&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;113&quot; x=&quot;74&quot; y=&quot;321.2305&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4;(onNext)&lt;/text&gt;&lt;path d=&quot;M264,347.9727 L326,347.9727 L326,354.9727 L316,364.9727 L264,364.9727 L264,347.9727 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;133.1973&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;296&quot; x=&quot;264&quot; y=&quot;347.9727&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;279&quot; y=&quot;361.541&quot;&gt;alt&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;164&quot; x=&quot;341&quot; y=&quot;360.6074&quot;&gt;[&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xAC00; &amp;#xACC4;&amp;#xC18D; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;295&quot; x2=&quot;337&quot; y1=&quot;386.5938&quot; y2=&quot;386.5938&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;337&quot; x2=&quot;337&quot; y1=&quot;386.5938&quot; y2=&quot;399.5938&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;296&quot; x2=&quot;337&quot; y1=&quot;399.5938&quot; y2=&quot;399.5938&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;306,395.5938,296,399.5938,306,403.5938,302,399.5938&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;302&quot; y=&quot;381.8516&quot;&gt;7&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;118&quot; x=&quot;315&quot; y=&quot;381.8516&quot;&gt;&amp;#xD1B5;&amp;#xBCF4;&amp;#xBC1B;&amp;#xC740; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;517,424.9043,527,428.9043,517,432.9043,521,428.9043&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;295&quot; x2=&quot;523&quot; y1=&quot;428.9043&quot; y2=&quot;428.9043&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;302&quot; y=&quot;424.1621&quot;&gt;8&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;197&quot; x=&quot;315&quot; y=&quot;424.1621&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC694;&amp;#xCCAD;(Subscription.request)&lt;/text&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;264&quot; x2=&quot;560&quot; y1=&quot;437.9043&quot; y2=&quot;437.9043&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;110&quot; x=&quot;269&quot; y=&quot;448.5391&quot;&gt;[&amp;#xAD6C;&amp;#xB3C5;&amp;#xC744; &amp;#xD574;&amp;#xC9C0; &amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;517,469.1699,527,473.1699,517,477.1699,521,473.1699&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;295&quot; x2=&quot;523&quot; y1=&quot;473.1699&quot; y2=&quot;473.1699&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;9&quot; x=&quot;302&quot; y=&quot;468.4277&quot;&gt;9&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;74&quot; x=&quot;315&quot; y=&quot;468.4277&quot;&gt;&amp;#xAD6C;&amp;#xB3C5; &amp;#xD574;&amp;#xC9C0; &amp;#xC694;&amp;#xCCAD;&lt;/text&gt;&lt;path d=&quot;M23,502.1699 L85,502.1699 L85,509.1699 L75,519.1699 L23,519.1699 L23,502.1699 &quot; fill=&quot;#EEEEEE&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;none&quot; height=&quot;90.8867&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;303&quot; x=&quot;23&quot; y=&quot;502.1699&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;38&quot; y=&quot;515.7383&quot;&gt;alt&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;154&quot; x=&quot;100&quot; y=&quot;514.8047&quot;&gt;[&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4;&amp;#xB97C; &amp;#xBAA8;&amp;#xB450; &amp;#xB9C8;&amp;#xCCE4;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;283,536.791,293,540.791,283,544.791,287,540.791&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;289&quot; y1=&quot;540.791&quot; y2=&quot;540.791&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;18&quot; x=&quot;61&quot; y=&quot;536.0488&quot;&gt;10&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;195&quot; x=&quot;83&quot; y=&quot;536.0488&quot;&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4; &amp;#xC644;&amp;#xB8CC; &amp;#xD1B5;&amp;#xBCF4;(onComplete)&lt;/text&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;23&quot; x2=&quot;326&quot; y1=&quot;549.791&quot; y2=&quot;549.791&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;144&quot; x=&quot;28&quot; y=&quot;560.4258&quot;&gt;[&amp;#xCC98;&amp;#xB9AC; &amp;#xC911; &amp;#xC5D0;&amp;#xB7EC;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD588;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;283,581.0566,293,585.0566,283,589.0566,287,585.0566&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;54&quot; x2=&quot;289&quot; y1=&quot;585.0566&quot; y2=&quot;585.0566&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;18&quot; x=&quot;61&quot; y=&quot;580.3145&quot;&gt;11&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;102&quot; x=&quot;83&quot; y=&quot;580.3145&quot;&gt;&amp;#xC5D0;&amp;#xB7EC; &amp;#xD1B5;&amp;#xBCF4;(onError)&lt;/text&gt;&lt;!--
@startuml
actor 생산자 as A
actor 소비자 as B
participant 구독 as C
autonumber
B -&gt; A: 구독(subscribe)
A -&gt; C: 구독 관계에 대한 참조 객체 생생(Subscription)
A -&gt; B: 데이터 통보 준비 완료(onSubscribe)

loop 통보할 데이터가 없을 때까지
B -&gt; C: 데이터 요청(Subscription.request)

alt 구독 해지 상태가 아닐 경우
	A -&gt; A: 데이터 생산
	A -&gt; B: 데이터 통보(onNext)
end


alt 소비자가 계속 데이터를 받을 경우
	B -&gt; B: 통보받은 데이터를 처리
	B -&gt; C: 데이터 요청(Subscription.request)
else 구독을 해지 하는 경우
	B -&gt; C: 구독 해지 요청
end
end

alt 데이터 통보를 모두 마쳤을 경우
A -&gt; B: 데이터 통보 완료 통보(onComplete)
else 처리 중 에러가 발생했을 경우
A -&gt; B: 에러 통보(onError)
end
@enduml

PlantUML version 1.2019.03(Sun Mar 10 20:04:44 KST 2019)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 10.0.1+10
Operating System: Mac OS X
OS Version: 10.14.3
Default Encoding: US-ASCII
Language: ko
Country: KR
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%97%B0%EC%82%B0%EC%9E%90&quot;&gt;&amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;map&lt;/code&gt;, &lt;code&gt;flatMap&lt;/code&gt; &amp;#xBC0F; &lt;code&gt;filter&lt;/code&gt; &amp;#xB4F1;&amp;#xACFC; &amp;#xAC19;&amp;#xC774; &amp;#xAE30;&amp;#xC874; Stream&amp;#xC744; &amp;#xB2E4;&amp;#xB8E8;&amp;#xAC70;&amp;#xB098; &amp;#xD568;&amp;#xC218;&amp;#xD615; &amp;#xB77C;&amp;#xC774;&amp;#xBE0C;&amp;#xB7EC;&amp;#xB9AC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xBE44;&amp;#xC2B7;&amp;#xD558;&amp;#xAC8C; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xC74C;. &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xBCC4;&amp;#xB85C; &amp;#xC0DD;&amp;#xC131;&amp;#xB418;&amp;#xB294; Flowable/Observable&amp;#xC758; &amp;#xC131;&amp;#xACA9;&amp;#xC774; &amp;#xC0C1;&amp;#xC774;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xC774; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xBA70;, &amp;#xB610;&amp;#xD55C; &amp;#xC2E4;&amp;#xD589;&amp;#xC21C;&amp;#xC11C;&amp;#xC5D0; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xC8FC;&amp;#xB294; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB3C4; &amp;#xC874;&amp;#xC7AC;&amp;#xD568;.&lt;/p&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EC%88%9C%EC%B0%A8-%EC%B2%98%EB%A6%AC%EC%9D%98-%EC%98%88&quot;&gt;&amp;#xC21C;&amp;#xCC28; &amp;#xCC98;&amp;#xB9AC;&amp;#xC758; &amp;#xC608;&lt;/h4&gt;

&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;    Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;just&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; it &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter variable&quot;&gt;${&lt;/span&gt;Thread&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;currentThread&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token delimiter variable&quot;&gt;}&lt;/span&gt;&lt;/span&gt;, data: &lt;span class=&quot;token interpolation variable&quot;&gt;$it&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;[&amp;#xACB0;&amp;#xACFC;]&lt;br&gt;
main, data: 200&lt;br&gt;
main, data: 400&lt;br&gt;
main, data: 600&lt;br&gt;
main, data: 800&lt;br&gt;
main, data: 1000&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EC%88%9C%EC%B0%A8-%EC%B2%98%EB%A6%AC%EA%B0%80-%EC%95%88%EB%90%98%EB%8A%94-%EC%98%88&quot;&gt;&amp;#xC21C;&amp;#xCC28; &amp;#xCC98;&amp;#xB9AC;&amp;#xAC00; &amp;#xC548;&amp;#xB418;&amp;#xB294; &amp;#xC608;&lt;/h4&gt;

&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;just&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;flatMap&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;just&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;it&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;MILLISECONDS&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter variable&quot;&gt;${&lt;/span&gt;Thread&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;currentThread&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token delimiter variable&quot;&gt;}&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;token interpolation variable&quot;&gt;$it&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;[&amp;#xACB0;&amp;#xACFC;]&lt;br&gt;
RxComputationThreadPool-3: C&lt;br&gt;
RxComputationThreadPool-1: A&lt;br&gt;
RxComputationThreadPool-1: B&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC&quot;&gt;&amp;#xBE44;&amp;#xB3D9;&amp;#xAE30; &amp;#xCC98;&amp;#xB9AC;&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC640; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xB294; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC9C0;&amp;#xC815;&amp;#xC774; &amp;#xC5C6;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;, &amp;#xBA54;&amp;#xC778;&amp;#xC2A4;&amp;#xB808;&amp;#xB4DC; &amp;#xD639;&amp;#xC740; &amp;#xC2E4;&amp;#xD589; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC21C;&amp;#xCC28; &amp;#xCC98;&amp;#xB9AC; &amp;#xB428;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC2DC;&amp;#xAC04; &amp;#xAD00;&amp;#xB828; Flowable/Observable &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC2E4;&amp;#xD589;&amp;#xC774; &amp;#xB418;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&amp;#xB3C4; &amp;#xC788;&amp;#xC74C;. &amp;#xBE44;&amp;#xB3D9;&amp;#xAE30; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &lt;code&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790; &amp;#xCE21;(subscribeOn())&lt;/code&gt;&amp;#xACFC; &lt;code&gt;&amp;#xC18C;&amp;#xBE44;&amp;#xC790; &amp;#xCE21;(observeOn())&lt;/code&gt;&amp;#xC5D0; &lt;code&gt;&amp;#xC2A4;&amp;#xB808;&amp;#xB4DC; &amp;#xC2A4;&amp;#xCE90;&amp;#xC904;&amp;#xB7EC;&lt;/code&gt;&amp;#xB97C; &amp;#xC9C0;&amp;#xC815;&amp;#xD558;&amp;#xBA74; &amp;#xB418;&amp;#xBA70;, &amp;#xC2A4;&amp;#xCE90;&amp;#xC974;&amp;#xB7EC;(&lt;code&gt;Schedulers&lt;/code&gt;)&amp;#xC758; &amp;#xC885;&amp;#xB958;&amp;#xB294; &lt;code&gt;io&lt;/code&gt;, &lt;code&gt;computation&lt;/code&gt; &amp;#xB4F1;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;%EC%99%B8%EB%B6%80-%EC%9E%90%EC%9B%90%EC%97%90-%EB%8C%80%ED%95%9C-%EC%B0%B8%EC%A1%B0%EB%8A%94&quot;&gt;&amp;#xC678;&amp;#xBD80; &amp;#xC790;&amp;#xC6D0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xCC38;&amp;#xC870;&amp;#xB294;?&lt;/h3&gt;

&lt;p&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0;&amp;#xC11C; &amp;#xC2E4;&amp;#xD589;&amp;#xC774; &amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xACF5;&amp;#xC720; &amp;#xC790;&amp;#xC6D0;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654; &amp;#xC791;&amp;#xC5C5;&amp;#xC744; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC218;&amp;#xD589;&amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC774;&amp;#xB7F0; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654;&amp;#xB97C; &amp;#xD53C;&amp;#xD558;&amp;#xB294; &amp;#xAC00;&amp;#xC7A5; &amp;#xC88B;&amp;#xC740; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC21C;&amp;#xC218; &amp;#xD568;&amp;#xC218;(&amp;#xD568;&amp;#xC218;&amp;#xD615; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;)&amp;#xC758; &amp;#xC0AC;&amp;#xC6A9;
&lt;ul&gt;
&lt;li&gt;&amp;#xC678;&amp;#xBD80; &amp;#xC790;&amp;#xC6D0; &amp;#xCC38;&amp;#xC870; X&lt;/li&gt;
&lt;li&gt;&amp;#xD568;&amp;#xC218; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC804;&amp;#xAC1C;&amp;#xD558;&amp;#xC5EC; &amp;#xCC98;&amp;#xB9AC; &amp;#xC548;&amp;#xC815;&amp;#xC131;&amp;#xC744; &amp;#xD655;&amp;#xBCF4;&lt;/li&gt;
&lt;li&gt;&amp;#xBD88;&amp;#xBCC0; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC0AC;&amp;#xC6A9;, &amp;#xD070; &amp;#xC624;&amp;#xBC84;&amp;#xD5E4;&amp;#xB4DC;&amp;#xAC00; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB294; &amp;#xBCF5;&amp;#xC0AC;&amp;#xB97C; &amp;#xD558;&amp;#xC5EC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xC758; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xAC00; &amp;#xC874;&amp;#xC7AC; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&amp;#xB294; &lt;code&gt;merge&lt;/code&gt;&amp;#xB4F1;&amp;#xC758; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xD574;&amp;#xB2F9; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xB97C; &amp;#xC2E4;&amp;#xD589;&amp;#xD558;&amp;#xB294; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xAC00; &amp;#xACF5;&amp;#xC720; &amp;#xC790;&amp;#xC6D0;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654;&amp;#xD558;&amp;#xC5EC; &amp;#xC811;&amp;#xADFC; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;%EA%B3%B5%EC%9C%A0-%EC%9E%90%EC%9B%90%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9E%98%EB%AA%BB%EB%90%9C-%EC%A0%91%EA%B7%BC%EC%9D%98-%EC%98%88&quot;&gt;&amp;#xACF5;&amp;#xC720; &amp;#xC790;&amp;#xC6D0;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC798;&amp;#xBABB;&amp;#xB41C; &amp;#xC811;&amp;#xADFC;&amp;#xC758; &amp;#xC608;&lt;/h4&gt;

&lt;p&gt;&amp;#xC544;&amp;#xB798;&amp;#xC758; 2&amp;#xAC1C;&amp;#xC758; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xC758; &amp;#xAD6C;&amp;#xC870;&amp;#xC5D0;&amp;#xC11C; 2&amp;#xAC1C;&amp;#xC758; &amp;#xC18C;&amp;#xBE44;&amp;#xC790; &amp;#xBAA8;&amp;#xB450; &amp;#xBCC0;&amp;#xC218; &lt;code&gt;num&lt;/code&gt;&amp;#xC5D0; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xC5EC; &amp;#xAC12;&amp;#xC744; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB294; &amp;#xAC01;&amp;#xAC01;&amp;#xC758; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xC5D0;&amp;#xC11C; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654; &amp;#xC5C6;&amp;#xC774; &amp;#xC811;&amp;#xADFC;&amp;#xD558;&amp;#xB294; &amp;#xC548;&amp;#xD2F0;&amp;#xD328;&amp;#xD134;&amp;#xC758; &amp;#xAC00;&amp;#xC7A5; &amp;#xC88B;&amp;#xC740; &amp;#xC608;&amp;#xB77C;&amp;#xACE0; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; num &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100_000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;observeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;num &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC5D0;&amp;#xB7EC;=&lt;span class=&quot;token interpolation variable&quot;&gt;$it&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;counter.get()= &lt;span class=&quot;token interpolation variable&quot;&gt;$num&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100_000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;observeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;num &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC5D0;&amp;#xB7EC;=&lt;span class=&quot;token interpolation variable&quot;&gt;$it&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;counter.get()= &lt;span class=&quot;token interpolation variable&quot;&gt;$num&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;h4 class=&quot;mume-header&quot; id=&quot;merge-%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%88&quot;&gt;merge &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C; &amp;#xC608;&lt;/h4&gt;

&lt;p&gt;&amp;#xC704;&amp;#xC5D0;&amp;#xC11C; &amp;#xBCF4;&amp;#xC558;&amp;#xB358; &amp;#xC548;&amp;#xD2F0;&amp;#xD328;&amp;#xD134;&amp;#xC744; Rx&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC2A4;&amp;#xB808;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654; &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xC9C4;&amp;#xD589;&amp;#xD574;&amp;#xC8FC;&amp;#xB294; &lt;code&gt;merge&lt;/code&gt; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD574;&amp;#xACB0;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;. &amp;#xC5EC;&amp;#xB7EC; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC1C;&amp;#xD589;&amp;#xD558;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC758; &amp;#xD0C0;&amp;#xC784;&amp;#xB77C;&amp;#xC778;&amp;#xC744; &amp;#xD558;&amp;#xB098;&amp;#xB85C; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4;&amp;#xC8FC;&amp;#xBA70;, &amp;#xBC1C;&amp;#xD589;&amp;#xD558;&amp;#xB294; &amp;#xC21C;&amp;#xC11C;&amp;#xB97C; &amp;#xC544;&amp;#xB798;&amp;#xC758; &amp;#xADF8;&amp;#xB9BC;&amp;#xACFC; &amp;#xAC19;&amp;#xC774; &amp;#xC2DC;&amp;#xAC04;&amp;#xC21C; &amp;#xD639;&amp;#xC740; &amp;#xC2E4;&amp;#xD589;&amp;#xC21C;&amp;#xC73C;&amp;#xB85C; &amp;#xB9CC;&amp;#xB4E4; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;#xC694;&amp;#xC57D;] &amp;#xC5EC;&amp;#xB7EC; Observable&amp;#xC758; &amp;#xCD9C;&amp;#xB825;&amp;#xC744; &amp;#xACB0;&amp;#xD569;&amp;#xD558;&amp;#xC5EC; &amp;#xB2E8;&amp;#xC77C; Observable&amp;#xCC98;&amp;#xB7FC; &amp;#xC791;&amp;#xB3D9;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;http://reactivex.io/documentation/operators/images/merge.png&quot; alt&gt;&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; num &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; source1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100_000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;observeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; source2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Flowable&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100_000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;observeOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schedulers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;computation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

Flowable
&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;merge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;source1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; source2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;num &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;#xC5D0;&amp;#xB7EC;=&lt;span class=&quot;token interpolation variable&quot;&gt;$it&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;counter.get()= &lt;span class=&quot;token interpolation variable&quot;&gt;$num&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;flowable-vs-observable-%EC%96%B4%EB%96%A4%EA%B1%B8-%EC%8D%A8%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B0%EC%A7%80&quot;&gt;Flowable vs Observable &amp;#xC5B4;&amp;#xB5A4;&amp;#xAC78; &amp;#xC368;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xAC70;&amp;#xC9C0;?&lt;/h2&gt;

&lt;h3 class=&quot;mume-header&quot; id=&quot;flowable&quot;&gt;Flowable&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB300;&amp;#xB7C9; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;li&gt;&amp;#xB124;&amp;#xD2B8;&amp;#xC6CC;&amp;#xD06C; &amp;#xD1B5;&amp;#xC2E0;/&amp;#xD30C;&amp;#xC77C; &amp;#xB4F1; IO&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;observable&quot;&gt;Observable&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GUI &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8;&lt;/li&gt;
&lt;li&gt;&amp;#xC18C;&amp;#xB7C9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;li&gt;&amp;#xC790;&amp;#xBC14;&amp;#xC758; Stream&amp;#xC744; &amp;#xB300;&amp;#xC2E0;&amp;#xD558;&amp;#xC5EC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xB300;&amp;#xB7C9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC640; &amp;#xB354;&amp;#xBD88;&amp;#xC5B4; IO&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0;&amp;#xB294; &lt;code&gt;Flowable&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xBC30;&amp;#xC555; &amp;#xC815;&amp;#xCC45;&amp;#xC744; &amp;#xC801;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC720;&amp;#xB9AC;&amp;#xD558;&amp;#xB2E4;. &amp;#xBC18;&amp;#xBA74;&amp;#xC5D0; GUI&amp;#xC758; &amp;#xC774;&amp;#xBCA4;&amp;#xD2B8; &amp;#xCC98;&amp;#xB9AC; &amp;#xD639;&amp;#xC740; &amp;#xC18C;&amp;#xB7C9;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBC30;&amp;#xC555;&amp;#xC774; &amp;#xC5C6;&amp;#xB294; &lt;code&gt;Observable&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC720;&amp;#xB9AC;&amp;#xD558;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;. &lt;code&gt;Observable&lt;/code&gt;&amp;#xC740; &amp;#xBC30;&amp;#xC555; &amp;#xAE30;&amp;#xB2A5;&amp;#xC774; &amp;#xC5C6;&amp;#xB294; &amp;#xB9CC;&amp;#xD07C; &lt;code&gt;Flowable&lt;/code&gt;&amp;#xC5D0; &amp;#xBE44;&amp;#xD558;&amp;#xC5EC; &amp;#xC624;&amp;#xBC84;&amp;#xD5E4;&amp;#xB4DC;&amp;#xAC00; &amp;#xC801;&amp;#xC740; &amp;#xAC83;&amp;#xC774; &amp;#xD2B9;&amp;#xC9D5;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xBC30;&amp;#xC555; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74;, &amp;#xC3DF;&amp;#xC544;&amp;#xC9C0;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xB300;&amp;#xD55C; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &amp;#xC81C;&amp;#xC5B4; &amp;#xBFD0;&amp;#xB9CC; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C; &amp;#xC5D0;&amp;#xB7EC; &amp;#xCC98;&amp;#xB9AC;&amp;#xB3C4; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xBB3C;&amp;#xB860;, &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xC758; &amp;#xC131;&amp;#xACA9;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC774;&amp;#xC9C0;&amp;#xB9CC; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC640; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xAC04;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC; &amp;#xC18D;&amp;#xB3C4; &amp;#xCC28;&amp;#xC774;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC720;&amp;#xC2E4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xB3C4; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xACE0;&amp;#xB824;&amp;#xD574;&amp;#xC11C; &amp;#xBC30;&amp;#xC555; &amp;#xC815;&amp;#xCC45;&amp;#xC744; &amp;#xC801;&amp;#xC6A9;&amp;#xD55C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Kotlin</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/136</guid>
      <comments>https://stylishc.tistory.com/136#entry136comment</comments>
      <pubDate>Mon, 6 May 2019 18:09:40 +0900</pubDate>
    </item>
    <item>
      <title>20190504</title>
      <link>https://stylishc.tistory.com/135</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;20190504&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}pre[data-line]{position:relative;padding:1em 0 1em 3em !important}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;1-rxjava-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%BD%EA%B8%B0%EC%8B%A4%EC%8A%B5&quot;&gt;1. RxJava &amp;#xB9AC;&amp;#xC561;&amp;#xD2F0;&amp;#xBE0C; &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; &amp;#xC77D;&amp;#xAE30;/&amp;#xC2E4;&amp;#xC2B5;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;3&amp;#xC7A5;, RxJava &amp;#xBA54;&amp;#xCEE4;&amp;#xB2C8;&amp;#xC998;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xC5D0;&amp;#xB7EC;&amp;#xCC98;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBD80;&amp;#xBD84;&amp;#xBD80;&amp;#xD130; &amp;#xBC30;&amp;#xC555;(Backpressure)&amp;#xAE4C;&amp;#xC9C0; &amp;#xD559;&amp;#xC2B5;&amp;#xC744; &amp;#xD558;&amp;#xC600;&amp;#xACE0;, &amp;#xC5D0;&amp;#xB7EC; &amp;#xCC98;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xB9E4;&amp;#xCEE4;&amp;#xB2C8;&amp;#xC998;&amp;#xBD80;&amp;#xD130; &amp;#xBC30;&amp;#xC555;&amp;#xAE4C;&amp;#xC9C0; &amp;#xC790;&amp;#xC5F0;&amp;#xC2A4;&amp;#xB7FD;&amp;#xAC8C; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC774; &amp;#xC5F0;&amp;#xACB0;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC774;&amp;#xD574;&amp;#xD558;&amp;#xB294;&amp;#xB370;&amp;#xC5D0;&amp;#xB294; &amp;#xD06C;&amp;#xAC8C; &amp;#xBB34;&amp;#xB9AC;&amp;#xAC00; &amp;#xC5C6;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xB9CC;, &amp;#xCC45;&amp;#xC744; &amp;#xC77D;&amp;#xC73C;&amp;#xBA74; &amp;#xC77D;&amp;#xC744;&amp;#xC218;&amp;#xB85D; &amp;#xBD10;&amp;#xC57C; &amp;#xD560; API&amp;#xC640; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xAC1C;&amp;#xC218;&amp;#xAC00; &amp;#xB298;&amp;#xC5B4;&amp;#xB098;&amp;#xB294;&amp;#xAC70; &amp;#xAC19;&amp;#xC544;&amp;#xC11C;, &amp;#xCC45;&amp;#xC5D0;&amp;#xC11C;&amp;#xB9CC; &amp;#xC81C;&amp;#xACF5;&amp;#xD574;&amp;#xC8FC;&amp;#xB294; &amp;#xC608;&amp;#xC81C; &amp;#xC678;&amp;#xC5D0;&amp;#xB3C4; &amp;#xC2E4;&amp;#xC81C; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC5B4;&amp;#xB5BB;&amp;#xAC8C; &amp;#xD558;&amp;#xB294;&amp;#xC9C0;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xAE43;&amp;#xD5D9;&amp;#xC744; &amp;#xB3CC;&amp;#xC544;&amp;#xB2E4;&amp;#xB2C8;&amp;#xBA74;&amp;#xC11C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC880; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBD10;&amp;#xC57C; &amp;#xC880; &amp;#xB354; &amp;#xC774;&amp;#xD574;&amp;#xAC00; &amp;#xB192;&amp;#xC544;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC744;&amp;#xAC70; &amp;#xAC19;&amp;#xC558;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC5EC;&amp;#xB7EC;&amp;#xAC1C;&amp;#xC758; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xC640; &amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xAC00; &amp;#xACF5;&amp;#xC720; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C8; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0;&amp;#xB294;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;merge &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xB2E4;&amp;#xC218;&amp;#xC758; &amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;/&amp;#xC18C;&amp;#xBE44;&amp;#xC790;&amp;#xAC00; &amp;#xC21C;&amp;#xCC28;&amp;#xC811;&amp;#xADFC;&amp;#xC744; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xB3D9;&amp;#xAE30;&amp;#xD654; &amp;#xCC98;&amp;#xB9AC; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC5D0;&amp;#xB7EC;&amp;#xCC98;&amp;#xB9AC;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xC5D0;&amp;#xB7EC;&amp;#xCC98;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD1B5;&amp;#xBCF4;&lt;/li&gt;
&lt;li&gt;&amp;#xC7AC;&amp;#xC2DC;&amp;#xB3C4;(retryXX Method)&lt;/li&gt;
&lt;li&gt;&amp;#xB300;&amp;#xCCB4; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD1B5;&amp;#xBCF4;(onErrorXX Method)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xBC30;&amp;#xC555; &amp;#xC815;&amp;#xCC45;/&amp;#xC804;&amp;#xB7B5; &amp;#xC9C0;&amp;#xC815;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flowable/Observable &amp;#xC0DD;&amp;#xC131; &amp;#xC2DC; &amp;#xC9C0;&amp;#xC815;&lt;/li&gt;
&lt;li&gt;&amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC;&amp;#xB85C; &amp;#xC9C0;&amp;#xC815;&lt;/li&gt;
&lt;li&gt;&amp;#xC0DD;&amp;#xC0B0;&amp;#xC790;&amp;#xCE21;, &amp;#xC2A4;&amp;#xCE90;&amp;#xC904;&amp;#xB7EC; &amp;#xC9C0;&amp;#xC815; &amp;#xC2DC;(observeOn()) &amp;#xBC84;&amp;#xD37C; &amp;#xC0AC;&amp;#xC774;&amp;#xC988;&amp;#xB97C; &amp;#xC9C0;&amp;#xC815;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xBC30;&amp;#xC555; &amp;#xC815;&amp;#xCC45;&amp;#xC758; &amp;#xC885;&amp;#xB958;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BUFFER&lt;/li&gt;
&lt;li&gt;DROP&lt;/li&gt;
&lt;li&gt;LATEST&lt;/li&gt;
&lt;li&gt;ERROR&lt;/li&gt;
&lt;li&gt;NONE&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 class=&quot;mume-header&quot; id=&quot;2-effective-java-3e-%EC%9D%BD%EA%B8%B0%EC%8B%A4%EC%8A%B5&quot;&gt;2. Effective-Java-3e &amp;#xC77D;&amp;#xAE30;/&amp;#xC2E4;&amp;#xC2B5;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC544;&amp;#xC774;&amp;#xD15C; 26, Raw Type&amp;#xC740; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC9C0; &amp;#xB9D0;&amp;#xC544;&amp;#xB77C;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC54C;&amp;#xC544;&amp;#xC57C; &amp;#xD560; &amp;#xAC1C;&amp;#xB150;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xC18C;&amp;#xAC1C;&amp;#xD574;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C;, &amp;#xB2E4;&amp;#xB978; &amp;#xBB38;&amp;#xC11C;&amp;#xB098; &amp;#xAE00;&amp;#xC744; &amp;#xC77D;&amp;#xC5C8;&amp;#xC744; &amp;#xB54C; &amp;#xBAB0;&amp;#xB790;&amp;#xB358; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xB150;&amp;#xC744; &amp;#xD30C;&amp;#xC545; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;. &amp;#xADF8;&amp;#xB9AC;&amp;#xACE0; RawType&amp;#xC758; &amp;#xCEEC;&amp;#xB809;&amp;#xC158; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC790;&amp;#xBC14;&amp;#xC758; &amp;#xD788;&amp;#xC2A4;&amp;#xD1A0;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xC54C; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xACE0;, &amp;#xC81C;&amp;#xB124;&amp;#xB9AD;&amp;#xC774; &amp;#xB3C4;&amp;#xC785;&amp;#xB428;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C; &amp;#xD0C0;&amp;#xC784;&amp;#xC758; &amp;#xD0C0;&amp;#xC785; &amp;#xC548;&amp;#xC804;&amp;#xC131;&amp;#xACFC; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784;&amp;#xC5D0;&amp;#xC11C;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC18C;&amp;#xAC70; &amp;#xB4F1;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB3C4; &amp;#xC608;&amp;#xC81C;&amp;#xC640; &amp;#xC124;&amp;#xBA85;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xD655;&amp;#xC778; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xC88B;&amp;#xC558;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798;&amp;#xB294; &amp;#xCC45;&amp;#xC5D0; &amp;#xB098;&amp;#xC640; &amp;#xC788;&amp;#xB294; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC77C;&amp;#xBD80; &amp;#xBC1C;&amp;#xCDCC;&amp;#xD558;&amp;#xC5EC; &amp;#xB098;&amp;#xC911;&amp;#xC5D0;&amp;#xB77C;&amp;#xB3C4; &amp;#xAE4C;&amp;#xBA39;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;(??)&amp;#xC5D0; &amp;#xB2E4;&amp;#xC2DC; &amp;#xBCF4;&amp;#xACE0;&amp;#xC790; &amp;#xAE30;&amp;#xB85D;&amp;#xC744; &amp;#xD574;&amp;#xB458;&amp;#xB824;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&amp;#xC6A9;&amp;#xC5B4;&lt;/th&gt;
&lt;th&gt;&amp;#xC608;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xB9E4;&amp;#xAC1C;&amp;#xBCC0;&amp;#xC218;&amp;#xD654; &amp;#xD0C0;&amp;#xC785;(Parameterized Type)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xC2E4;&amp;#xC81C; &amp;#xD0C0;&amp;#xC785; &amp;#xB9E4;&amp;#xAC1C;&amp;#xBCC0;&amp;#xC218;(Actual Type Parameter)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;String&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xD0C0;&amp;#xC785;(Generic Type)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;E&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xC815;&amp;#xADDC; &amp;#xD0C0;&amp;#xC785; &amp;#xB9E4;&amp;#xAC1C;&amp;#xBCC0;&amp;#xC218;(Formal Type Parameter)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;E&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xBE44;&amp;#xD55C;&amp;#xC815;&amp;#xC801; &amp;#xD0C0;&amp;#xC785; &amp;#xB9E4;&amp;#xAC1C;&amp;#xBCC0;&amp;#xC218;(Bounded Type Parameter)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xB85C;&amp;#xC6B0; &amp;#xD0C0;&amp;#xC785;(Raw Type)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xD55C;&amp;#xC815;&amp;#xC801; &amp;#xD0C0;&amp;#xC785; &amp;#xB9E4;&amp;#xAC1C;&amp;#xBCC0;&amp;#xC218;(Bounded Type Parameter)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;E extends Number&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xC7AC;&amp;#xADC0;&amp;#xC801; &amp;#xD0C0;&amp;#xC785; &amp;#xD55C;&amp;#xC815;(Recursive Type Bound)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;T extends Comparable&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xD55C;&amp;#xC815;&amp;#xC801; &amp;#xC640;&amp;#xC77C;&amp;#xB4DC;&amp;#xCE74;&amp;#xB4DC; &amp;#xD0C0;&amp;#xC785;(Bounded Wildcard Type)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;? extends Number&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xC81C;&amp;#xB124;&amp;#xB9AD; &amp;#xB9E4;&amp;#xC11C;&amp;#xB4DC;(Generic Method)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;static &amp;lt;E&amp;gt; List&amp;lt;E&amp;gt; asList(E[] a)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;#xD0C0;&amp;#xC785; &amp;#xD1A0;&amp;#xD070;(Type Token)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;String.class&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/135</guid>
      <comments>https://stylishc.tistory.com/135#entry135comment</comments>
      <pubDate>Sat, 4 May 2019 19:30:20 +0900</pubDate>
    </item>
    <item>
      <title>20190501</title>
      <link>https://stylishc.tistory.com/134</link>
      <description>&lt;h1&gt;1. 유럽여행&lt;/h1&gt;
&lt;p&gt;3월 중순부터 4월 초까지 여행을 다녀왔었다. 1년 가까이 쌓였던 업무 관련 스트레스 때문에 쉴 타이밍이라고 생각했고, 과감하게 20여 일의 시간을 유럽여행으로 시간을 보냈다. 직업병인지는 몰라도 여행을 다니면서도 공부를 안 하면 생기는 일종의 불안한 감정 같은게 없진 않았으나, 그래도 재충전의 시간을 보내고 돌아오니 한결 마음이 가볍다.&lt;/p&gt;
&lt;h1&gt;2. RxJava, RxKotlin&lt;/h1&gt;
&lt;p&gt;여행을 다녀오고 공부의 방향성에 대해 생각을 해봤다. 부족한 기본기에 대한 공부도 중요하지만, 내가 흥미를 가지고 지속적으로 할 수 있는 공부 역시 중요하다고 생각했다. 그래서 흥미를 가질 수 있는 주제에 대해 고민을 해보다 Reactive 관련 공부를 해보는 게 좋을 거 같아서 책을 바로 구매했다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://book.naver.com/bookdb/book_detail.nhn?bid=14689555&quot;&gt;RxJava 리액티브 프로그래밍&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kotlin을 주력으로 사용하고 있긴 하지만, 실제 JVM에서 돌아가기 때문에 자바에 대한 공부도 빼놓을 수 없다고 늘 생각해왔다. 이러한 연장선상에서 Reactive Stream 구현체인 RxJava를 공부하고 이를 확장하여 Reactor까지 공부하면 좋겠다고 생각했다.&lt;/p&gt;
&lt;p&gt;이전에도 Rx에 대한 서적을 안 읽은 것은 아니지만, 이번에 공부하고 있는 책은 아직까지 내용이 꽤 알찬 느낌이다. Publisher/Subscriber 모델에 대한 설명도 꽤 자세하게 해주는 편이고, Reactive Stream 표준 규약부터 이를 구현한 구현체에 대한 상세한 설명까지 덧붙여주고 있어서 나 같이 이쪽 공부를 막 시작한 사람들에게는 많은 도움이 되리라 생각한다.&lt;/p&gt;</description>
      <category>Programing/TIL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/134</guid>
      <comments>https://stylishc.tistory.com/134#entry134comment</comments>
      <pubDate>Wed, 1 May 2019 15:04:04 +0900</pubDate>
    </item>
    <item>
      <title>Spring-Boot Logging And ELK Logstash Format</title>
      <link>https://stylishc.tistory.com/133</link>
      <description>&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;mume markdown-preview   &quot;&gt;
&lt;h1 id=&quot;springboot-logger&quot; class=&quot;mume-header&quot;&gt;SpringBoot Logger&lt;/h1&gt;
&lt;p&gt;사내에서 최근 ELK 도입을 준비하고 있는 과정에서 로깅 포맷을 지정하고 사용해야 하는 Needs가 생겨서 이번 작업을 시작하게 되었다. 스프링 부트에서는 로깅 설정을 프로파일별로 다르게 지정 할 수 있으며, 또한 로깅 구현체에 대한 유연한 변경(log4j2 등)이 가능하므로 작업 자체의 난이도가 높지는 않다고 할 수 있다.&lt;/p&gt;
&lt;h2 id=&quot;%EB%8B%A4%EC%8B%9C-%EB%B3%B4%EB%8A%94-%EB%A1%9C%EA%B9%85-%EB%A0%88%EB%B2%A8&quot; class=&quot;mume-header&quot;&gt;다시 보는 로깅 레벨&lt;/h2&gt;
&lt;img src=&quot;http://myblog.opendocs.co.kr/wp-content/uploads/2015/03/log4j-1024x453.png&quot; alt=&quot;&quot; /&gt;
&lt;ul&gt;
&lt;li&gt;출처: 구글 이미지 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;hibernate-logging-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EC%8A%88&quot; class=&quot;mume-header&quot;&gt;Hibernate Logging 관련 이슈&lt;/h2&gt;
&lt;p&gt;로깅 작업 중 Hibernate 관련 로깅이 slf4j에 제대로 적용이 안되는 이슈가 생겼었다. 이와 관련된 문서를 뒤져보다 &lt;a href=&quot;https://medium.com/@scadge/how-to-enable-hibernate-logging-dc11545efd3d&quot;&gt;링크&lt;/a&gt;를 통하여 해당 문제를 해결 할 수 있었다.&lt;/p&gt;
&lt;p&gt;링크의 내용을 요약하자면, 하이버네이트 로깅 설정이 초기화 되는 구간에서 실제 slf4j에서 사용하는 로거 설정이 적용되며 자바 프로세스 실행 시 &lt;code&gt;-Dorg.jboss.logging.provider=slf4j&lt;/code&gt; 혹은 코드에서 &lt;code&gt;System.setProperty(&quot;org.jboss.logging.provider&quot;, &amp;ldquo;slf4j&quot;)&lt;/code&gt; 명시적으로 slf4j를 사용하도록 설정을 해줘야지 hibernate에서 발생하는 쿼리 로깅이 slf4j를 사용하여 실행되는 것을 확인할 수 있었다.&lt;/p&gt;
&lt;pre class=&quot;language-java&quot; data-role=&quot;codeBlock&quot; data-info=&quot;java&quot;&gt;&lt;code&gt;    // LoggerProviders.class
    private static LoggerProvider findProvider() {
        final ClassLoader cl = LoggerProviders.class.getClassLoader();
        try {
            // Check the system property
            final String loggerProvider = AccessController.doPrivileged(new PrivilegedAction&amp;lt;String&amp;gt;() {
                public String run() {
                    return System.getProperty(LOGGING_PROVIDER_KEY);
                }
            });
            if (loggerProvider != null) {
                if (&quot;jboss&quot;.equalsIgnoreCase(loggerProvider)) {
                    return tryJBossLogManager(cl, &quot;system property&quot;);
                } else if (&quot;jdk&quot;.equalsIgnoreCase(loggerProvider)) {
                    return tryJDK(&quot;system property&quot;);
                } else if (&quot;log4j2&quot;.equalsIgnoreCase(loggerProvider)) {
                    return tryLog4j2(cl, &quot;system property&quot;);
                } else if (&quot;log4j&quot;.equalsIgnoreCase(loggerProvider)) {
                    return tryLog4j(cl, &quot;system property&quot;);
                } else if (&quot;slf4j&quot;.equalsIgnoreCase(loggerProvider)) {
                    return trySlf4j(&quot;system property&quot;);
                }
            }
        } catch (Throwable t) {
            // nope...
        }
        // ... 이하 생략
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-java&quot; data-role=&quot;codeBlock&quot; data-info=&quot;java&quot;&gt;&lt;code&gt;public void logStatement(String statement, Formatter formatter) {
    if ( format ) {
        if ( logToStdout || LOG.isDebugEnabled() ) {
            statement = formatter.format( statement );
        }
    }
    LOG.debug( statement );
    if ( logToStdout ) {
        System.out.println( &quot;Hibernate: &quot; + statement );
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;%EA%B8%B0%ED%83%80-%EC%B0%B8%EA%B3%A0-%EB%A7%81%ED%81%AC&quot; class=&quot;mume-header&quot;&gt;기타 참고 링크&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/36496178/cant-avoid-hibernate-logging-sql-to-console-with-spring-boot-and-logback&quot;&gt;Stackoverflow - Can't avoid hibernate logging SQL to console with Spring Boot and Logback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kwonnam.pe.kr/wiki/java/hibernate/log&quot;&gt;Hibernate Log 남기기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%B3%84-%EC%84%A4%EC%A0%95&quot; class=&quot;mume-header&quot;&gt;프로파일별 설정&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#_profile_specific_configuration&quot;&gt;Profile-specific Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;스프링 부트에서는 프로파일별로 로깅 설정을 지정 할수 있도록 설정 할수 있다. 프로파일별로 달라지는 설정값은 &lt;code&gt;&amp;lt;springProperty&amp;gt;&lt;/code&gt; 태그를 활용하여 분기 처리를 할 수 있다. 설정 값은 실행하는 프로파일의 &lt;code&gt;application.properties&lt;/code&gt;의 값을 참조하게 된다.&lt;/p&gt;
&lt;h2 id=&quot;logstash-logback-encoderhttpsgithubcomlogstashlogstash-logback-encoderasync-appenders&quot; class=&quot;mume-header&quot;&gt;&lt;a href=&quot;https://github.com/logstash/logstash-logback-encoder#async-appenders&quot;&gt;Logstash-logback-encoder&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;로깅 포맷을 지정하는 과정에서, logback의 &lt;code&gt;JsonLayout&lt;/code&gt;을 선 적용하여 설정을 했었는데, 어차피 ELK에서 사용하는 목적이 크기 때문에 포맷 자체를 ELK에서 Offical하게 사용하는 포맷을 사용하는 것이 더 나으리라 생각했다. 그래서 &lt;code&gt;Logstash-logback-encoder&lt;/code&gt; 구현체를 사용하는 것으로 판단을 내렸고, 적용은 아래 내용을 참고하면 누구나 쉽게 할 수 있으리라 생각한다. 로컬 개발 환경에서는 굳이 해당 레이아웃을 적용할 필요가 없기 때문에, 스프링 부트에서 제공해주는 기본 로거 설정을 사용하도록 하였다.&lt;/p&gt;
&lt;p&gt;로그는 &lt;code&gt;logstash-logback-encoder&lt;/code&gt;에서 제공해주는 TcpAppender를 사용하여 Logstash에 바로 보낼 수 있도록 설정하였으며, TCP를 사용하기 때문에 연결에 대한 reconnection, KeepAlive 설정을 추가로 적용했다. 일단 적용 후 추후 로그에 대한 유실 유무를 판단하여 FileBeat를 사용하는 등 개선점에 대해서는 모니터링 후 판단하기로 결정을 내렸다.&lt;/p&gt;
&lt;p&gt;로깅 프로퍼티의 경우, 현재 개발 환경에 Spring-Cloud-Sleuth를 사용하고 있어서 &lt;a href=&quot;https://cloud.spring.io/spring-cloud-sleuth/single/spring-cloud-sleuth.html#_json_logback_with_logstash&quot;&gt;해당 문서&lt;/a&gt;를 일정 부분 참고했다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;build.gradle&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-groovy&quot; data-role=&quot;codeBlock&quot; data-info=&quot;groovy&quot;&gt;&lt;code&gt;    /**
     * logstash-logback
     */
    compile('net.logstash.logback:logstash-logback-encoder:5.3')
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;resources/logback-spring.xml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-xml&quot; data-role=&quot;codeBlock&quot; data-info=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;

&amp;lt;configuration&amp;gt;

    &amp;lt;!-- FILE Appender --&amp;gt;
    &amp;lt;springProperty scope=&quot;context&quot; name=&quot;LOG_DIR&quot;        source=&quot;logging.path&quot;      defaultValue=&quot;/var/log/tomcat8&quot; /&amp;gt;
    &amp;lt;springProperty scope=&quot;context&quot; name=&quot;LOG_PATH_NAME&quot;  source=&quot;logging.file-name&quot; defaultValue=&quot;${LOG_DIR}/server-application.log&quot; /&amp;gt;
    &amp;lt;springProperty scope=&quot;context&quot; name=&quot;LOG_STASH_ADDR&quot; source=&quot;logging.log-stash&quot; defaultValue=&quot;{IP_ADDRESS}&quot; /&amp;gt;
    &amp;lt;springProperty scope=&quot;context&quot; name=&quot;APP_NAME&quot;       source=&quot;spring.zipkin.service.name&quot; defaultValue=&quot;DEFAULT_APP_NAME&quot; /&amp;gt;

    &amp;lt;appender name=&quot;file&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&amp;gt;
        &amp;lt;file&amp;gt;${LOG_PATH_NAME}&amp;lt;/file&amp;gt;
        &amp;lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;&amp;gt;
            &amp;lt;fileNamePattern&amp;gt;${LOG_PATH_NAME}.%d{yyyyMMdd}&amp;lt;/fileNamePattern&amp;gt;
            &amp;lt;maxHistory&amp;gt;60&amp;lt;/maxHistory&amp;gt;
        &amp;lt;/rollingPolicy&amp;gt;

        &amp;lt;encoder class=&quot;net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder&quot;&amp;gt;
            &amp;lt;providers&amp;gt;
                &amp;lt;timestamp&amp;gt;
                    &amp;lt;pattern&amp;gt;yyyy-MM-dd'T'HH:mm:ssZ&amp;lt;/pattern&amp;gt;
                    &amp;lt;timeZone&amp;gt;UTC&amp;lt;/timeZone&amp;gt;
                &amp;lt;/timestamp&amp;gt;
                &amp;lt;version/&amp;gt;
                &amp;lt;logLevel/&amp;gt;
                &amp;lt;threadName/&amp;gt;
                &amp;lt;loggerName/&amp;gt;
                &amp;lt;message /&amp;gt;
                &amp;lt;pattern&amp;gt;
                    &amp;lt;pattern&amp;gt;
                        {
                        &quot;service&quot;: &quot;${APP_NAME:-}&quot;,
                        &quot;traceId&quot;: &quot;%X{X-B3-TraceId:-}&quot;
                        }
                    &amp;lt;/pattern&amp;gt;
                &amp;lt;/pattern&amp;gt;
            &amp;lt;/providers&amp;gt;
        &amp;lt;/encoder&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;!-- Logstash Appender --&amp;gt;
    &amp;lt;appender name=&quot;stash&quot; class=&quot;net.logstash.logback.appender.LogstashTcpSocketAppender&quot;&amp;gt;
        &amp;lt;destination&amp;gt;${LOG_STASH_ADDR}&amp;lt;/destination&amp;gt;
        &amp;lt;keepAliveDuration&amp;gt;5 minutes&amp;lt;/keepAliveDuration&amp;gt;
        &amp;lt;reconnectionDelay&amp;gt;15 second&amp;lt;/reconnectionDelay&amp;gt;

        &amp;lt;encoder class=&quot;net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder&quot;&amp;gt;
            &amp;lt;providers&amp;gt;
                &amp;lt;timestamp&amp;gt;
                    &amp;lt;pattern&amp;gt;yyyy-MM-dd'T'HH:mm:ssZ&amp;lt;/pattern&amp;gt;
                    &amp;lt;timeZone&amp;gt;UTC&amp;lt;/timeZone&amp;gt;
                &amp;lt;/timestamp&amp;gt;
                &amp;lt;version/&amp;gt;
                &amp;lt;logLevel/&amp;gt;
                &amp;lt;threadName/&amp;gt;
                &amp;lt;loggerName/&amp;gt;
                &amp;lt;message /&amp;gt;
                &amp;lt;pattern&amp;gt;
                    &amp;lt;pattern&amp;gt;
                        {
                        &quot;service&quot;: &quot;${APP_NAME:-}&quot;,
                        &quot;traceId&quot;: &quot;%X{X-B3-TraceId:-}&quot;
                        }
                    &amp;lt;/pattern&amp;gt;
                &amp;lt;/pattern&amp;gt;

            &amp;lt;/providers&amp;gt;
        &amp;lt;/encoder&amp;gt;
    &amp;lt;/appender&amp;gt;
    

    &amp;lt;appender name=&quot;async-file&quot; class=&quot;ch.qos.logback.classic.AsyncAppender&quot;&amp;gt;
        &amp;lt;filter class=&quot;ch.qos.logback.classic.filter.ThresholdFilter&quot;&amp;gt;
            &amp;lt;level&amp;gt;DEBUG&amp;lt;/level&amp;gt;
        &amp;lt;/filter&amp;gt;
        &amp;lt;!-- 
        발신자의 정보 (class명, 줄번호 등)가 추가되어 수집 서버로 전송여부를 결정합니다.
        true 설정 시, 성능 저하를 일으킬 수 있습니다.        
         --&amp;gt;
        &amp;lt;param name=&quot;includeCallerData&quot; value=&quot;false&quot;/&amp;gt;
        &amp;lt;!-- 
        - blocking queue의 최대 수용 갯수로 기본값은 256입니다.
        - 대기열 용량의 20 % 미만이 남아있을 때 AsyncAppender는 WARN 및 ERROR 이벤트 만 유지하면서 TRACE, DEBUG 및 INFO 수준의 이벤트를 삭제합니다
        --&amp;gt;        
        &amp;lt;param name=&quot;queueSize&quot; value=&quot;2048&quot;/&amp;gt;
        &amp;lt;!-- 
        false로 설정한 경우 큐가 가득찬 상황에서 appender는 메세지 유실을 방지하기 위해 application을 block 합니다. 
        true로 설정된 경우 application을 멈추지 않기 위해 메세지를 버립니다.
        --&amp;gt;                
        &amp;lt;param name=&quot;neverBlock&quot; value=&quot;true&quot;/&amp;gt;
        &amp;lt;!-- 
        LoggerContext가 정지하면 AsyncAppender의 stop 메소드는 작업 스레드가 timeout 될때까지 대기합니다.
        maxFlushTime를 사용하면, timeout 시간을 밀리초로 설정할 수 있습니다.
        해당 시간안에 처리하지 못한 이벤트는 삭제됩니다.
         --&amp;gt;
        &amp;lt;param name=&quot;maxFlushTime&quot; value=&quot;60000&quot;/&amp;gt;
        &amp;lt;appender-ref ref=&quot;file&quot; /&amp;gt;
    &amp;lt;/appender&amp;gt;


    &amp;lt;appender name=&quot;async-stash&quot; class=&quot;net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender&quot;&amp;gt;
        &amp;lt;filter class=&quot;ch.qos.logback.classic.filter.ThresholdFilter&quot;&amp;gt;
            &amp;lt;level&amp;gt;DEBUG&amp;lt;/level&amp;gt;
        &amp;lt;/filter&amp;gt;
        &amp;lt;waitStrategyType&amp;gt;sleeping&amp;lt;/waitStrategyType&amp;gt;
        &amp;lt;appender-ref ref=&quot;stash&quot; /&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;!-- Logger --&amp;gt;
    &amp;lt;logger name=&quot;org.hibernate.SQL&quot; level=&quot;DEBUG&quot; /&amp;gt;
    &amp;lt;logger name=&quot;org.hibernate.tool.hbm2ddl&quot; level=&quot;DEBUG&quot;/&amp;gt;
    &amp;lt;logger name=&quot;org.hibernate.stat&quot; level=&quot;DEBUG&quot; /&amp;gt;
    &amp;lt;logger name=&quot;org.hibernate.type.BasicTypeRegistry&quot; level=&quot;DEBUG&quot; /&amp;gt;
    &amp;lt;logger name=&quot;org.hibernate.type.descriptor.sql&quot; level=&quot;INFO&quot; /&amp;gt;


    &amp;lt;!-- Profile --&amp;gt;
    &amp;lt;springProfile name=&quot;default | dev&quot;&amp;gt;
        &amp;lt;include resource=&quot;org/springframework/boot/logging/logback/base.xml&quot; /&amp;gt;
    &amp;lt;/springProfile&amp;gt;

    &amp;lt;springProfile name=&quot;stage&quot;&amp;gt;
        &amp;lt;root level=&quot;INFO&quot;&amp;gt;
            &amp;lt;appender-ref ref=&quot;async-stash&quot;/&amp;gt;
            &amp;lt;appender-ref ref=&quot;async-file&quot;/&amp;gt;
        &amp;lt;/root&amp;gt;
    &amp;lt;/springProfile&amp;gt;

    &amp;lt;springProfile name=&quot;live&quot;&amp;gt;
        &amp;lt;include resource=&quot;org/springframework/boot/logging/logback/base.xml&quot; /&amp;gt;
    &amp;lt;/springProfile&amp;gt;

&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;%EC%B0%B8%EA%B3%A0&quot; class=&quot;mume-header&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.toast.com/ko/Analytics/Log%20&amp;amp;%20Crash%20Search/ko/logback-sdk-guide/&quot;&gt;https://docs.toast.com/ko/Analytics/Log &amp;amp; Crash Search/ko/logback-sdk-guide/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>Programing/Spring</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/133</guid>
      <comments>https://stylishc.tistory.com/133#entry133comment</comments>
      <pubDate>Wed, 1 May 2019 14:42:17 +0900</pubDate>
    </item>
    <item>
      <title>Alternatives to JPA</title>
      <link>https://stylishc.tistory.com/132</link>
      <description>&lt;p&gt;같이 근무했던 시니어 개발자분께서 내용이 좋다면서 추천해주셔서 &lt;a href=&quot;https://www.youtube.com/watch?v=2zQdmC0vnFU&quot;&gt;링크&lt;/a&gt;를 통하여 동영상을 시청했다. 분량은 대충 1시간 가량 되는데, JPA를 사용하면서도 하이버네이트에 대한 충분한 학습을 하지 못해서 겪었던 지난 1년간의 많은 시행착오들이 생각이 났고, Kotlin을 메인으로 사용했을때의 다양한 선택지에 대해서 고민을 해볼 수 있었던거 같아서 매우 유익했다고 할 수 있다.&lt;/p&gt;
&lt;h1&gt;Alternatives to JPA&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;데이터를 표현하는 관점에 따라 달라 질 수 있다.
&lt;ul&gt;
&lt;li&gt;Relational&lt;/li&gt;
&lt;li&gt;OOP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;두 가지 관점 중 어디를 중점으로 설계 하느냐에 따라 방향이 크게 달라질 수 있다.&lt;/li&gt;
&lt;li&gt;데이터 중심(data-centric)의 경우, OOP적인 설계가 크게 맞지 않을 수 있고, 요즘 ORM을 사용하는 것이 유행인것 마냥 흘러가고 있어서 이에 대한 진지한 고민이 필요해보인다.&lt;/li&gt;
&lt;li&gt;Hibernate가 커버하는 SQL은 약 95프로에 가까운데, 나머지 5프로에 대해서는 커버를 못하기 때문에 실제로 하이엔드 성능을 요구하는 상황에서는 ORM이 맞지 않다고 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;JPA의 장단점?&lt;/h2&gt;
&lt;h3&gt;장점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;비즈니스 레이어에 대해 DB 중심적인 사고가 아닌 어플리케이션 레이어에서 이를 처리해본 사람들은 NoSQL을 사용했을 때의 접근이 수월했다.&lt;/li&gt;
&lt;li&gt;디비 벤더 종속적으로 개발을 하지 않아도 된다.&lt;/li&gt;
&lt;li&gt;SQL문장에 대해 크게 학습을 하지 않아도 된다.
&lt;ul&gt;
&lt;li&gt;문장으로 쓰느냐 vs 코드(API)로 이를 표현하느냐?&lt;/li&gt;
&lt;li&gt;API로 사용하는 것이 Type-safe한 전개가 가능하기 때문에 안정적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stateful, Statless에 대한 지원단점&lt;/li&gt;
&lt;li&gt;SQL에 친숙한 사람들의 경우, JPQL에 대한 반감 혹은 적응이 힘들 수 있다. 두 가지 접근 방법에 대해 상이한 부분이 존재하며 결국 둘다 배워야 하는 점이 생긴다.&lt;/li&gt;
&lt;li&gt;Hibernate에 대한 러닝커브가 상당히 높다.&lt;/li&gt;
&lt;li&gt;Bulk Operation의 성능이 좋지 않다.&lt;/li&gt;
&lt;li&gt;JPA Vendor에서 제공해주는 기능에 대해서 학습 비용이 발생한다.
&lt;ul&gt;
&lt;li&gt;HQL, @DynamicInsert, @LazyCollection&lt;/li&gt;
&lt;li&gt;2nd Cache(recommend JCache(JSR-305))&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;그래서 쿠팡은 어떻게?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;성능보다는 생산성을 위주로 사용했으며, 오픈 후 성능이 나오질 않아서 JPA에 대한 학습도 진행하고 튜닝하는 등의 작업을 진행했었다.&lt;/li&gt;
&lt;li&gt;Not Deep Dive
&lt;ul&gt;
&lt;li&gt;Missing Override(hashCode, equals and toString)&lt;/li&gt;
&lt;li&gt;No Using @NatualId: 비즈니스적인 필요에 의해 @NatualId가 필요한 경우가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Best Practice가 존재하질 않아 제대로 사용하지 못한 케이스가 많았다.&lt;/li&gt;
&lt;li&gt;퍼포먼스가 나오질 않다보니 비용 측면에서도 충분히 줄일 수 있는 부분이 많은데, 제대로 학습을 하지 못해서 생긴 이슈 아닌 이슈가 많았다고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;그래서 JPA에 대안이 될 수 있는 솔루션들은?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;단점은 버리고 장점을 취할 수 있는 다른 대안들은 뭐가 있을까?&lt;/li&gt;
&lt;li&gt;Design Principle
&lt;ul&gt;
&lt;li&gt;OOP 기반의 Multi-DB Vendor&lt;/li&gt;
&lt;li&gt;No Need stateful for Reference Object&lt;/li&gt;
&lt;li&gt;Support association, inheritance, converter in JPA&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Performance
&lt;ul&gt;
&lt;li&gt;Speed up to Plain SQL&lt;/li&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Support Asynchronous or Reactive&lt;/li&gt;
&lt;li&gt;Support Bulk or Batch Operation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Slick&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Database Access Library&lt;/li&gt;
&lt;li&gt;ORM =&amp;gt; Functional Relational Mapping&lt;/li&gt;
&lt;li&gt;Relational Model to Scala OOP&lt;/li&gt;
&lt;li&gt;Natural fit&lt;/li&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Matures(Slick version 3)(Non-Blocking DBIO)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jOOQ&lt;/h3&gt;
&lt;p&gt;가장 도입하기 쉽고 러닝커브가 낮음&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL과 유사하게 API를 사용할 수 있으며, Type-Safe한 성격은 그래도 가져갈 수 있다.&lt;/li&gt;
&lt;li&gt;DB-First, DB Schema로부터 자바의 엔티티 클래스를 만들어야 하는 단점이 존재한다.&lt;/li&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Need DBMS Owner Authority&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Requery&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;No Refelection - apt code generation&lt;/li&gt;
&lt;li&gt;Fast Startup &amp;amp; Performance&lt;/li&gt;
&lt;li&gt;Schema Generation&lt;/li&gt;
&lt;li&gt;Non-Blocking&lt;/li&gt;
&lt;li&gt;upsert&lt;/li&gt;
&lt;li&gt;compile time entity validation&lt;/li&gt;
&lt;li&gt;Support alomost JPA Annotations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Exposed - Kotlin SQL Framework&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lightweight SQL Framework&lt;/li&gt;
&lt;li&gt;Two Layers of data access
&lt;ul&gt;
&lt;li&gt;Typesafe SQL wrapping DSL&lt;/li&gt;
&lt;li&gt;Lightweight Data Access Object&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Not Mature...&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;그래서 적합한 대안은?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기존 레거시 데이터베이스가 존재하는 경우? 자바만 하는 경우?
&lt;ul&gt;
&lt;li&gt;jOOQ, requery&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scala만 사용하는 경우?
&lt;ul&gt;
&lt;li&gt;Slick&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kotlin Only?
&lt;ul&gt;
&lt;li&gt;requery, Exposed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;언어와 상관 없다면?
&lt;ul&gt;
&lt;li&gt;requery&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reactive Programming?
&lt;ul&gt;
&lt;li&gt;requery with kotlinx-requery&lt;/li&gt;
&lt;li&gt;kotlinx-rxjava2-jdbc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Requery Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;안드로이드에서만 쓰이는 것이 아니다.&lt;/li&gt;
&lt;li&gt;충분히 서버 어플리케이션에서도 사용이 가능하다.&lt;/li&gt;
&lt;li&gt;하이버네이트의 Proxy 개념이 없다. 즉, Lazy Initialize라는 개념 자체가 없다. Mybatis랑 비슷한 개념으로 생각해도 좋다. 속도가 생각보다 빠르다.&lt;/li&gt;
&lt;li&gt;부가적으로 라이브러리는 필요없다.&lt;/li&gt;
&lt;li&gt;Upsert 기능이 굉장히 매력적이다.&lt;/li&gt;
&lt;li&gt;Compile Time Entity/Query Validation&lt;/li&gt;
&lt;li&gt;Entity is stateless&lt;/li&gt;
&lt;li&gt;Thread에 제한을 받지 않음(vs JPA EntityManager)&lt;/li&gt;
&lt;li&gt;Support RxJava, Async Operations on Java8&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Why Requery?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Provide Benefit of ORM
&lt;ul&gt;
&lt;li&gt;Entity Mapping&lt;/li&gt;
&lt;li&gt;Schema Generation&lt;/li&gt;
&lt;li&gt;Compile Time Error Detecting&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bulk Operation은 JPA에 비해서 거의 100배 가량 빠르다고 한다. REST API 호출에서 퍼포먼스 Checking을 했을 때는 약 10배 가량 JPA를 사용했을때보다 빠르다고 한다. Upsert 기능이 제공되고 레이지한 로드(프록시를 사용한 접근이 아닌 특정 컬럼만 일부 Fetch하고 추후에 필요한 데이터를 가져오는 방식)도 가능하다.&lt;/p&gt;
&lt;h3&gt;Define Entity - Java, Kotlin&lt;/h3&gt;
&lt;p&gt;JPA와 Hibernate보다는 간결한 기능을 제공하고 있다. 간결한 기능을 제공한다는 것은 JPA와 Hibernate보다는 기능적인 가지 수가 좀 적을 수 있다는 이야기이다.&lt;/p&gt;
&lt;h3&gt;EntityDataStore&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;FindByKey&lt;/li&gt;
&lt;li&gt;select/insert/update/upsert/delete&lt;/li&gt;
&lt;li&gt;where/eq,lte,lt,gt,gte,like,in,not&lt;/li&gt;
&lt;li&gt;groupBy / having / limit / offset&lt;/li&gt;
&lt;li&gt;support SQL Functions
&lt;ul&gt;
&lt;li&gt;count, sum, avg, upper, lower ...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;raw query&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;CoroutineEntityDataStore&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;코틀린에서는 코루틴을 통하여 비동기 프로그래밍이 가능하다. JDBC가 블록킹 구간이 존재하지만 엔티티를 ResultSet으로부터 인스턴싱하는 과정을 비동기로하면 CPU를 좀 더 효율적으로 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;requery는 자바의 CompletableFuture를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;spring-data-requery&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;운영 시스템은 아니더라도 개인 프로젝트에 적용해본다면 별 문제 없겠지만, 운영시스템에 이걸 적용한다면 ..... 상황을 겪을 수 있다. 그래서 만든 것이 spring-data-requery 프로젝트라고 한다.&lt;/li&gt;
&lt;li&gt;RequeryOperations&lt;/li&gt;
&lt;li&gt;RequeryTransactionManager for TransactionManager
&lt;ul&gt;
&lt;li&gt;Support Spring @Transactional&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Better performance than spring-data-jpa
&lt;ul&gt;
&lt;li&gt;exists, paging할때, 매번 연관된 엔티티를 모두 조회하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Repository build in SQL&lt;/li&gt;
&lt;li&gt;ByPropertyName Auto Generation Methods&lt;/li&gt;
&lt;li&gt;@Query, Native SQL Query&lt;/li&gt;
&lt;li&gt;Query By Example&lt;/li&gt;
&lt;li&gt;Not Support
&lt;ul&gt;
&lt;li&gt;조인에 대해서는 개발자가 명시를 해줘야 한다. Annotation Path에 대한 자동으로 Query를 만들어 주지는 않는다.&lt;/li&gt;
&lt;li&gt;Named Parameter의 경우 현재 지원하지 않지만, 추후 지원이 가능 할거라고 한다.Query By Example&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;검색 조건에 대한 Predicate를 작성하는 거랑 비슷함Query By Property&lt;/li&gt;
&lt;li&gt;JPA의 가장 강력한 부분인데, 이에 대한 지원은 하고 있는데, Association에 대한 지원은 위에서 말한대로 현재 없다고 한다.&lt;/li&gt;
&lt;li&gt;JPA의 findXXX 매소드 시그니처를 사용 하듯이 사용하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Exists&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;현재 JPA에서는 ExistExecution에서 모든 조회 결과를 가져오고 이에대한 존재 유무를 체크하게 된다고 한다.&lt;/li&gt;
&lt;li&gt;spring-data-requery에서는 ExistExecution 처리 시, 조회 결과를 단건만 가져와서 조회 조건에 대한 존재 유무를 체크한다고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Delete in JPA&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;연관 관계가 어떻게 되는지 모두 파악 후 Delete에 대한 실행이 진행된다.&lt;/li&gt;
&lt;li&gt;연관 관계에 대한 모든 파악을 진행 후 진행해야 하기 때문에 결국 &lt;code&gt;Read&lt;/code&gt; 작업이 선행될 수 밖에 없다.&lt;/li&gt;
&lt;li&gt;Bulk Operation의 경우, 성능상 손실이 많이 발생한다.&lt;/li&gt;
&lt;li&gt;Bulk Operation의 원래 의도는 Set 방식으로 바로 지우는 것을 원하게 되는데, 이렇게 Read 액션이 먼저 발생하게 되면 성능적으로 느려질 수 밖에 없는 상황이다. Set 방식으로 움직여야 하는 것은 Direct로 SQL 구문을 사용하여 처리 할 수 있도록 가이드를 해주는 것이 중요하다. 깊게 이해하여 사용하는 것이 너무 중요하다.&lt;/li&gt;
&lt;li&gt;작게는 3배 많게는 100배 가량 퍼포먼스 차이가 발생할 수 있다고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Future Works&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Named Parameter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Param&lt;/code&gt; in Spring Data&lt;/li&gt;
&lt;li&gt;Complicated Aggregation Operations&lt;/li&gt;
&lt;li&gt;Requery for Apache Phoenix(Hbase)&lt;/li&gt;
&lt;li&gt;CoroutineEntityStore&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;QnA&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MySQL에서 넘어가는 이유가 뭔가요?
&lt;ul&gt;
&lt;li&gt;Money!!&lt;/li&gt;
&lt;li&gt;AWS RDS Aurora가 비용이 너무 비쌈...ㅠㅠ&lt;/li&gt;
&lt;li&gt;벤치마크 했을 때, 포스트그래가 생각보다 성능이 좋았다.&lt;/li&gt;
&lt;li&gt;JPA를 쓴 것이 성능이 느려서 고생을 했었는데, DB 벤더를 바꿈으로서 얻게 되는 이점이 생각보다 많이 있을 거라고 생각하여 변경을 하게 됐다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/Kotlin</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/132</guid>
      <comments>https://stylishc.tistory.com/132#entry132comment</comments>
      <pubDate>Wed, 1 May 2019 14:33:42 +0900</pubDate>
    </item>
    <item>
      <title>20190311</title>
      <link>https://stylishc.tistory.com/131</link>
      <description>&lt;h1 class=&quot;mume-header&quot; id=&quot;1-%ED%95%A8%EA%BB%98-%EC%9E%90%EB%9D%BC%EA%B8%B0-%EC%95%A0%EC%9E%90%EC%9D%BC%EB%A1%9C-%EA%B0%80%EB%8A%94%EA%B8%B8&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;1. 함께 자라기 애자일로 가는길&lt;/h1&gt;&lt;h1 class=&quot;mume-header&quot; id=&quot;1-%ED%95%A8%EA%BB%98-%EC%9E%90%EB%9D%BC%EA%B8%B0-%EC%95%A0%EC%9E%90%EC%9D%BC%EB%A1%9C-%EA%B0%80%EB%8A%94%EA%B8%B8&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://book.naver.com/bookdb/book_detail.nhn?bid=14341885&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;회사 교육비로 구매한 책이다. 매번 기술 서적만 목을 매어 읽어왔는데, 이번에는 기술 서적이 개발과 관련된 여러 가지 이야기가 담긴 책을 읽어보고 싶었다. 그래서 선택한 책이다. 책은 반 정도 읽은 거 같은데, 나 말고 주변 다른 사람들과 함께 잘 성장하는 방법 그리고 의식적인 학습을 어떻게 잘 할 것인가에 대해 써놓은 글이 매우 인상 깊었다. 두꺼운 책은 아니라서 끝까지 읽는 것에는 부담이 크게 없을 거 같으니 틈틈이 읽어 봐야겠다.&lt;/p&gt;&lt;p data-line=&quot;5&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h1 class=&quot;mume-header&quot; id=&quot;2-jpa-and-database-lock&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;2. JPA And Database Lock&lt;/h1&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;회사 업무 중 복잡한 데이터 처리 과정이 담긴 API를 개발하고 있다. 기존 레거시 시스템을 개선하는 작업이기도 하고 신규 솔루션과 연동해야 하는 업무라서 은근 골치가 아프다. 특히 Lock을 제어해야 하는 코드가 생기고 있는데, 여태까지 데이터베이스를 쓰면서 크게 락에 대한 고민이나 학습을 깊게 안하고 코딩을 했었던 것 같아 스스로에게 반성을 많이 했던 하루였다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;현재 회사에서 데이터베이스에 대한 접근을 JPA + QueryDsl 조합으로 사용하고 있는데 Lock에 대한 접근을 데이터베이스에서의 Read Lock, Write Lock 정도의 구분으로 접근하는 것이 아니라&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;낙관적인 락&lt;/code&gt;&amp;nbsp;그리고&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;비관적인 락&lt;/code&gt;으로 크게 나누어서 분류하고 있으며, 이에 대한 세부 구현도 달라지는 것을 오늘 처음 알았다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;영속성 컨텍스트가 관리해주는 락도 존재하고 있었는데, 이 부분에 대해서는 좀 더 깊게 공부를 해봐야 할거 같다. JPA를 사용하면서 이것저것 재미있게 공부해볼 수 있는 주제가 많은 거 같아서 기쁜 마음도 들지만 한편으로 해야 할 공부가 점점 많아지는 거 같아 괜스레 마음이 더 무거워진다.&lt;/p&gt;&lt;/h1&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/TIL</category>
      <category>Til</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/131</guid>
      <comments>https://stylishc.tistory.com/131#entry131comment</comments>
      <pubDate>Mon, 11 Mar 2019 23:03:04 +0900</pubDate>
    </item>
    <item>
      <title>20190305</title>
      <link>https://stylishc.tistory.com/130</link>
      <description>&lt;h1 id=&quot;effective-java-3e-읽기실습&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.2; margin-top: 1em; margin-bottom: 16px; font-size: 2.25em; padding-bottom: 0.3em; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif;&quot;&gt;1. Effective-Java-3e 읽기/실습&lt;/h1&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; padding-left: 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-bottom: 0px;&quot;&gt;아이템 20. 추상 클래스보다는 인터페이스를 우선하라&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-bottom: 0px;&quot;&gt;아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;자바8의 디폴트 메소드에 대한 언급과 더불어 추상화를 위한 구현 방법으로 인터페이스 단독으로 사용하는 경우와 추상클래스를 인터페이스의 구현으로 사용하고 조금 더 확장성 있는 클래스 구조를 가질 수 있도록 설명하는 구절이 인상적이었다. 인터페이스 역시 앞에서의 아이템 설명처럼 충분히 문서화하고 구현에 설명을 자세히 써주는 것이 중요한 구절 역시 보면서 무릎을 탁!&lt;/p&gt;&lt;p data-line=&quot;7&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-right: 0px; margin-left: 0px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;h1 id=&quot;jsonview&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.2; margin-top: 1em; margin-bottom: 16px; font-size: 2.25em; padding-bottom: 0.3em; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif;&quot;&gt;2.&amp;nbsp;&lt;span class=&quot;citation&quot; data-cites=&quot;JsonView&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;@JsonView&lt;/span&gt;&lt;/h1&gt;&lt;p data-line=&quot;8&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-right: 0px; margin-left: 0px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;pre class=&quot;text language-text language-kotlin&quot; data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; padding: 0.8em 1.4em; overflow: inherit; line-height: 2em; border: rgb(214, 214, 214); border-radius: 2px; font-size: 0.8rem; margin-top: 1.2em; margin-bottom: 1.2em; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; position: relative; overflow-wrap: normal; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;class&lt;/span&gt; LoanContractViews &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;interface&lt;/span&gt; Simple
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;interface&lt;/span&gt; Detailed &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Simple
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;json 반환 데이터를 다이나믹하게 해줘야 할 요구사항이 생겼는데, 이를 처리 하려고 생각하다보니 이전에 사용했던&amp;nbsp;&lt;span class=&quot;citation&quot; data-cites=&quot;JsonView가&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;@JsonView가&lt;/span&gt;&amp;nbsp;얼핏 생각나서 기억을 꺼내서 다시 사용해봤다. 역시 편리하다&lt;/p&gt;&lt;p data-line=&quot;16&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-right: 0px; margin-left: 0px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;h1 id=&quot;reqeustbody-setter-관련&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.2; margin-top: 1em; margin-bottom: 16px; font-size: 2.25em; padding-bottom: 0.3em; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif;&quot;&gt;3.&amp;nbsp;&lt;span class=&quot;citation&quot; data-cites=&quot;ReqeustBody&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;@ReqeustBody&lt;/span&gt;&amp;nbsp;Setter 관련&lt;/h1&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://jojoldu.tistory.com/407&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(0, 136, 204);&quot;&gt;링크&lt;/a&gt;를 읽고 새삼 반성하는 부분이 많았다. 당연히 getter/setter를 만들어서 작업했었고, 이에 대한 값 바인딩이 당연히 setter 기준으로 진행되리라 생각하고 있었는데, 실제로&amp;nbsp;&lt;span class=&quot;citation&quot; data-cites=&quot;ReqeustBody에&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;@ReqeustBody에&lt;/span&gt;&amp;nbsp;대해서는 세터 주입이 안일어나고 Jackson2HttpMessageConverter를 이용한 값 바인딩이 이뤄진다는 사실을 알았다. 근데, Get 요청에 대한 QueryParameter에 대해서는 반드시 setter가 필요하다 by WebDataBinder&lt;/p&gt;</description>
      <category>Programing/TIL</category>
      <category>Til</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/130</guid>
      <comments>https://stylishc.tistory.com/130#entry130comment</comments>
      <pubDate>Tue, 5 Mar 2019 19:11:16 +0900</pubDate>
    </item>
    <item>
      <title>20190304</title>
      <link>https://stylishc.tistory.com/129</link>
      <description>&lt;h1 class=&quot;mume-header&quot; id=&quot;1-effective-java-3e-%EC%9D%BD%EA%B8%B0%EC%8B%A4%EC%8A%B5&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;1. Effective-Java-3e 읽기/실습&lt;/h1&gt;&lt;p data-line=&quot;4&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;img src=&quot;https://i.imgur.com/4P2MqzJ.jpg&quot; alt=&quot;effectiveJava&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; max-width: 100%; max-height: 100%;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;5&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;아이템 18. 상속보다는 컴포지션을 사용하라&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;9&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h1 class=&quot;mume-header&quot; id=&quot;2-%ED%95%A8%EC%88%98%ED%98%95-%EC%BD%94%ED%8B%80%EB%A6%B0&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;2. 함수형 코틀린&lt;/h1&gt;&lt;p data-line=&quot;11&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;img src=&quot;https://i.imgur.com/kgoUbmH.jpg&quot; alt=&quot;arrow&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; max-width: 100%; max-height: 100%;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;12&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;11장. 코틀린에서 스트림 작업&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Collection vs Stream&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Stream vs Observable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Push Model vs Pull Model&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;코틀린에서 Stream 생성&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Termianl Method&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;12장. 애로우 시작&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;함수 합성(Compose)&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;부분 적용&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Pipe&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Curry&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Arrow 구현체를 활용한 불변객체 lense 방법&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;26&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h1 class=&quot;mume-header&quot; id=&quot;3-bean-validation-20&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;3. Bean Validation 2.0&lt;/h1&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;@RequestBody&lt;/code&gt;를 활용한 요청 본문 Validation 중 해당 구현에 대해 조금 더 살펴보고자&amp;nbsp;&lt;a href=&quot;https://beanvalidation.org/2.0/spec/#constraintdeclarationvalidationprocess-containerelementconstraints&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;링크&lt;/a&gt;를 살펴보게 되었다.&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;API 개발을 하면서 모르는 내용을 틈틈히 읽어보고 이렇게 글로 남기는 것이 중요한거 같다.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/TIL</category>
      <category>Til</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/129</guid>
      <comments>https://stylishc.tistory.com/129#entry129comment</comments>
      <pubDate>Mon, 4 Mar 2019 22:54:06 +0900</pubDate>
    </item>
    <item>
      <title>코틀린의 코루틴(`Coroutine`)을 어떻게 이해할것인가?</title>
      <link>https://stylishc.tistory.com/128</link>
      <description>&lt;blockquote style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; background: var(--vscode-textBlockQuote-background); border-left: 4px solid var(--theme-color, #42b983); font-size: 15px; color: rgb(133, 133, 133); margin-right: 0px; margin-bottom: 2em; margin-left: 0px; padding-left: 20px; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; margin-top: 0px !important;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; font-weight: 600;&quot;&gt;본 글은&amp;nbsp;&lt;a href=&quot;https://proandroiddev.com/how-to-make-sense-of-kotlin-coroutines-b666c7151b93&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;How to make sense of Kotlin coroutines&lt;/a&gt;을 읽고 발번역(?)한 내용입니다. 영어에 유창한 분들은 링크를 참고해주세요.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;코루틴은 완벽하게 읽고 유지 보수가 가능한 비동기 코드를 작성하는 좋은 방법이다. Kotlin은 단일 언어 구문으로 비동기 프로그래밍의 기본 요소를 제공하는데, 바로&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspend&lt;/code&gt;&amp;nbsp;키워드이다. 이 키워드와 함께 라이브러리 함수가 빛을 발합니다.&lt;/p&gt;&lt;p data-line=&quot;5&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;what-is-a-coroutine&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;What is a coroutine?&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Kotlin팀은&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine&lt;/code&gt;을&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;경량 스레드: Light-Weighted-Thread&lt;/code&gt;로 정의했습니다.&amp;nbsp;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(44, 62, 80); font-weight: 600;&quot;&gt;그것들은 실제 스레드가 실행 할 수 있는 일종의 작업입니다.&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://kotlinlang.org/&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;Kotlinlang.org&lt;/a&gt;의 배너는 다음과 같습니다.&lt;/p&gt;&lt;p data-line=&quot;8&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1600/1*OEX52nKgM1SHGO4l1mvV1A.gif&quot; alt=&quot;&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; max-width: 100%; max-height: 100%;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;9&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;가장 흥미로운 점은 스레드가 특정 &quot;정지 지점&quot;에서 코루틴 실행을 중지하고 다른 작업을 수행 할 수 있다는 것이다. 나중에 코루틴을 다시 시작하거나 다른 스레드가 처리 할 수 ​​있습니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;따라서 정확성을 높이기 위해 하나의 코 루틴은 정확하게 하나의 &quot;작업&quot;이 아니라 오히려 특정 보장 된 순서로 실행되는 &quot;하위 작업&quot;의 순서입니다. 코드가 하나의 순차 블록에 있는 것처럼 보이더라도 정지 기능에 대한 각 호출은 동시 루틴 내의 새로운 &quot;하위 작업&quot;의 시작을 제한합니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이는 우리에게&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending functions&lt;/code&gt;에 관련된 주제를 다시 던져준다.&lt;/p&gt;&lt;p data-line=&quot;16&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;suspending-functions&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Suspending functions&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;당신은 어쩌면 kotlinx의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;delay&lt;/code&gt;&amp;nbsp;또는 Ktor의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;HttpClient.post&lt;/code&gt;와 같은 함수를 발견 했을 수도 있는데, 이 함수들은 반환되기 전에 무언가를 기다리거나 집중적으로 작업해야하며 suspend 키워드로 표시되어있을 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;19&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;suspend &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;timeMillis&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
suspend &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;someNetworkCallReturningValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; SomeType &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;우리가 위에서 본 것처럼 이를&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;이라고 합니다.&lt;/p&gt;&lt;blockquote style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; background: var(--vscode-textBlockQuote-background); border-left: 4px solid var(--theme-color, #42b983); font-size: 15px; color: rgb(133, 133, 133); margin: 2em 0px; padding-left: 20px; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; font-weight: 600;&quot;&gt;일시 중단 함수는 현재 스레드를 차단하지 않고 현재 코루틴의 실행을 일시 중단 할 수 있습니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;다시 말해, 당신이 보고 있는 코드가&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 호출하는 순간에 실행을 중지 할 수 있으며 나중에 다시 시작 될 수도 있다는 이야기이다.&amp;nbsp;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(44, 62, 80); font-weight: 600;&quot;&gt;그러나, 그 동안 현재 쓰레드가 무엇을 할 지에 대해서는 아무 말도 하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;그 시점에서 또 다른 coroutine을 실행하는 것으로 돌아갈 수 있으며, 나중에 우리가 남긴 coroutine을 다시 실행할 수 있습니다. 이 모든 것은 일시 중지되지 않는 함수 세계에서 일시 중지 함수를 호출하는 방법에 의해 제어되지만 함수 일시 중단에 대해 본질적으로 비동기는 없습니다.&lt;/p&gt;&lt;blockquote style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; background: var(--vscode-textBlockQuote-background); border-left: 4px solid var(--theme-color, #42b983); font-size: 15px; color: rgb(133, 133, 133); margin: 2em 0px; padding-left: 20px; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; font-weight: 600;&quot;&gt;일시 중단 기능은 명시 적으로 사용되는 경우에만 비동기식입니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;우리는 나중에 이것을 보게 될 것이다. 그러나 지금 당장은 함수를 일시 정지하는 것으로 생각하면 잠시 시간을내어 선언하는 특수 함수로 간주 할 수 있습니다. 그리고 그들은 암시적으로 스레드의 복잡성과 파견에 대해 걱정할 필요없이 함수를 하위 작업으로 암시 적으로 분할한다는 점을 명심하십시오. 그것이 실제로 그들이 훌륭한 이유입니다. 여러분이 내부에있을 때 걱정할 필요가 없습니다.&lt;/p&gt;&lt;p data-line=&quot;37&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;the-suspending-world-is-nicely-sequential&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;The suspending world is nicely sequential&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;아마&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;에 특별한 반환 유형이 없는 것을 알아차렸을 수 있다. Java의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Future&lt;/code&gt;&amp;nbsp;또는 JavaScript의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Promise&lt;/code&gt;과 같은 래퍼가 필요하지 않습니다. 이것은&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Promise&lt;/code&gt;을 반환하는 JavaScript의 비동기 함수와 달리 일시 중단 함수가 비동기 적이라는 사실을 강조합니다.&lt;/p&gt;&lt;blockquote style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; background: var(--vscode-textBlockQuote-background); border-left: 4px solid var(--theme-color, #42b983); font-size: 15px; color: rgb(133, 133, 133); margin: 2em 0px; padding-left: 20px; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; font-weight: 600;&quot;&gt;내부 정지 함수로부터, 함수 호출에 대해 순차적으로 추론 할 수 있습니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이것이 바로 비동기식 소재를 Kotlin에서 쉽게 추론 할 수 있게 하는 이유이다.&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;&amp;nbsp;내에서 다른&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;에 대한 호출은 일반 함수 호출과 같이 작동합니다. 우리는 반환 값을 얻고 나머지 코드를 실행하기 전에 호출 된 함수의 실행을 기다릴 필요가 있다.&lt;/p&gt;&lt;p data-line=&quot;44&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;suspend &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;someNetworkCallReturningSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Something &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// some networking operations making use of the suspending mechanism&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

suspend &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;someBusyFunction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Unit &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Printed after 1 second&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; something&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Something &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;someNetworkCallReturningSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Received &lt;span class=&quot;token interpolation variable&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(61, 143, 209);&quot;&gt;$something&lt;/span&gt; from network&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이것이 나중에 복잡한 비동기 코드를 간단한 방법으로 작성할 수 있게 해줍니다.&lt;/p&gt;&lt;p data-line=&quot;59&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;bridging-the-normal-world-and-the-suspending-world&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Bridging the normal world and the suspending world&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;일반 함수에서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 직접 호출하면 컴파일 할 수 없다. 이에 대한 일반적인 설명은&amp;nbsp;&lt;em style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(127, 140, 141);&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutines&lt;/code&gt;&amp;nbsp;만 일시 중단 될 수 있기 때문에&lt;/em&gt;&amp;nbsp;이라고 설명하고 있다. 이런 설명을 통해 우리는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 수행 할&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;을 생성해야 한다는 결론을 내릴 수 있다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;개념적으로 함수를 일시 중단하는 것은 선언에서 &quot;실행하는 데 약간의 시간이 걸릴&quot;수 있습니다. 자신이 일시 중지 기능이 아니라면 다음 두 가지 중 하나를 명시 적으로 수행해야합니다.&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;기다리는 동안 실제로 스레드를 차단합니다 (일반적인 함수 호출과 같이).&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;비동기로 시작하여 즉시 수행하고 (여러 가지 가능한 방법으로 수행 할 수 있음)&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;선택을 표현하는 방법으로 코 루틴 (coroutine)을 생성하는 것을 볼 수 있습니다. 명시 적이어야합니다 (그리고 이것은 대단합니다!) 이것은 coroutine 빌더라고하는 함수를 사용하여 수행됩니다.&lt;/p&gt;&lt;p data-line=&quot;69&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;coroutine-builders&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Coroutine builders&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;는 주어진&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 실행하는 새로운&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine&lt;/code&gt;을 작성하는 간단한 함수입니다. 이러한&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;이 아닌 일반 함수에서 호출될 수 있는데, 왜냐하면 이러한 빌더 함수들은&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;이 아니기 때문입니다. 마치 일반 함수와&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;&amp;nbsp;함수 세계와의 가교 역할을 수행한다고 생각하시면 편합니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Kotlin 표준 라이브러리에는 여러 가지&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;가 포함되어있어 다양한 작업을 수행 할 수 있습니다. 다음 하위 절에서 몇 가지를 볼 것입니다.&lt;/p&gt;&lt;p data-line=&quot;75&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;block-the-current-thread-with-runblocking&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Block the current thread with “runBlocking”&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;코틀린의 일반 함수에서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 다루는 가장 간단한 방법은 현제 실행 중인 스레드를 블록하고 기다리는 방법입니다. 현재 스레드를 블록하는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;&amp;nbsp;함수는 바로&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;입니다.&lt;/p&gt;&lt;p data-line=&quot;78&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; 
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello,&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    
    &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 주어진 suspending lambda function을 실행하는 코루틴을 만들 수 있으며&lt;/span&gt;
    &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 그리고 현재 실행중인 스레드를 해당 함수의 실행이 마무리 될떄까지 블락합니다.&lt;/span&gt;
    runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// coroutine 함수 내부, 함수는 2초동안 정지상태로 유지됨.&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;2000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 아래 코드는 2초 뒤에 실행됨&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;World!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;의 컨텍스트에서 주어진&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;과 호출 계층 구조에 있는 자식은 실행이 끝날 때까지 현재 스레드를 효과적으로 차단합니다.&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;에 전달 된 함수는 서명에서 알 수 있듯이 runBlocking 자체가 일시 중지되지 않고 (스레드 블로킹 인 경우에도) 일시 중단 함수입니다.&lt;/p&gt;&lt;p data-line=&quot;96&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;img src=&quot;https://i.imgur.com/i5aj0dj.png&quot; alt=&quot;&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; max-width: 100%; max-height: 100%;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;97&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;main()&lt;/code&gt;&amp;nbsp;함수에서 일종의 최상위 코루틴을 제공하고 JVM을 활성 상태로 유지하는 데 종종 사용됩니다 (구조화 된 동시성에 대한 섹션에서 볼 수 있습니다).&lt;/p&gt;&lt;p data-line=&quot;100&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;fire-and-forget-with-launch&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Fire-and-forget with “launch”&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;일반적으로&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;의 핵심은 스레드를 블록하는 것이 아니라 비동기 작업을 시작하는 것입니다.&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;launch&lt;/code&gt;이라는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;는 백그라운드에서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;을 시작하고 그동안 계속 작업 할 수 있게 합니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Kotlin 문서를 통해 아래와 같은 예제를 확인 할 수 있다.&lt;/p&gt;&lt;p data-line=&quot;105&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; 
    GlobalScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;launch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 새로운 코루틴을 백그라운드에서 실행하고 이후 단계를 진행한다.&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;World!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello,&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// main thread continues here immediately    &lt;/span&gt;
    runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;     &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 그러나 이 표현식은 현제 실행중인 스레드를 블락한다.&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;2000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// 우리가 2초 가량 대기하는 동안에도 JVM은 살이 있는 상태를 유지한다.        &lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt; 
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;의견은 스스로에 대해 말해야합니다. 그러면 &quot;Hello&quot;가 즉시 인쇄되고 두 번째 후에 &quot;World!&quot;가 추가됩니다. 이 예제의 목적을 위해라도 어찌되었던간에 메인 함수를 블록해야&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;launch&lt;/code&gt;에서 무슨 일이 발생하는지 확인 할 수 있습니다. 그래서 JVM을 계속 유지하기 위해&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;을 여기에서 다시 사용하고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;120&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;get-a-result-asynchronously-with-async&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Get a result asynchronously with “async”&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;다음은 값을 반환하는 비동기 작업을 수행 할 수 있는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;async&lt;/code&gt;라는 또 다른&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;입니다.&lt;/p&gt;&lt;p data-line=&quot;123&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; deferredResult&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Deferred&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; GlobalScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;World!&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    
    runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello, &lt;span class=&quot;token interpolation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;span class=&quot;token delimiter variable&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(61, 143, 209);&quot;&gt;${&lt;/span&gt;deferredResult&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token delimiter variable&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(61, 143, 209);&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;지연 값의 결과를 얻으려면 async가 편리한 Deferred 객체를 반환합니다. 이는 자바의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Future&lt;/code&gt;&amp;nbsp;또는 자바스크립트의&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Promise&lt;/code&gt;와 같습니다. 지연 값에 대해&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;await&lt;/code&gt;를 호출함으로써 결과를 기다리고 획득 할 수 있습니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;await&lt;/code&gt;는 일반적인 블록킹 함수가 아닌&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;입니다. 이말인 즉슨, 메인 함수에서 호출 할 수 없다는 것을 의미합니다. 결과를 기다리기 위해 실제 main 함수를 블록해야 해야 되며 그래서 여기서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;을 사용하여 호출을 대기시킵니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;날카로운 눈빛을 가진 사람들은 GlobalScope를 다시 보았을 수 있습니다. 그래서 이제 GlobalScope에 대해 이야기 하려고 합니다.&lt;br style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;GlobalScope란 coroutines의 계층을 만들 수 있는 도구라고 볼 수 있습니다. Kotlin팀은 이를 구조화 된 동시성(&lt;a href=&quot;https://kotlinlang.org/docs/reference/coroutines/basics.html#structured-concurrency&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;structured concurrency&lt;/a&gt;)이라 부르고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;143&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;structured-concurrency&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Structured concurrency&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;만약 위에서 봤던 예제들을 잘 따라왔다면, 고전적인 &quot;블록을 완료하고 내 코루틴이 끝날 때까지 기다리는&quot; 패턴을 알아야 할 필요가 있음을 눈치 챘을 것이다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Java에서는 위에서와 같은 패턴을 구현하는 방법으로 대개 스레드에 대한 참조를 유지하고 모든 스레드를 기다리는 동안 주 스레드를 블록하기 위해 스레드에 대한 참조를 유지하고 모든 스레드에 대한 join을 호출하여 결과를 얻습니다. 우리는 Kotlin의 coroutine을 이용하여 비슷한 일을 할 수 있습니다. 그러나 이것은 전혀 관용적이지 않습니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Kotlin에서는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutines&lt;/code&gt;을 계층 구조로도 생성 할 수 있습니다. 이 계층 구조를 사용하면 부모 coroutine이 자동으로 자식 coroutines의 수명주기를 관리 할 수 ​​있습니다. 예를 들어, 하위 코루틴의 실행이 완료 할 때까지 기다리는 일도, 그 중 하나에서 예외가 발생하는 경우 모든 하위 코루틴의 실행을 취소 할 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;151&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;creating-a-hierarchy-of-coroutines&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Creating a hierarchy of coroutines&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;에서 호출하면 안되는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;을 제외하고 모든&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;CoroutineScope&lt;/code&gt;&amp;nbsp;클래스의 확장 함수 형태로 선언되어 있는데,&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;을 구조화하도록 권장합니다.&lt;/p&gt;&lt;p data-line=&quot;154&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;runBlocking&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; T &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; CoroutineScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Deferred&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; CoroutineScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;launch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Job &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; CoroutineScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;produce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; ReceiveChannel&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Coroutine을 생성하려면 GlobalScope (최상위 수준, Top-Level Coroutine) 또는 이미 존재하는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;CoroutineScope&lt;/code&gt;&amp;nbsp;(해당 범위의 자식 Coroutine)에서 이러한 빌더를 호출해야합니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;In fact, if you write a function that creates coroutines, you should declare it as an extension of the CoroutineScope class too&lt;br style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;사실,&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;을 만드는 함수를 작성한다면&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;CoroutineScope&lt;/code&gt;&amp;nbsp;클래스의 확장으로 선언해야합니다. 이는 관례적으로&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;를 쉽게 호출 할 수 있게 해주는데, 왜냐하면&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Scope&lt;/code&gt;에 대한 참조를&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;this&lt;/code&gt;를 통하여 할 수 있기 때문입니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;의 매소드 시그니처를 살펴보면 매개 변수로 사용하는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;이&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;CoroutineScope&lt;/code&gt;&amp;nbsp;클래스의 확장 기능으로 정의되어 있음을 알 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;170&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; CoroutineScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;
    block&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; suspend CoroutineScope&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;-&amp;gt;&lt;/span&gt; T
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; Deferred&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이는 수신자를 지정하지 않고도 그 함수의 내부에서 다른&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine Builder&lt;/code&gt;를 호출 할 수 있음을 의미합니다. 그리고, 암시적인 수신자는 현재 코루틴의 자식 스코프가 될 수 있습니다. 이때 현재 코루틴은 부모로서의 역할을 수행하게 됩니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이전 예제를 보다 관용적인 방식으로 구조화 하는 방법은 아래와 같습니다.&lt;/p&gt;&lt;p data-line=&quot;182&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; deferredResult &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; async &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;World!&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello, &lt;span class=&quot;token interpolation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;span class=&quot;token delimiter variable&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(61, 143, 209);&quot;&gt;${&lt;/span&gt;deferredResult&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(82, 82, 82);&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token delimiter variable&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(61, 143, 209);&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; 
    launch &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;World!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello,&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;1000L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;범위가 wrapping runBlocking 호출에 의해 제공되기 때문에 더 이상 GlobalScope가 필요하지 않습니다. 또한 자식&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;Coroutine&lt;/code&gt;이 끝날 때까지 기다릴 필요가 없습니다.&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;은 모든 자식이 자신의 실행을 완료하기 전에 완료 될 때까지 기다릴 것이므로 주 스레드는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;에 의해 블록 상태를 유지합니다.&lt;/p&gt;&lt;p data-line=&quot;208&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;the-coroutinescope-builder&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;The coroutineScope builder&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;runBlocking&lt;/code&gt;을 사용하는 것은&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;&amp;nbsp;내부에서 권장하지 않을 수 있음을 알 수 있을 것이다. 이는 Kotlin팀이&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;&amp;nbsp;내부에서 현재 스레드가 블록되지 않길 원하기도 했고, 대신&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 사용하길 권하고 있습니다. runBlocking에 해당하는 중단은 coroutineScope 빌더입니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutineScope&lt;/code&gt;는 모든 자식 코루틴이 실행을 완료 할 때까지 현재의 coroutine을 일시 중단합니다. 다음은 Kotlin 문서에서 직접 취한 예제입니다:&lt;/p&gt;&lt;p data-line=&quot;213&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; runBlocking &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// this: CoroutineScope&lt;/span&gt;
    launch &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;200L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Task from runBlocking&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    
    coroutineScope &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// Creates a new coroutine scope&lt;/span&gt;
        launch &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;500L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; 
            &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Task from nested launch&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;100L&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Task from coroutine scope&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// This line will be printed before nested launch&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Coroutine scope is over&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// This line is not printed until nested launch completes&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p data-line=&quot;234&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;beyond-the-basics&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Beyond the basics&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;여기에서 설명하는 기본 구성 요소는 실제로 코 틀린의 coroutines 개념의 가장 큰 측면이 아닙니다. 우리는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;channel&lt;/code&gt;,&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;producer&lt;/code&gt;&amp;nbsp;및&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;consumer&lt;/code&gt;&amp;nbsp;등을 사용하여 동시성이 필요한 것을 정말 멋지게 표현하기 위해&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;을 사용할 수 있습니다. 그러나 우리는 먼저 이러한 빌딩 블록을 이해해야하며 그 위에 더 높은 추상화를 만들기 시작해야한다고 생각합니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;coroutine&lt;/code&gt;에 관해서는 많은 이야기가 있습니다.이 기사는 물론 표면적인 내용이 많긴 하지만, 이 글이 코루틴과&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;suspending function&lt;/code&gt;을 더 잘 이해하는데 도움이 되기를 바랍니다.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;특정 부분에 대해 더 궁금하거나 이 글이 도움이 된다면 저에게 알려주시면 좋을꺼 같습니다. 만약 자잘한 실수가 보이면 망설이지 말고 알려주시구요.&lt;/p&gt;&lt;p data-line=&quot;242&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;very-helpful-resources&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Very helpful resources&lt;/h2&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;조금 시간을 할애 할 수 있다면, Kotlin Conf에서 Roman Elizarov가 발표했던 코루틴 관련 영상을 보시길 추천합니다.&lt;/p&gt;&lt;p data-line=&quot;245&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;coroutines-in-practice&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Coroutines in practice&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;이 강연에서 Roman은 코루틴에 대해 아주 빠르게 요약하고 이어서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;channels&lt;/code&gt;,&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;actors&lt;/code&gt;&amp;nbsp;등을 사용하여 코루틴을 아주 잘 사용하는 방법을 설명하고 있습니다.&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=a3agLJQ6vt8&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;KotlinConf 2018 - Kotlin Coroutines in Practice by Roman Elizarov&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;251&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/p&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;kotlin-conf-2017&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Kotlin conf 2017&lt;/h3&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;2017 Kotlin conf에서 발표했던 내용 역시 여전히 유용합니다.&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Introduction to Coroutines : 이것은 기본적으로 내 기사의 내용이지만 보다 정확하고 나은 설명이 포함되어 있습니다&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Deep Dive into Coroutines : 함수 및 coroutine을 실제로 중단시키는 방법에 대한 세부 정보를 설명합니다. 매우 계몽적인&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/Kotlin</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/128</guid>
      <comments>https://stylishc.tistory.com/128#entry128comment</comments>
      <pubDate>Sat, 2 Mar 2019 20:13:01 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin With Spring Boot</title>
      <link>https://stylishc.tistory.com/127</link>
      <description>&lt;h1 class=&quot;mume-header&quot; id=&quot;kotlin-with-springboot&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-bottom: 1.2em; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;현재 재직중인 회사에서 코틀린을 주력으로 사용하고 있는데, 지난 1년 정도 코틀린과 스프링부트를 사용해보면서 겪었던 삽질이나 좋았던 점을 스터디를 통하여 한 번 정리하면 좋겠다하는 마음에서 정리하게 됬다.&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;시작하기 어렵지 않다. Spring Intializer에서 Kotlin 프로젝트를 쉽게 생성 할 수 있으며, 물론 버젼의 제약이 있긴 하겠지만 기존 자바 기반으로 운영하고 있더라도 쉽게 Koltin을 통한 추가 기능 개발이 가능하다.&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;현재 코틀린은 1.3.21 버젼까지 사용할 수 있으며 SpringFramework 5.X, SpringBoot 2.X부터는 공식적으로 코틀린에 대한 지원을 시작했다.&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;SpringFramework 5.2 부터는 코틀린의 협력적 멀티테스킹을 수행할 수 있는&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;코루틴&lt;/code&gt;에 대한 지원이 들어갈 예정.&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/5.2.0.BUILD-SNAPSHOT/spring-framework-reference/languages.html#coroutines&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;Reference Document&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://github.com/Kotlin/kotlin-coroutines-examples&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983); font-weight: 600;&quot;&gt;example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;기존 자바로 개발을 하던 사람이라면 누구나 쉽게 코틀린에 접근을 할 수 있다고 생각한다. 필자 역시 작년 4월부터 코틀린으로 개발을 시작했을 때, 생각보다 시작할 때의 러닝 커브가 높지 않았고 기존 자바 + 스프링에 대한 경험이 있었던 덕분인지 큰 어려움까지는 없었다.&lt;/p&gt;&lt;p data-line=&quot;11&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%84-%EC%93%B0%EB%A9%B4%EC%84%9C-%ED%8E%B8%EB%A6%AC%ED%95%98%EA%B1%B0%EB%82%98-%EC%A2%8B%EC%9D%80-%EC%A0%90&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;코틀린을 쓰면서 편리하거나 좋은 점&lt;/h2&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;null%EC%97%90-%EB%8C%80%ED%95%9C-%ED%8E%B8%EB%A6%AC%ED%95%9C-%ED%8C%90%EB%8B%A8-null-%EC%95%88%EC%A0%95%EC%84%B1&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Null에 대한 편리한 판단, Null 안정성&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p data-line=&quot;12&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;13&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;person&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Daniel&quot;&lt;/span&gt;
person&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
person&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;toUpperCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;UPPERCASE&quot;&lt;/span&gt;
person&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Null이 아닐때 실행되요&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Null이면 여기에요&quot;&lt;/span&gt;

&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;엘비스 연산자(&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;?:&lt;/code&gt;)와 안전한 호출 연산(&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;?&lt;/code&gt;)를 활용하면 Null이 될 수 있는 값에 대한 기본 값 지정 및 별도의 표현식을 지정 할 수 있다.&lt;/p&gt;&lt;p data-line=&quot;24&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;data-class&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;data class&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p data-line=&quot;25&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;AddressDto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; street&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt; 
	&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; zipCode&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; city&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; String
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;자동으로 구현해주는 equals와 hashCode가 있어서 기존 자바에서 구현 시 직접 구현해주거나 autoValue 혹은 lombok과 같은 별도의 구현체를 사용하지 않아서 편리하다.&lt;/p&gt;&lt;p data-line=&quot;33&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;%EB%8B%A4%EC%96%91%ED%95%9C-%ED%99%95%EC%9E%A5-%ED%95%A8%EC%88%98&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;다양한 확장 함수&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;기본으로 제공해주는 다양한 확장 함수가 존재한다. 기존 자바로 개발했을 때는 Array를 Collection으로 변환하여 필터 혹은 Map을 하는 등 복잡한 단계가 필요했었는데, 코틀린에서는 이를 확장 함수 형태로 호출 할 수 있도록 기본 API를 제공해주고 있어서 편리하다.&lt;/p&gt;&lt;p data-line=&quot;36&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;%ED%8E%B8%EB%A6%AC%ED%95%9C-%EB%9E%8C%EB%8B%A4-%EC%82%AC%EC%9A%A9-%EC%A4%91%EC%9C%84-%EC%97%B0%EC%82%B0%EC%9E%90&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;편리한 람다 사용 &amp;amp; 중위 연산자&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem;&quot;&gt;람다에 대한 선언을 변수에 편리하게 지정 할 수 있고 람다를 넘길 수 있는 고차 함수에 편리하게 해당 선언을 넘길 수 있다. 또한 람다에 대한 성능이 걱정된다면&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;inline&lt;/code&gt;&amp;nbsp;함수를 사용하여 이를 최적화 할 수도 있다. 코틀린에서 제공해주는 기본 함수 중 상당수가&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;inline&lt;/code&gt;&amp;nbsp;함수의 형태로 선언되어 있다.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem;&quot;&gt;중위 연산자(&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;infix&lt;/code&gt;)를 활용하면 코드가 깔끔하게 표현할 수 있다. 아래는 Pair 선언을 하는 중위 연산자 표현이다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;40&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; pair &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; pairList &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;listOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;람다와 중위 연산자를 잘 활용하면 간단한 DSL을 쉽게 작성 할 수 있다. 아래는 kotlinx에서 제공해주는 html dsl 관련 예제 코드이다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;49&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;body &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
	div &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;https://kotlinlang.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
            target &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; ATarget&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;blank
            &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token string&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;&quot;Main site&quot;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p data-line=&quot;62&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h2 class=&quot;mume-header&quot; id=&quot;%EA%B2%AA%EC%97%88%EB%8D%98-%EC%82%BD%EC%A7%88%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%B5%EC%9C%A0-%ED%98%B9%EC%9D%80-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%98%EB%8A%94-%EB%82%B4%EC%9A%A9%EC%9D%80&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.75rem; color: rgb(44, 62, 80); margin: 45px 0px 0.8rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;겪었던 삽질에 대한 공유 혹은 알아야 하는 내용은?&lt;/h2&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;null%EC%9D%B4-%EC%95%84%EB%8B%88%EC%A7%80%EB%A7%8C-null%EC%9D%B8-%EA%B2%BD%EC%9A%B0%EA%B0%80-%EC%9E%88%EB%8B%A4&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;Null이 아니지만 Null인 경우가 있다.&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p data-line=&quot;63&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;64&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Bus&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;int&lt;/span&gt; no&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;final&lt;/span&gt; String title&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Bus&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;int&lt;/span&gt; no&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt; String title&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;no &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; no&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;title &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; title&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;getNo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;return&lt;/span&gt; no&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;public&lt;/span&gt; String &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;getTitle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;return&lt;/span&gt; title&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;static&lt;/span&gt; Bus &lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;getNullObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Bus&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(199, 107, 41);&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;,&lt;/span&gt; null&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p data-line=&quot;88&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;kotlin&quot; class=&quot;language-kotlin&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;span class=&quot;token keyword&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0);&quot;&gt;val&lt;/span&gt; busTitle&lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;=&lt;/span&gt; Bus&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;getNullObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;title
&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;busTitle&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;toUpperCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(142, 144, 140);&quot;&gt;// throw Runtime Exception&lt;/span&gt;
&lt;/pre&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;Java로 정의 · 선언된 참조 타입을 Kotlin에서는 Platform Type 타입이라고 부른다.&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;특히 JPA를 사용하면서 null값이 들어가 있는 멤버 변수를 활용하다가 삽질을 겪었던 경험도 있다. 아무튼 상호운용과 관련하여 각별한 주의가 필요한 부분이다.&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;이를 피하기 위해서는 @Nullable 혹은 @NotNull 어노테이션을 자바 코드에 명시 해줘야 코틀린쪽 컴파일러에서 이를 인지하여 처리할 수 있다. 아래는 비슷한 효과를 내는 어노테이션들 목록이다.&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;@Nullable&lt;/code&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.jetbrains.annotations.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;android.support.annotation.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;com.android.annotations.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.eclipse.jdt.annotation.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.checkerframework.checker.nullness.qual.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;javax.annotation.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;javax.annotation.CheckForNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;edu.umd.cs.findbugs.annotations.CheckForNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;edu.umd.cs.findbugs.annotations.Nullable&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;edu.umd.cs.findbugs.annotations.PossiblyNull&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;@NotNull&lt;/code&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.jetbrains.annotations.NotNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;edu.umd.cs.findbugs.annotations.NonNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;android.support.annotation.NonNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;com.android.annotations.NonNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.eclipse.jdt.annotation.NonNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;org.checkerframework.checker.nullness.qual.NonNull&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;lombok.NonNull&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;117&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h3 class=&quot;mume-header&quot; id=&quot;with-jpa&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 1.5rem; color: rgb(44, 62, 80); margin: 40px 0px 0.6rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;With JPA&lt;/h3&gt;&lt;h1 class=&quot;mume-header&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 2rem; color: rgb(44, 62, 80); margin: 0px 0px 1rem; font-family: &amp;quot;Source Sans Pro&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;기존 자바에서 JPA를 경험했던 개발자라면 크게 사용상 어려움은 없으리라 생각한다. 하지만 아래에서 설명하는 기본 설정 관련된 부분에 대해 초기에는 신경 쓸 부분이 존재한다. 아래 내용은 JPA 사용 관련하여 알고 있어야 하는 내용 몇개를 정리해봤다.&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;엔티티의 클래스의 경우 인자가 없는 생성자가 필수이기 때문에 이를 코드로 직접 생성해줘야 하는 번거로움이 있다.(자바할때는 당연한거였는데...) 이를 피하기 위해서는 빌드 경로에 kotlin-noarg 컴파일러 플러그인을 넣으면 Hibernate 엔티티에 대해 인수가 없는 생성자가 생성된다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;121&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;gradle&quot; class=&quot;language-gradle&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 0.8em 0px; font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; display: block; line-height: 2em; max-width: inherit; overflow: inherit;&quot;&gt;buildscript {
    dependencies {
        classpath &quot;org.jetbrains.kotlin:kotlin-noarg:$kotlin_version&quot;
    }
}

apply plugin: &quot;kotlin-jpa&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(44, 62, 80); font-weight: 600;&quot;&gt;Kotlin 클래스는 기본적으로 Final 클래스이다.&lt;/span&gt;&amp;nbsp;엔티티의 지연로드를 사용하는 경우 엔티티 클래스는 Final로 선언되어 있으면 안된다.&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;kotlin-allopen&lt;/code&gt;&amp;nbsp;플러그인을 사용하여 아래와 같이 엔티티 타입의 클래스에 대해서는 final이 아닌 open 형태로 선언되도록 해야 한다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;132&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;gradle&quot; class=&quot;language-gradle&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 0.8em 0px; font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; display: block; line-height: 2em; max-width: inherit; overflow: inherit;&quot;&gt;buildscript {
    dependencies {
        classpath(&quot;org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}&quot;)
    }
}
allOpen {
    annotation(&quot;javax.persistence.Entity&quot;)
    annotation(&quot;javax.persistence.MappedSuperclass&quot;)
    annotation(&quot;javax.persistence.Embeddable&quot;)
} 
&lt;/code&gt;&lt;/pre&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; line-height: 1.6rem; word-spacing: 0.05rem; padding-left: 1.5rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box;&quot;&gt;JPA에 한정된 내용은 아니지만 AnnotationProcessor 사용 시&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;kotlin-kapt&lt;/code&gt;&amp;nbsp;플러그인을 사용하면 된다. 특히 회사에서&amp;nbsp;&lt;code style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: rgb(233, 105, 0); border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 3px 5px; white-space: pre-wrap; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace;&quot;&gt;queryDsl&lt;/code&gt;을 공통으로 사용하고 있었기 때문에 해당 설정을 해줬어야 했다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;147&quot; class=&quot;sync-line&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin-right: 0px; margin-left: 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;&quot; class=&quot;language-&quot; style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 0.8rem; background-color: rgb(248, 248, 248); font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; line-height: 2em; margin-top: 1.2em; margin-bottom: 1.2em; overflow: inherit; padding: 0.8em 1.4em; position: relative; overflow-wrap: normal; border-radius: 2px; color: rgb(82, 82, 82); max-width: inherit; font-weight: 400;&quot;&gt;&lt;code style=&quot;-webkit-font-smoothing: initial; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; border-radius: 2px; font-size: 0.8rem; margin: 0px 2px; padding: 0.8em 0px; font-family: &amp;quot;Roboto Mono&amp;quot;, Monaco, courier, monospace; display: block; line-height: 2em; max-width: inherit; overflow: inherit;&quot;&gt;apply plugin: 'kotlin-kapt'
idea {
    module {
        def kaptMain = file('build/generated/source/kapt/main')
        sourceDirs += kaptMain
        generatedSourceDirs += kaptMain
    }
}
....
dependencies {
	...
    implementation(&quot;com.querydsl:querydsl-jpa:${queryDslVersion}&quot;)
    kapt(&quot;com.querydsl:querydsl-apt:${queryDslVersion}:jpa&quot;)
	
}
&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; font-size: 15px; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; color: rgb(52, 73, 94); font-weight: 400;&quot;&gt;기존 node.js를 주력으로 서버 어플리케이션 개발을 많이 해왔던 나로서는 코틀린의 유연하고 편리한 구문과 문법은 큰 매력적으로 다가왔고 지금도 이를 잘 알고 활용하고 싶은 마음이 크다. 우스게 소리로 팀원들과 이제 자바로 못돌아가겠다라는 이야기를 자주 하곤 한다. 이 만큼 코틀린으로 개발하는 것이 주는 재미와 더불어 걍력한 생산성이 매력적이라는 이야기이다.&lt;/p&gt;&lt;blockquote style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; background: var(--vscode-textBlockQuote-background); border-left: 4px solid var(--theme-color, #42b983); font-size: 15px; color: rgb(133, 133, 133); margin: 2em 0px; padding-left: 20px; font-weight: 400;&quot;&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; margin: 1.2em 0px; line-height: 1.6rem; word-spacing: 0.05rem; font-weight: 600;&quot;&gt;코틀린과 관련된 생태계나 관련 구현체를 찾을 때는&amp;nbsp;&lt;a href=&quot;https://github.com/KotlinBy/awesome-kotlin&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;awesome Kotlin&lt;/a&gt;을 참고하면 많은 도움이 된다. 그리고 주 단위로 발행해주는&amp;nbsp;&lt;a href=&quot;https://us12.campaign-archive.com/home/?u=f39692e245b94f7fb693b6d82&amp;amp;id=93b2272cb6&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-size-adjust: none; box-sizing: border-box; color: var(--theme-color, #42b983);&quot;&gt;Kotlin-Weekly&lt;/a&gt;의 기사를 참고하는 것도 역시 많은 도움이 된다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/h1&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/Kotlin</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/127</guid>
      <comments>https://stylishc.tistory.com/127#entry127comment</comments>
      <pubDate>Sat, 2 Mar 2019 19:57:38 +0900</pubDate>
    </item>
    <item>
      <title>이펙티브자바3판 - [2장] 모든 객체의 공통 메서드</title>
      <link>https://stylishc.tistory.com/126</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;ch3&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;2%EC%9E%A5-%EB%AA%A8%EB%93%A0-%EA%B0%9D%EC%B2%B4%EC%9D%98-%EA%B3%B5%ED%86%B5-%EB%A9%94%EC%84%9C%EB%93%9C&quot;&gt;[2&amp;#xC7A5;] &amp;#xBAA8;&amp;#xB4E0; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xACF5;&amp;#xD1B5; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Objects&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4E4; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xAD6C;&amp;#xCCB4; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xBA74;&amp;#xC11C; &amp;#xAE30;&amp;#xBCF8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC0C1;&amp;#xC18D;&amp;#xD558;&amp;#xC5EC; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&lt;/li&gt;
&lt;li&gt;equals, hashCode, toString, clone, finalize &amp;#xBAA8;&amp;#xB450; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xB97C; &amp;#xC5FC;&amp;#xB450;&amp;#xB85C; &amp;#xB450;&amp;#xACE0; &amp;#xC124;&amp;#xACC4;&lt;/li&gt;
&lt;li&gt;&amp;#xC77C;&amp;#xBC18; &amp;#xADDC;&amp;#xC57D;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB3C4;&amp;#xB85D; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;(overriding)&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xBA70;, &amp;#xC798;&amp;#xBABB; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xBA74; &amp;#xC624;&amp;#xC791;&amp;#xB3D9;&amp;#xC744; &amp;#xBC1C;&amp;#xC0DD; &amp;#xC2DC;&amp;#xD0AC; &amp;#xC218; &amp;#xC788;&amp;#xC74C;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;item-10-equals%EB%8A%94-%EC%9D%BC%EB%B0%98-%EA%B7%9C%EC%95%BD%EC%9D%84-%EC%A7%80%EC%BC%9C-%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%98%EB%9D%BC&quot;&gt;ITEM 10 - equals&amp;#xB294; &amp;#xC77C;&amp;#xBC18; &amp;#xADDC;&amp;#xC57D;&amp;#xC744; &amp;#xC9C0;&amp;#xCF1C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xB77C;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC77C;&amp;#xBC18; &amp;#xADDC;&amp;#xC57D;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB3C4;&amp;#xB85D; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC744;&amp;#xAEBC;&amp;#xBA74; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xB97C; &amp;#xC548;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xCD5C;&amp;#xC120;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB798; &amp;#xD56D;&amp;#xBAA9;&amp;#xC774; &amp;#xD574;&amp;#xB2F9;&amp;#xD558;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xB97C; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xD06C;&amp;#xAC8C; &amp;#xC758;&amp;#xBBF8;&amp;#xAC00; &amp;#xC5C6;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xC74C;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xAC01; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB294; &amp;#xBCF8;&amp;#xC9C8;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xACE0;&amp;#xC720;&lt;/li&gt;
&lt;li&gt;&amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xC758; &lt;code&gt;&amp;#xB17C;&amp;#xB9AC;&amp;#xC801; &amp;#xB3D9;&amp;#xCE58;&amp;#xC131;&lt;/code&gt;&amp;#xC744; &amp;#xAC80;&amp;#xC0AC;&amp;#xD560; &amp;#xC77C;&amp;#xC774; &amp;#xC5C6;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;li&gt;&amp;#xC0C1;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC815;&amp;#xC758;&amp;#xD55C; &lt;code&gt;equals&lt;/code&gt;&amp;#xAC00; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0; &amp;#xB531; &amp;#xB4E4;&amp;#xC5B4;&amp;#xB9DE;&amp;#xB294; &amp;#xACBD;&amp;#xC6B0;&lt;/li&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &lt;code&gt;private&lt;/code&gt;&amp;#xC774;&amp;#xAC70;&amp;#xB098; &lt;code&gt;package-private&lt;/code&gt;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;, equals&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD560; &amp;#xC77C;&amp;#xC774; &amp;#xC5C6;&amp;#xC74C;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xADF8;&amp;#xB7FC; &amp;#xC5B8;&amp;#xC81C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD574;&amp;#xC57C; &amp;#xD560;&amp;#xAE4C;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xAC1D;&amp;#xCCB4; &amp;#xAC04; &lt;code&gt;&amp;#xB17C;&amp;#xB9AC;&amp;#xC801; &amp;#xB3D9;&amp;#xCE58;&amp;#xC131;&lt;/code&gt;&amp;#xC744; &amp;#xD655;&amp;#xC778;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xB370; &amp;#xC0C1;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &lt;code&gt;equals&lt;/code&gt;&amp;#xAC00; &amp;#xC774;&amp;#xB97C; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xC815;&amp;#xC758;&amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xC558;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD574;&amp;#xC57C; &amp;#xD568;.&lt;/li&gt;
&lt;li&gt;&amp;#xC8FC;&amp;#xB85C; &amp;#xAC12; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;&amp;#xAC00; &amp;#xD574;&amp;#xB2F9; &amp;#xD568;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;equals&lt;/code&gt;&amp;#xC758; &amp;#xC77C;&amp;#xBC18; &amp;#xADDC;&amp;#xC57D;&amp;#xC740; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xBC18;&amp;#xC0AC;&amp;#xC131;: &amp;#xC790;&amp;#xAE30; &amp;#xC790;&amp;#xC2E0;&amp;#xACFC; &amp;#xAC19;&amp;#xC544;&amp;#xC57C; &amp;#xD568;.&lt;/li&gt;
&lt;li&gt;&amp;#xB300;&amp;#xCE6D;&amp;#xC131;: x&amp;#xAC00; y&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;&amp;#xBA74;, y&amp;#xB3C4; x&amp;#xC640; &amp;#xAC19;&amp;#xC544;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xCD94;&amp;#xC774;&amp;#xC131;: x&amp;#xAC00; y&amp;#xC640; &amp;#xAC19;&amp;#xACE0;, y&amp;#xAC00; z&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;&amp;#xBA74;, x&amp;#xB294; z&amp;#xC640; &amp;#xAC19;&amp;#xC544;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC77C;&amp;#xAD00;&amp;#xC131;: x&amp;#xC640; y&amp;#xAC00; &amp;#xAC19;&amp;#xB2E4;&amp;#xBA74;, &amp;#xC601;&amp;#xC6D0;&amp;#xD788; &amp;#xAC19;&amp;#xC544;&amp;#xC57C; &amp;#xD568;.&lt;/li&gt;
&lt;li&gt;null-&amp;#xC544;&amp;#xB2D8;: null&amp;#xACFC; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC758;&amp;#xBBF8;&amp;#xAC00; &amp;#xC5C6;&amp;#xC74C;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xAD6C;&amp;#xCCB4; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB97C; &amp;#xD655;&amp;#xC7A5;&amp;#xD574; &amp;#xC0C8;&amp;#xB85C;&amp;#xC6B4; &amp;#xAC12;&amp;#xC744; &amp;#xCD94;&amp;#xAC00;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; equals &amp;#xADDC;&amp;#xC57D;&amp;#xC744; &amp;#xB9CC;&amp;#xC871; &amp;#xC2DC;&amp;#xD0AC; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC74C;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Point &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0C1;&amp;#xC18D;&amp;#xD55C; ColorPoint&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC640; Point&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xBE44;&amp;#xAD50;&amp;#xD560; &amp;#xC218; &amp;#xC5C6;&amp;#xC74C;, Why?&lt;/li&gt;
&lt;li&gt;&amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xB3D9;&amp;#xB4F1;&amp;#xC131; &amp;#xBE44;&amp;#xAD50; &amp;#xC2DC;, &amp;#xD55C;&amp;#xCABD;&amp;#xB9CC; true&amp;#xC778; &amp;#xACB0;&amp;#xACFC;&amp;#xB97C; &amp;#xC5BB;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;. equals&amp;#xC758; &amp;#xB300;&amp;#xCE6D;&amp;#xC131; &amp;#xADDC;&amp;#xC57D;&amp;#xC744; &amp;#xC9C0;&amp;#xD0AC; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC0C1;&amp;#xC18D;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xCEF4;&amp;#xD3EC;&amp;#xC9C0;&amp;#xC158;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC6B0;&amp;#xD68C;&amp;#xD558;&amp;#xC5EC; &amp;#xAC12;&amp;#xC744; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xB294; equals&amp;#xB97C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;equals&lt;/code&gt; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC778; &amp;#xBC29;&amp;#xBC95;&amp;#xC740; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;==&lt;/code&gt; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xC790;&amp;#xAE30; &amp;#xC790;&amp;#xC2E0;&amp;#xC758; &amp;#xCC38;&amp;#xC870; &amp;#xD655;&amp;#xC778;&lt;/li&gt;
&lt;li&gt;instanceof &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB85C; &amp;#xC62C;&amp;#xBC14;&amp;#xB978; &amp;#xD0C0;&amp;#xC785;&amp;#xC778;&amp;#xC9C0; &amp;#xCCB4;&amp;#xD06C;&lt;/li&gt;
&lt;li&gt;2&amp;#xBC88; &amp;#xB2E8;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C; &amp;#xD655;&amp;#xC778;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xD0C0;&amp;#xC785; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&lt;/li&gt;
&lt;li&gt;&amp;#xC785;&amp;#xB825; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC640; &amp;#xC790;&amp;#xAE30; &amp;#xC790;&amp;#xC2E0;&amp;#xC758; &amp;#xB300;&amp;#xC751;&amp;#xB418;&amp;#xB294; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&amp;#xB4E4;&amp;#xC774; &amp;#xBAA8;&amp;#xB450; &amp;#xC77C;&amp;#xCE58;&amp;#xD558;&amp;#xB294;&amp;#xC9C0; &amp;#xAC80;&amp;#xC0AC;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xAC12; &amp;#xD639;&amp;#xC740; &amp;#xCC38;&amp;#xC870;&amp;#xB97C; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC740;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;float, double&amp;#xC744; &amp;#xC81C;&amp;#xC678;&amp;#xD55C; &amp;#xAE30;&amp;#xBCF8; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD544;&amp;#xB4DC;&amp;#xB294; &lt;code&gt;==&lt;/code&gt; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB85C; &amp;#xBE44;&amp;#xAD50;
&lt;ul&gt;
&lt;li&gt;float, double&amp;#xC740; &lt;code&gt;Float.compare(float, float)&lt;/code&gt;, &lt;code&gt;Double.compare(double, double)&lt;/code&gt;&amp;#xB85C; &amp;#xBE44;&amp;#xAD50;&lt;/li&gt;
&lt;li&gt;Float.equals &amp;#xBC0F; Double.equals&amp;#xB294; &amp;#xC624;&amp;#xD1A0;&amp;#xBC15;&amp;#xC2F1;&amp;#xC744; &amp;#xC218;&amp;#xBC18;&amp;#xD558;&amp;#xBBC0;&amp;#xB85C; &amp;#xC131;&amp;#xB2A5;&amp;#xC0C1; &amp;#xC88B;&amp;#xC9C0; &amp;#xC54A;&amp;#xC74C;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xCC38;&amp;#xC870; &amp;#xD0C0;&amp;#xC785; &amp;#xD544;&amp;#xB4DC;&amp;#xB294; &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &lt;code&gt;equals&lt;/code&gt;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBE44;&amp;#xAD50;&lt;/li&gt;
&lt;li&gt;&amp;#xBC30;&amp;#xC5F4; &amp;#xC804;&amp;#xCCB4;&amp;#xB97C; &amp;#xBE44;&amp;#xAD50; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0;, &lt;code&gt;Arrays.equals&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;areaCode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; areaCode&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;lineNum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rangeCheck&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; String arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;val &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; val &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;: &amp;quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; val&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; val&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// &amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; `Object` &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Object o&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 1. &amp;#xC790;&amp;#xAE30; &amp;#xC790;&amp;#xC2E0;&amp;#xACFC; &amp;#xAC19;&amp;#xC740;&amp;#xC9C0; &amp;#xD655;&amp;#xC778;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 2. &amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xAC19;&amp;#xC740; &amp;#xCCB4;&amp;#xD06C;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 3. &amp;#xD0C0;&amp;#xC785; &amp;#xCE90;&amp;#xC2A4;&amp;#xD305;&lt;/span&gt;
        PhoneNumber pn &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;PhoneNumber&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 4. &amp;#xC8FC;&amp;#xC694; &amp;#xD544;&amp;#xB4DC; &amp;#xAC12;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xBE44;&amp;#xAD50; &amp;#xC5F0;&amp;#xC0B0; &amp;#xC218;&amp;#xD589;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; pn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;lineNum &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; lineNum &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; pn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;areaCode &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; areaCode &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; pn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prefix &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;equals&lt;/code&gt;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xACE0; &amp;#xCCB4;&amp;#xD06C;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xC138;&amp;#xAC00;&amp;#xC9C0;
&lt;ul&gt;
&lt;li&gt;&amp;#xB300;&amp;#xCE6D;&amp;#xC801;&amp;#xC778;&amp;#xC9C0;?, &amp;#xCD94;&amp;#xC774;&amp;#xC131;&amp;#xC744; &amp;#xB9CC;&amp;#xC871;&amp;#xD558;&amp;#xB294;&amp;#xC9C0;?, &amp;#xC77C;&amp;#xAD00;&amp;#xC801;&amp;#xC778;&amp;#xC9C0;?&lt;/li&gt;
&lt;li&gt;equals&amp;#xB97C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; hashCode&amp;#xB3C4; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xC790;&lt;/li&gt;
&lt;li&gt;&amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &lt;code&gt;Object&lt;/code&gt; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;. &amp;#xB9CC;&amp;#xC57D; &amp;#xAD6C;&amp;#xCCB4; &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xBC1B;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; &amp;#xC544;&amp;#xB798; &amp;#xADF8;&amp;#xB9BC;&amp;#xACFC; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xC774; &amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;. &lt;code&gt;@Override&lt;/code&gt; &amp;#xC5B4;&amp;#xB178;&amp;#xD14C;&amp;#xC774;&amp;#xC158;&amp;#xC744; &amp;#xC77C;&amp;#xAD00;&amp;#xB418;&amp;#xAC8C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xC774;&amp;#xB7F0; &amp;#xC77C;&amp;#xB828;&amp;#xC758; &amp;#xC2E4;&amp;#xC218;&amp;#xB97C; &amp;#xC608;&amp;#xBC29;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;br&gt;
&lt;img src=&quot;https://i.imgur.com/MVYfZTY.png&quot; alt=&quot;&amp;#xC778;&amp;#xC790;&amp;#xC758; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;item-11-equals%EB%A5%BC-%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%98%EB%A0%A4%EA%B1%B0%EB%93%A0-hashcode%EB%8F%84-%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%98%EB%9D%BC&quot;&gt;ITEM 11 - equals&amp;#xB97C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xB824;&amp;#xAC70;&amp;#xB4E0; hashCode&amp;#xB3C4; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xB77C;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;equals&amp;#xB97C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; hashCode&amp;#xB3C4; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xADF8;&amp;#xB7EC;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74;, HashSet &amp;#xD639;&amp;#xC740; HashMap&amp;#xACFC; &amp;#xAC19;&amp;#xC740; &amp;#xCF5C;&amp;#xB799;&amp;#xC158; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9; &amp;#xC2DC; &amp;#xBB38;&amp;#xC81C;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC544;&amp;#xB798;&amp;#xB294; Object &amp;#xBA85;&amp;#xC138;&amp;#xC758; &amp;#xC77C;&amp;#xBD80;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;equals &amp;#xBE44;&amp;#xAD50;&amp;#xC5D0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xB418;&amp;#xB294; &amp;#xD544;&amp;#xB4DC; &amp;#xAC12;&amp;#xC774; &amp;#xBCC0;&amp;#xACBD;&amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xC558;&amp;#xB2E4;&amp;#xBA74;, &amp;#xB9E4;&amp;#xBC88; &amp;#xAC19;&amp;#xC740; hashCode&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[&amp;#xC911;&amp;#xC694;] equals&amp;#xC5D0;&amp;#xC11C; &amp;#xB450; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xAC19;&amp;#xB2E4;&amp;#xACE0; &amp;#xD310;&amp;#xB2E8;&amp;#xD588;&amp;#xB2E4;&amp;#xBA74;, hashCode&amp;#xB3C4; &amp;#xAC19;&amp;#xC740; &amp;#xAC12;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;equals&amp;#xC5D0;&amp;#xC11C; &amp;#xB450; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xB2E4;&amp;#xB974;&amp;#xB2E4;&amp;#xACE0; &amp;#xD310;&amp;#xB2E8;&amp;#xD588;&amp;#xB354;&amp;#xB77C;&amp;#xB3C4;, &amp;#xB450; &amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xB2E4;&amp;#xB978; hashCode&amp;#xAC12;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD560; &amp;#xD544;&amp;#xC694;&amp;#xB294; &amp;#xC5C6;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[&amp;#xC911;&amp;#xC694;] &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xB2E4;&amp;#xB978; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xB300;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xB2E4;&amp;#xB978; hashCode &amp;#xAC12;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD574;&amp;#xC2DC;&amp;#xD14C;&amp;#xC774;&amp;#xBE14;&amp;#xC758; &amp;#xC131;&amp;#xB2A5;&amp;#xC774; &amp;#xC88B;&amp;#xC544;&amp;#xC9C4;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; &amp;#xBC18;&amp;#xD658;&amp;#xC744; &amp;#xC62C;&amp;#xBC14;&amp;#xB974;&amp;#xAC8C; &amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC218;&amp;#xD589; &amp;#xC2DC;&amp;#xAC04;&amp;#xC758; &amp;#xACC4;&amp;#xC0B0;&amp;#xC774; &amp;#xCD5C;&amp;#xB300; O(n)&amp;#xAE4C;&amp;#xC9C0; &amp;#xB298;&amp;#xC5B4;&amp;#xB0A0; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&amp;#xC544;&amp;#xB798;&amp;#xB294; O(n)&amp;#xAE4C;&amp;#xC9C0; &amp;#xB298;&amp;#xC5B4;&amp;#xB098;&amp;#xB294; &amp;#xC0AC;&amp;#xC6A9; &amp;#xAE08;&amp;#xC9C0; &amp;#xD574;&amp;#xC2DC; &amp;#xCF54;&amp;#xB4DC; &amp;#xAD6C;&amp;#xD604;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC88B;&amp;#xC740; &amp;#xD574;&amp;#xC2DC; &amp;#xD568;&amp;#xC218;&amp;#xB294; &amp;#xACB0;&amp;#xAD6D; &amp;#xC11C;&amp;#xB85C; &amp;#xB2E4;&amp;#xB978; &amp;#xAC1D;&amp;#xCCB4; &amp;#xD639;&amp;#xC740; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xB2E4;&amp;#xB978; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC774;&amp;#xC0C1;&amp;#xC801;&amp;#xC778; &amp;#xD574;&amp;#xC2DC; &amp;#xD568;&amp;#xC218;&amp;#xB294; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB4E4;&amp;#xC744; 32&amp;#xBE44;&amp;#xD2B8; &amp;#xC815;&amp;#xC218; &amp;#xBC94;&amp;#xC704;&amp;#xC5D0; &amp;#xADE0;&amp;#xC77C;&amp;#xD558;&amp;#xAC8C; &amp;#xBD84;&amp;#xBC30;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;hashCode&lt;/code&gt;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xC694;&amp;#xB839;&amp;#xC740;?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; hashCode&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;. &amp;#xC774;&amp;#xB97C; &amp;#xBCC0;&amp;#xC218; &lt;code&gt;result&lt;/code&gt;&amp;#xC5D0; &amp;#xD560;&amp;#xB2F9;.&lt;/li&gt;
&lt;li&gt;&amp;#xB098;&amp;#xBA38;&amp;#xC9C0; &amp;#xD544;&amp;#xB4DC;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xAD6C;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; c&amp;#xB97C; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xC6D0;&amp;#xCE59;&amp;#xC73C;&amp;#xB85C; &amp;#xAD6C;&amp;#xD574;&amp;#xBCF4;&amp;#xC790;.
&lt;ul&gt;
&lt;li&gt;&amp;#xAE30;&amp;#xBCF8; &amp;#xD0C0;&amp;#xC785; &amp;#xD544;&amp;#xB4DC;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xD574;&amp;#xB2F9; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xBC15;&amp;#xC2F1; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; Type.hashCode(f)&amp;#xB97C; &amp;#xC218;&amp;#xD589;&lt;/li&gt;
&lt;li&gt;&amp;#xCC38;&amp;#xC870; &amp;#xD0C0;&amp;#xC785; &amp;#xD544;&amp;#xB4DC;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xD574;&amp;#xB2F9; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xD544;&amp;#xB4DC; &amp;#xAC12;&amp;#xB4E4;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; hashCode&amp;#xB97C; &amp;#xC7AC;&amp;#xADC0;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xACE0; &amp;#xBCF5;&amp;#xC7A1;&amp;#xD574;&amp;#xC9C8;&amp;#xAEBC; &amp;#xAC19;&amp;#xC73C;&amp;#xBA74; &amp;#xD544;&amp;#xB4DC;&amp;#xC758; &amp;#xD45C;&amp;#xC900;&amp;#xD615;&amp;#xC744; &amp;#xB9CC;&amp;#xB4E4;&amp;#xC5B4; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xC790;. &amp;#xD544;&amp;#xB4DC; &amp;#xAC12;&amp;#xC774; null&amp;#xC774;&amp;#xBA74; 0&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD544;&amp;#xB4DC;&amp;#xAC00; &amp;#xBC30;&amp;#xC5F4;&amp;#xC77C; &amp;#xACBD;&amp;#xC6B0;, &amp;#xD575;&amp;#xC2EC; &amp;#xC6D0;&amp;#xC18C;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xAC01;&amp;#xAC01; &amp;#xD544;&amp;#xB4DC;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xB2E4;&amp;#xB904;&amp;#xC900;&amp;#xB2E4;. &amp;#xD575;&amp;#xC2EC; &amp;#xC6D0;&amp;#xC18C;&amp;#xAC00; &amp;#xC5C6;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; 0&amp;#xC73C;&amp;#xB85C; &amp;#xB2E4;&amp;#xB904;&amp;#xC8FC;&amp;#xC790;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xB2E8;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C; &amp;#xAD6C;&amp;#xD55C; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; &amp;#xAC12;&amp;#xC744; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xAC31;&amp;#xC2E0;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; c
&lt;/pre&gt;&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;hashCode&amp;#xC758; &amp;#xBC18;&amp;#xD658; &amp;#xAC12;&amp;#xC73C;&amp;#xB85C; result&amp;#xB97C; &amp;#xBC18;&amp;#xD658;.&lt;/li&gt;
&lt;li&gt;&amp;#xC791;&amp;#xC131; &amp;#xD6C4; &amp;#xB3D9;&amp;#xCE58; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xAC19;&amp;#xC740; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; &amp;#xAC12;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294;&amp;#xC9C0; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// with Junit&lt;/span&gt;
&lt;span class=&quot;token annotation punctuation&quot;&gt;@Test&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hashCodeTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; areaCode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    PhoneNumber p1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    PhoneNumber p2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;assertEquals&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;p1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; p2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD574;&amp;#xC2DC; &amp;#xCDA9;&amp;#xB3CC;&amp;#xC774; &amp;#xB354; &amp;#xC801;&amp;#xC740; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC6D0;&amp;#xD55C;&amp;#xB2E4;&amp;#xBA74; &lt;code&gt;guava&lt;/code&gt;&amp;#xC758; &lt;code&gt;Hashing&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xCC38;&amp;#xACE0;&amp;#xD558;&amp;#xC790;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Objects&lt;/code&gt; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; hash &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xD574;&amp;#xC26C; &amp;#xAC12;&amp;#xC744; &amp;#xC27D;&amp;#xAC8C; &amp;#xAD6C;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xB098;, &amp;#xC548;&amp;#xD0C0;&amp;#xAE5D;&amp;#xAC8C;&amp;#xB3C4; &amp;#xD574;&amp;#xB2F9; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB294; &amp;#xBC15;&amp;#xC2F1;&amp;#xACFC; &amp;#xC5B8;&amp;#xBC15;&amp;#xC2F1;&amp;#xC758; &amp;#xACFC;&amp;#xC815;&amp;#xC774; &amp;#xAE38;&amp;#xC5B4;&amp;#xC11C; &amp;#xC18D;&amp;#xB3C4;&amp;#xAC00; &amp;#xB354; &amp;#xB290;&amp;#xB9AC;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xB9CC;&amp;#xC57D; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &amp;#xBD88;&amp;#xBCC0;&amp;#xC778; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0;&amp;#xC11C; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xAD6C;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC774; &amp;#xAE38;&amp;#xAC70;&amp;#xB098; &amp;#xC624;&amp;#xB798;&amp;#xAC78;&amp;#xB9B0;&amp;#xB2E4;&amp;#xBA74; &amp;#xCE90;&amp;#xC2F1;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC744; &amp;#xACE0;&amp;#xB824;&amp;#xD574;&amp;#xBCF4;&amp;#xBA74; &amp;#xC88B;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xC131;&amp;#xB2A5; &amp;#xACE0;&amp;#xB824;&amp;#xD55C;&amp;#xB2E4;&amp;#xACE0; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; &amp;#xACC4;&amp;#xC0B0; &amp;#xC2DC; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&amp;#xB97C; &amp;#xC0DD;&amp;#xB7B5;&amp;#xD558;&amp;#xBA74; &amp;#xC548;&amp;#xB41C;&amp;#xB2E4;. &amp;#xD574;&amp;#xB2F9; &amp;#xD544;&amp;#xB4DC;&amp;#xB97C; &amp;#xC0DD;&amp;#xB7B5;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xD574;&amp;#xC2DC; &amp;#xD488;&amp;#xC9C8;&amp;#xC774; &amp;#xB098;&amp;#xBE60;&amp;#xC838; &amp;#xD2B9;&amp;#xC815; &amp;#xC601;&amp;#xC5ED;&amp;#xC73C;&amp;#xB85C; &amp;#xBAB0;&amp;#xB9B4; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC; &amp;#xC0DD;&amp;#xC131; &amp;#xADDC;&amp;#xCE59;&amp;#xC744; &amp;#xC678;&amp;#xBD80; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC790;(API &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294;)&amp;#xC5D0;&amp;#xAC8C; &amp;#xC54C;&amp;#xB9AC;&amp;#xC9C0; &amp;#xC54A;&amp;#xC544;&amp;#xC57C; &amp;#xCD94;&amp;#xD6C4;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD588;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; &amp;#xC720;&amp;#xC5F0;&amp;#xD558;&amp;#xAC8C; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;item-12-tostring%EC%9D%84-%ED%95%AD%EC%83%81-%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%98%EB%9D%BC&quot;&gt;ITEM 12 - toString&amp;#xC744; &amp;#xD56D;&amp;#xC0C1; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xB77C;&lt;/h2&gt;

&lt;p&gt;&amp;#xBCC4;&amp;#xB3C4;&amp;#xB85C; &lt;code&gt;toString()&lt;/code&gt;&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74; &lt;code&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xBA85;@16&amp;#xC9C4;&amp;#xC218;&amp;#xC758; &amp;#xD574;&amp;#xC2DC;&amp;#xCF54;&amp;#xB4DC;&lt;/code&gt;&amp;#xAC00; &amp;#xBC18;&amp;#xD658;&amp;#xB41C;&amp;#xB2E4;. toString&amp;#xC758; &amp;#xC77C;&amp;#xBC18; &amp;#xADDC;&amp;#xC57D;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;&amp;#xAC04;&amp;#xACB0;&amp;#xD558;&amp;#xACE0; &amp;#xC77D;&amp;#xAE30; &amp;#xC26C;&amp;#xC6B4; &amp;#xD615;&amp;#xC2DD;&amp;#xC758; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xB77C;&lt;/code&gt;&amp;#xB77C;&amp;#xACE0; &amp;#xBA85;&amp;#xC138;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xBAA8;&amp;#xB4E0; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; toString&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xD558;&amp;#xB77C;&amp;#xACE0; &amp;#xB9D0;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.&lt;br&gt;
&amp;#xC27D;&amp;#xAC8C; &amp;#xC811;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xB514;&amp;#xBC84;&amp;#xAE45;&amp;#xC744; &amp;#xD558;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD574;&amp;#xBD10;&amp;#xB3C4; toString()&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD558;&amp;#xC5EC; &amp;#xC720;&amp;#xC758;&amp;#xBBF8;&amp;#xD55C; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xBCF4;&amp;#xBA74;&amp;#xC11C; &amp;#xB514;&amp;#xBC84;&amp;#xAE45; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xACFC; &amp;#xADF8;&amp;#xB807;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xACBD;&amp;#xC6B0;&amp;#xB294; &amp;#xB9CE;&amp;#xC774; &amp;#xB2E4;&amp;#xB974;&amp;#xB2E4;. &amp;#xACB0;&amp;#xAD6D; &amp;#xC720;&amp;#xC758;&amp;#xBBF8;&amp;#xD55C; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xAD00;&amp;#xB840;&amp;#xC774;&amp;#xC790; &amp;#xADDC;&amp;#xC57D;&amp;#xC774;&amp;#xB77C;&amp;#xACE0; &amp;#xD558;&amp;#xBA74; &amp;#xC774;&amp;#xB97C; &amp;#xC9C0;&amp;#xD0A4;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xC744; &amp;#xAC83;&amp;#xC774;&amp;#xB2E4;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xAC1D;&amp;#xCCB4;&amp;#xAC00; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xC815;&amp;#xBCF4;&amp;#xB294; &amp;#xAC00;&amp;#xAE09;&amp;#xC801; &amp;#xC804;&amp;#xBD80; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xD3EC;&amp;#xB9F7;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xACE0;&amp;#xBBFC;&amp;#xB3C4; &amp;#xD574;&amp;#xBD10;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xD3EC;&amp;#xB9F7;&amp;#xC758; &amp;#xACE0;&amp;#xC815; &amp;#xC720;&amp;#xBB34;&amp;#xC640; &amp;#xC0C1;&amp;#xAD00; &amp;#xC5C6;&amp;#xC774; &lt;code&gt;&amp;#xC720;&amp;#xC758;&amp;#xBBF8;&amp;#xD55C;&lt;/code&gt; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xACE0; &amp;#xC758;&amp;#xBBF8;&amp;#xB97C; &amp;#xBD84;&amp;#xBA85;&amp;#xD558;&amp;#xAC8C; &amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xC911;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#xCC45;&amp;#xC758; &amp;#xC608;&amp;#xC81C;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC55E;&amp;#xC758; PhoneNumber &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; toString()&amp;#xC744; &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD55C; &amp;#xC608;&amp;#xC2DC;&amp;#xB97C; &amp;#xBCF4;&amp;#xC5EC;&amp;#xC8FC;&amp;#xACE0; &amp;#xC788;&amp;#xB294;&amp;#xB370;, &amp;#xCC38;&amp;#xACE0;&amp;#xD558;&amp;#xAE30; &amp;#xC88B;&amp;#xC740; &amp;#xC8FC;&amp;#xC11D;&amp;#xACFC; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xB4EF; &amp;#xD558;&amp;#xB2E4;.&lt;/p&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;/**
     * &amp;#xC774; &amp;#xC804;&amp;#xD654;&amp;#xBC88;&amp;#xD638;&amp;#xC758; &amp;#xBB38;&amp;#xC790;&amp;#xC5F4; &amp;#xD45C;&amp;#xD604;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD55C;&amp;#xB2E4;.
     * &amp;#xC774; &amp;#xBB38;&amp;#xC790;&amp;#xC5F4;&amp;#xC740; &amp;quot;XXX-YYY-ZZZZ&amp;quot; &amp;#xD615;&amp;#xD0DC;&amp;#xC758; 12&amp;#xAE00;&amp;#xC790;&amp;#xB85C; &amp;#xAD6C;&amp;#xC131;&amp;#xB41C;&amp;#xB2E4;.
     * XXX&amp;#xB294; &amp;#xC9C0;&amp;#xC5ED; &amp;#xCF54;&amp;#xB4DC;, YYY&amp;#xB294; Prefix, ZZZZ&amp;#xB294; &amp;#xAC00;&amp;#xC785;&amp;#xC790; &amp;#xBC88;&amp;#xD638;&amp;#xB2E4;.
     * &amp;#xAC01;&amp;#xAC01;&amp;#xC758; &amp;#xB300;&amp;#xBB38;&amp;#xC790;&amp;#xB294; 10&amp;#xC9C4;&amp;#xC218; &amp;#xC22B;&amp;#xC790; &amp;#xD558;&amp;#xB098;&amp;#xB97C; &amp;#xB098;&amp;#xD0C0;&amp;#xB0B8;&amp;#xB2E4;.
     *
     * &amp;#xC804;&amp;#xD654;&amp;#xBC88;&amp;#xD638;&amp;#xC758; &amp;#xAC01; &amp;#xBD80;&amp;#xBD84;&amp;#xC758; &amp;#xAC12;&amp;#xC774; &amp;#xB108;&amp;#xBB34; &amp;#xC791;&amp;#xC544;&amp;#xC11C; &amp;#xC790;&amp;#xB9BF;&amp;#xC218;&amp;#xB97C; &amp;#xCC44;&amp;#xC6B8; &amp;#xC218; &amp;#xC5C6;&amp;#xB2E4;&amp;#xBA74;,
     * &amp;#xC55E;&amp;#xC5D0;&amp;#xC11C;&amp;#xBD80;&amp;#xD130; 0&amp;#xC73C;&amp;#xB85C; &amp;#xCC44;&amp;#xC6CC;&amp;#xB098;&amp;#xAC04;&amp;#xB2E4;. &amp;#xC608;&amp;#xCEE8;&amp;#xB300; &amp;#xAC00;&amp;#xC785;&amp;#xC790; &amp;#xBC88;&amp;#xD638;&amp;#xAC00; 123&amp;#xC774;&amp;#xB77C;&amp;#xBA74;
     * &amp;#xC804;&amp;#xD654;&amp;#xBC88;&amp;#xD638;&amp;#xC758; &amp;#xB9C8;&amp;#xC9C0;&amp;#xB9C9; &amp;#xB124; &amp;#xBB38;&amp;#xC790;&amp;#xB294; &amp;quot;0123&amp;quot;&amp;#xC774; &amp;#xB41C;&amp;#xB2E4;.
     * @return
     */&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; String &lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;%03d-%03d-%04d&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;code&gt;Google.AutoValue&lt;/code&gt; &amp;#xD504;&amp;#xB808;&amp;#xC784;&amp;#xC6CC;&amp;#xD06C;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; toString&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD574;&amp;#xC900;&amp;#xB2E4;&amp;#xACE0; &amp;#xD558;&amp;#xB294;&amp;#xB370;, Lombok&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD588;&amp;#xC744; &amp;#xB54C;&amp;#xB791; &amp;#xC5B4;&amp;#xB5BB;&amp;#xAC8C; &amp;#xCC28;&amp;#xC774;&amp;#xAC00; &amp;#xB098;&amp;#xB294;&amp;#xC9C0;&amp;#xB294; &amp;#xC9C1;&amp;#xC811; &amp;#xD574;&amp;#xBCF4;&amp;#xC9C0; &amp;#xC54A;&amp;#xC544;&amp;#xC11C; &amp;#xC798; &amp;#xBAA8;&amp;#xB974;&amp;#xACA0;&amp;#xB2E4;.&lt;/p&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;item-13-clone-%EC%9E%AC%EC%A0%95%EC%9D%98%EB%8A%94-%EC%A3%BC%EC%9D%98%ED%95%B4%EC%84%9C-%EC%A7%84%ED%96%89%ED%95%98%EB%9D%BC&quot;&gt;ITEM 13 - clone &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xB294; &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC11C; &amp;#xC9C4;&amp;#xD589;&amp;#xD558;&amp;#xB77C;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cloneable&lt;/code&gt;&amp;#xB294; &lt;code&gt;&amp;#xB9C8;&amp;#xCEE4; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&lt;/code&gt;&amp;#xB85C; &lt;strong&gt;&amp;#xC774;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB294; &amp;#xBCF5;&amp;#xC81C;&amp;#xAC00; &amp;#xAC00;&amp;#xB2A5;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&lt;/strong&gt;&amp;#xC784;&amp;#xC744; &amp;#xBA85;&amp;#xC2DC;&amp;#xD558;&amp;#xB294; &amp;#xC6A9;&amp;#xB3C4;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cloneable&lt;/code&gt; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD55C; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;clone&lt;/code&gt;&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xBA74; &amp;#xD544;&amp;#xB4DC; &amp;#xC804;&amp;#xCCB4;&amp;#xB97C; &amp;#xBCF5;&amp;#xC0AC;&amp;#xD55C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD55C;&amp;#xB2E4;. &amp;#xB9CC;&amp;#xC57D; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC744; &amp;#xACBD;&amp;#xC6B0; CloneNotSupportedException&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[&amp;#xC911;&amp;#xC694;] &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD558;&amp;#xB098; &amp;#xC5C6;&amp;#xB294; &lt;code&gt;Cloneable&lt;/code&gt;&amp;#xC740; &amp;#xC2E4;&amp;#xC0C1; &lt;code&gt;Object.clone&lt;/code&gt;&amp;#xC758; &amp;#xB3D9;&amp;#xC791; &amp;#xBC29;&amp;#xC2DD;&amp;#xC744; &amp;#xACB0;&amp;#xC815;&amp;#xD558;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB840;&amp;#xC801;&amp;#xC778; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC73C;&amp;#xB85C; &amp;#xBCF4;&amp;#xC774;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD55C; &amp;#xAC83;&amp;#xB9CC;&amp;#xC73C;&amp;#xB85C; &amp;#xC0C1;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD589;&amp;#xC704;&amp;#xC758; &amp;#xBCC0;&amp;#xACBD;&amp;#xC744; &amp;#xAC00;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cloneable&lt;/code&gt; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD568;&amp;#xC73C;&amp;#xB85C;&amp;#xC368;, &amp;#xD574;&amp;#xB2F9; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC790; &amp;#xCE21;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;clone()&lt;/code&gt; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xAC00; public&amp;#xC73C;&amp;#xB85C; &amp;#xC81C;&amp;#xACF5;&amp;#xB418;&amp;#xBA70; &amp;#xC774;&amp;#xB97C; &amp;#xD1B5;&amp;#xD574; &amp;#xBCF5;&amp;#xC81C;&amp;#xB97C; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xB9AC;&amp;#xB77C; &amp;#xD310;&amp;#xB2E8;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xACC4;&amp;#xCE35; &amp;#xAD6C;&amp;#xC870;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0;&amp;#xC11C; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xAC00; &amp;#xB9CC;&amp;#xC57D; final &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB77C;&amp;#xBA74; &amp;#xB354; &amp;#xC774;&amp;#xC0C1;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4; &amp;#xC0C1;&amp;#xC18D;&amp;#xC740; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xAD00;&amp;#xB840;&amp;#xB294; &amp;#xBB34;&amp;#xC2DC;&amp;#xD574;&amp;#xB3C4; &amp;#xB418;&amp;#xACA0;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xB9CC;&amp;#xC57D; final &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; clone &amp;#xAD6C;&amp;#xD604;&amp;#xC774; super.clone()&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;&amp;#xBA74; Cloneable &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD560; &amp;#xC774;&amp;#xC720;&amp;#xAC00; &amp;#xC5C6;&amp;#xB2E4;. &amp;#xC65C;&amp;#xB0D0;&amp;#xD558;&amp;#xBA74;, &amp;#xC774;&amp;#xB294; &amp;#xC704;&amp;#xC5D0;&amp;#xC11C;&amp;#xB3C4; &amp;#xC124;&amp;#xBA85;&amp;#xD55C;&amp;#xB300;&amp;#xB85C; &lt;code&gt;Cloneable&lt;/code&gt; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xAC00; Object.clone&amp;#xC758; &amp;#xB3D9;&amp;#xC791; &amp;#xBC29;&amp;#xC2DD;&amp;#xC744; &amp;#xACB0;&amp;#xC815;&amp;#xD558;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xACE0; &amp;#xC774;&amp;#xB7F0; &amp;#xB3D9;&amp;#xC791; &amp;#xBC29;&amp;#xC2DD; &amp;#xC790;&amp;#xCCB4;&amp;#xC5D0; &amp;#xAE30;&amp;#xB308; &amp;#xD544;&amp;#xC694;&amp;#xAC00; &amp;#xC5C6;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; PhoneNumber &lt;span class=&quot;token function&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;PhoneNumber&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;CloneNotSupportedException&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AssertionError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC704; &amp;#xC608;&amp;#xC81C;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC0C1;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &lt;code&gt;Object&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &lt;code&gt;PhoneNumber&lt;/code&gt;&amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. &amp;#xC774;&amp;#xB294; &lt;code&gt;&amp;#xACF5;&amp;#xBCC0; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC774;&amp;#xD551;(covariant return typing)&lt;/code&gt;&amp;#xC744; &amp;#xB098;&amp;#xD0C0;&amp;#xB0B4;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. &amp;#xB2E4;&amp;#xC2DC; &amp;#xB9D0;&amp;#xD574;, &amp;#xC7AC;&amp;#xC815;&amp;#xC758;&amp;#xD55C; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xC758; &amp;#xBC18;&amp;#xD658; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; &amp;#xC0C1;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xAC00; &amp;#xBC18;&amp;#xD658;&amp;#xD558;&amp;#xB294; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC77C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;&amp;#xB294; &amp;#xC774;&amp;#xC57C;&amp;#xAE30;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clone()&lt;/code&gt; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB294; &amp;#xC0AC;&amp;#xC2E4;&amp;#xC0C1; &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xD6A8;&amp;#xACFC;&amp;#xB97C; &amp;#xB098;&amp;#xD0C0;&amp;#xB0B8;&amp;#xB2E4;. &lt;code&gt;clone()&lt;/code&gt; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xC2DC; &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xBD80;&amp;#xBD84;&amp;#xC740; &amp;#xC6D0;&amp;#xBCF8; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC5D0; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774;&amp;#xB098; &amp;#xC0AC;&amp;#xC774;&amp;#xB4DC; &amp;#xC774;&amp;#xD399;&amp;#xD2B8;&amp;#xAC00; &amp;#xC804;&amp;#xB2EC;&amp;#xB418;&amp;#xC9C0; &amp;#xC54A;&amp;#xB3C4;&amp;#xB85D; &amp;#xBCF5;&amp;#xC81C;&amp;#xB41C; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xBD88;&amp;#xBCC0;&amp;#xC131;&amp;#xC744; &amp;#xBCF4;&amp;#xC7A5;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;clone() &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xC2DC;, &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0; &amp;#xBC30;&amp;#xC5F4; &amp;#xD544;&amp;#xB4DC;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xBA74; clone()&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD574;&amp;#xB3C4; &amp;#xB7F0;&amp;#xD0C0;&amp;#xC784; &amp;#xD0C0;&amp;#xC785;&amp;#xACFC; &amp;#xCEF4;&amp;#xD30C;&amp;#xC77C;&amp;#xD0C0;&amp;#xC784; &amp;#xD0C0;&amp;#xC785; &amp;#xBAA8;&amp;#xB450;&amp;#xAC00; &amp;#xC6D0;&amp;#xBCF8; &amp;#xBC30;&amp;#xC5F4;&amp;#xACFC; &amp;#xB611;&amp;#xAC19;&amp;#xC740; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xBC30;&amp;#xC5F4;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD55C;&amp;#xB2E4;. &amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xAE4A;&amp;#xC740; &amp;#xBCF5;&amp;#xC0AC;&amp;#xAC00; &amp;#xC9C4;&amp;#xD589;&amp;#xB418;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Test&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cloneTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;short&lt;/span&gt; areaCode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        PhoneNumber&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PhoneNumber&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        PhoneNumber&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; cloneArr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Reference Check&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;assertSame&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cloneArr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC704;&amp;#xC758; &amp;#xC608;&amp;#xC81C;&amp;#xC640; &amp;#xAC19;&amp;#xC774;, &amp;#xAE4A;&amp;#xC740; &amp;#xBCF5;&amp;#xC0AC;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD560; &amp;#xACBD;&amp;#xC6B0; &amp;#xC7AC;&amp;#xADC0;&amp;#xD638;&amp;#xCD9C;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xAC70;&amp;#xB098; &amp;#xD639;&amp;#xC740; &amp;#xBC30;&amp;#xC5F4;&amp;#xC758; &amp;#xC694;&amp;#xC18C;&amp;#xB97C; &amp;#xC77C;&amp;#xC77C;&amp;#xC774; &amp;#xC21C;&amp;#xD68C;/&amp;#xBC18;&amp;#xBCF5;&amp;#xD558;&amp;#xC5EC; &amp;#xBCF5;&amp;#xC81C;&amp;#xD558;&amp;#xB294; &amp;#xC791;&amp;#xC5C5;&amp;#xC774; &amp;#xD544;&amp;#xC694;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xD558;&amp;#xC704; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xAC00;&amp;#xB2A5;&amp;#xD55C; &amp;#xB9E4;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC77C;&amp;#xBC18;&amp;#xC801;&amp;#xC778;&amp;#xB370;, clone&amp;#xB3C4; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xC774;&amp;#xB2E4;. &amp;#xC7AC;&amp;#xC815;&amp;#xC758; &amp;#xC2DC; &amp;#xBCC0;&amp;#xACBD;&amp;#xB418;&amp;#xB294; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC5D0; &amp;#xC758;&amp;#xD574; &amp;#xC6D0;&amp;#xBCF8; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC758; &amp;#xC0C1;&amp;#xD0DC;&amp;#xAC00; &amp;#xB2EC;&amp;#xB77C;&amp;#xC9C8; &amp;#xAC00;&amp;#xB2A5;&amp;#xC131;&amp;#xC774; &amp;#xD06C;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;clone&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xBCF4;&amp;#xB2E4; &amp;#xBCF5;&amp;#xC0AC; &amp;#xBAA9;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xC815;&amp;#xC7AD; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD639;&amp;#xC740; &amp;#xBCF5;&amp;#xC0AC; &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xB3C4; &amp;#xC788;&amp;#xB2E4;. &amp;#xBCF5;&amp;#xC0AC; &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xC640; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB294; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xBC1B;&amp;#xC744; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xAC1D;&amp;#xCCB4; &amp;#xBCF5;&amp;#xC0AC; &amp;#xC2DC; &amp;#xC720;&amp;#xC5F0;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785; &amp;#xBCC0;&amp;#xACBD;&amp;#xC774; &amp;#xAC00;&amp;#xB2A5;&amp;#xD574;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[&amp;#xACB0;&amp;#xB860;] clone()&amp;#xC758; &amp;#xAC1D;&amp;#xCCB4; &amp;#xC0DD;&amp;#xC131; &amp;#xBA54;&amp;#xCE74;&amp;#xB2C8;&amp;#xC998;&amp;#xC740; &amp;#xC704;&amp;#xD5D8;&amp;#xCC9C;&amp;#xB9CC;&amp;#xD558;&amp;#xB2E4;. &amp;#xCC28;&amp;#xB77C;&amp;#xB9AC; &amp;#xBCF5;&amp;#xC0AC; &amp;#xC815;&amp;#xC801; &amp;#xD329;&amp;#xD1A0;&amp;#xB9AC; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC; &amp;#xD639;&amp;#xC740; &amp;#xBCF5;&amp;#xC0AC; &amp;#xBAA9;&amp;#xC801;&amp;#xC758; &amp;#xC0DD;&amp;#xC131;&amp;#xC790;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC790;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;item-14-comparable%EC%9D%84-%EA%B5%AC%ED%98%84%ED%95%A0%EC%A7%80-%EA%B3%A0%EB%A0%A4%ED%95%98%EB%9D%BC&quot;&gt;ITEM 14 - Comparable&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD560;&amp;#xC9C0; &amp;#xACE0;&amp;#xB824;&amp;#xD558;&amp;#xB77C;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Comparable.compareTo()&lt;/code&gt;&amp;#xB294; &amp;#xB3D9;&amp;#xCE58;&amp;#xC131; &amp;#xBE44;&amp;#xAD50; &amp;#xBC0F; &amp;#xC21C;&amp;#xC11C;&amp;#xAE4C;&amp;#xC9C0; &amp;#xBE44;&amp;#xAD50; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Object.equals()&lt;/code&gt;&amp;#xC640; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &amp;#xBC18;&amp;#xC0AC;&amp;#xC131;, &amp;#xB300;&amp;#xCE6D;&amp;#xC131;, &amp;#xCD94;&amp;#xC774;&amp;#xC131;&amp;#xC744; &amp;#xCDA9;&amp;#xC871;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xB610;&amp;#xD55C;, &amp;#xD574;&amp;#xB2F9; &amp;#xC6D0;&amp;#xCE59;&amp;#xC744; &amp;#xC81C;&amp;#xB300;&amp;#xB85C; &amp;#xC9C0;&amp;#xD0A4;&amp;#xC9C0; &amp;#xC54A;&amp;#xC73C;&amp;#xBA74; equals&amp;#xC640; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &amp;#xD574;&amp;#xB2F9; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xB2E4;&amp;#xB978; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC608;&amp;#xC0C1;&amp;#xD558;&amp;#xC9C0; &amp;#xBABB;&amp;#xD55C; &amp;#xACB0;&amp;#xACFC;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Comparable&lt;/code&gt;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740; &amp;#xD544;&amp;#xB4DC;&amp;#xB098; &amp;#xD45C;&amp;#xC900;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; &amp;#xC21C;&amp;#xC11C;&amp;#xB85C; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774;&amp;#xB77C;&amp;#xBA74;, &lt;code&gt;Comparator&lt;/code&gt;&amp;#xB97C; &amp;#xB300;&amp;#xC2E0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC790;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compareTo()&lt;/code&gt;&amp;#xC5D0;&amp;#xC11C; &amp;#xAE30;&amp;#xBCF8; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBE44;&amp;#xAD50; &amp;#xD560;&amp;#xB54C;, &amp;#xD574;&amp;#xB2F9; &amp;#xAE30;&amp;#xBCF8; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xB798;&amp;#xD37C; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &lt;code&gt;compare()&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xC790;. &amp;lt;, &amp;gt; &amp;#xB4F1;&amp;#xC758; &amp;#xC5F0;&amp;#xC0B0;&amp;#xC790;&amp;#xB294; &amp;#xAC70;&amp;#xCD94;&amp;#xC7A5;&amp;#xC2A4;&amp;#xB7FD;&amp;#xACE0; &amp;#xC624;&amp;#xB958;&amp;#xB97C; &amp;#xC720;&amp;#xBC1C;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD544;&amp;#xB4DC;&amp;#xAC00; &amp;#xC5EC;&amp;#xB7EC;&amp;#xAC1C; &amp;#xC788;&amp;#xB294; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&amp;#xBD80;&amp;#xD130; &amp;#xCC28;&amp;#xB840;&amp;#xB300;&amp;#xB85C; &amp;#xBE44;&amp;#xAD50;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;PhoneNumber o&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// &amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;compare&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;areaCode&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// &amp;#xB450; &amp;#xBC88;&amp;#xC9F8; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&lt;/span&gt;
            result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;compare&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token comment&quot;&gt;// &amp;#xC138; &amp;#xBC88;&amp;#xC9F8; &amp;#xD575;&amp;#xC2EC; &amp;#xD544;&amp;#xB4DC;&lt;/span&gt;
                result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Short&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;compare&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lineNum&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;lineNum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Comparator&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xC2DD;&amp;#xC740; FluentAPI &amp;#xD615;&amp;#xC2DD;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC5B4;&amp;#xC11C; &amp;#xCF54;&amp;#xB4DC; &amp;#xC790;&amp;#xCCB4;&amp;#xAC00; &amp;#xC6B0;&amp;#xC544;&amp;#xD558;&amp;#xAC8C; &amp;#xC804;&amp;#xAC1C;&amp;#xB418;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC131;&amp;#xB2A5; &amp;#xB85C;&amp;#xC2A4;&amp;#xAC00; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Comparator&lt;/code&gt;&amp;#xB294; &amp;#xBCF4;&amp;#xC870; &amp;#xBA54;&amp;#xC11C;&amp;#xB4DC;&amp;#xB97C; &amp;#xC5EC;&amp;#xB7EC;&amp;#xAC1C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. int&amp;#xBCF4;&amp;#xB2E4; &amp;#xC791;&amp;#xC740; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0; comparingInt&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xB418;&amp;#xACE0; float&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;&amp;#xB294; comparingDouble&amp;#xC744; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/126</guid>
      <comments>https://stylishc.tistory.com/126#entry126comment</comments>
      <pubDate>Mon, 18 Feb 2019 23:00:21 +0900</pubDate>
    </item>
    <item>
      <title>스프링 부트 배치 #2 - ItemReader</title>
      <link>https://stylishc.tistory.com/125</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;SPRING_BATCH_#2&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      @import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
@import url(&quot;https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600&quot;);
*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}.markdown-preview code{border-radius:2px;color:#e96900;font-size:12.8px;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-preview code,.markdown-preview pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-preview pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:24px;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 22.4px;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color, #42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color, #42b983)}.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-preview pre&gt;code,.markdown-preview pre[class*=&quot;language&quot;]{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:12.8px;font-size:.8rem;line-height:2em;max-width:inherit;overflow:inherit;padding:.8em 1.4em;white-space:pre}.markdown-preview pre&gt;code{padding-left:0;padding-right:0}.markdown-preview code:after,.markdown-preview code:before{letter-spacing:.8px;letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:24px;min-height:1.5rem}pre:after{color:#ccc;content:attr(data-lang);font-size:9.6px;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)&gt;nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:&quot;Loading...&quot;}.emoji{height:19.2px;height:1.2rem;vertical-align:middle}.progress{background-color:#42b983;background-color:var(--theme-color, #42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:5}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color, #42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px !important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}.task-list-item{list-style-type:none}li input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.app-nav{left:0;margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:2}.app-nav p{margin:0}.app-nav&gt;a{margin:0 16px;margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color, #42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983)}.app-nav li{display:inline-block;margin:0 16px;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(39vh);overflow-y:scroll;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:16px;line-height:1rem;margin:0;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.app-nav.no-badge{margin-right:25px}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color, #42b983);height:80px;width:80px}.github-corner:hover .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}main{display:block;position:relative;width:100vw;height:100%;z-index:0}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,0.07);overflow-y:auto;padding:40px 0 0;top:0;bottom:0;left:0;position:absolute;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out;width:300px;z-index:3}.sidebar&gt;h1{margin:0 auto 16px;margin:0 auto 1rem;font-size:24px;font-size:1.5rem;font-weight:300;text-align:center}.sidebar&gt;h1 a{color:inherit;text-decoration:none}.sidebar&gt;h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar ul{margin:0;padding:0}.sidebar li&gt;p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:rgba(135,135,135,0.4)}.sidebar:hover::-webkit-scrollbar-track{background:rgba(135,135,135,0.1)}.sidebar-toggle{background-color:transparent;background-color:rgba(255,255,255,0.8);border:0;outline:none;padding:10px;bottom:0;left:0;position:absolute;text-align:center;transition:opacity .3s;width:30px;width:284px;z-index:4}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color, #42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;top:0;right:0;bottom:0;left:300px;position:absolute;transition:left .25s ease}.markdown-preview&gt;*{box-sizing:border-box;font-size:inherit}.markdown-preview&gt;:first-child{margin-top:0 !important}.markdown-preview hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-preview table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:16px;margin-bottom:1rem;overflow:auto;width:100%}.markdown-preview th{font-weight:700}.markdown-preview td,.markdown-preview th{border:1px solid #ddd;padding:6px 13px}.markdown-preview tr{border-top:1px solid #ccc}.markdown-preview p.tip,.markdown-preview tr:nth-child(2n){background-color:#f8f8f8}.markdown-preview p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-preview p.tip code{background-color:#efefef}.markdown-preview p.tip em{color:#34495e}.markdown-preview p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:&quot;!&quot;;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;width:20px;height:20px;text-align:center;top:14px}.markdown-preview p.warn{background:rgba(66,185,131,0.1);border-radius:2px;padding:16px;padding:1rem}body.close .sidebar{-webkit-transform:translateX(-300px);transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:-webkit-transform .25s ease;transition:transform .25s ease;transition:transform .25s ease,-webkit-transform .25s ease}.app-nav,.github-corner{transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .sidebar-toggle{background-color:rgba(255,255,255,0.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{-webkit-transform:translateX(300px);transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner .octo-arm{-webkit-animation:a .56s ease-in-out;animation:a .56s ease-in-out}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}}@-webkit-keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes a{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}section.cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover .cover-main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:24px;line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:40px;font-size:2.5rem;font-weight:300;margin:10px 0 40px;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-7px;bottom:-0.4375rem;font-size:16px;font-size:1rem;position:absolute}section.cover blockquote{font-size:24px;font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main&gt;p:last-child a{border-color:#42b983;border:1px solid var(--theme-color, #42b983);border-radius:2rem;box-sizing:border-box;color:#42b983;color:var(--theme-color, #42b983);display:inline-block;font-size:16.8px;font-size:1.05rem;letter-spacing:1.6px;letter-spacing:.1rem;margin-right:16px;margin-right:1rem;padding:.75em 32px;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main&gt;p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color, #42b983);color:#fff;margin-right:0}section.cover .cover-main&gt;p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main&gt;p:last-child a:hover{color:inherit}section.cover blockquote&gt;p&gt;a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color, #42b983);transition:color .3s}section.cover blockquote&gt;p&gt;a:hover{color:#42b983;color:var(--theme-color, #42b983)}section.cover.show{display:-webkit-box;display:-ms-flexbox;display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;width:100%;height:100%}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0 6px 15px}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active&gt;a{border-right:2px solid;color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.app-sub-sidebar li:before{content:&quot;-&quot;;padding-right:4px;float:left}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview strong{color:#2c3e50;font-weight:600}.markdown-preview a{color:#42b983;color:var(--theme-color, #42b983);font-weight:600}.md-sidebar-toc a{color:#42b983;font-weight:600}.markdown-preview h1{font-size:32px;font-size:2rem;margin:0 0 16px;margin:0 0 1rem}.markdown-preview h2{font-size:28px;font-size:1.75rem;margin:45px 0 12.8px;margin:45px 0 .8rem}.markdown-preview h3{font-size:24px;font-size:1.5rem;margin:40px 0 9.6px;margin:40px 0 .6rem}.markdown-preview h4{font-size:20px;font-size:1.25rem}.markdown-preview h5,.markdown-preview h6{font-size:16px;font-size:1rem}.markdown-preview h6{color:#777}.markdown-preview figure,.markdown-preview p{margin:1.2em 0}.markdown-preview ol,.markdown-preview p,.markdown-preview ul{line-height:25.6px;line-height:1.6rem;word-spacing:.8px;word-spacing:.05rem}.markdown-preview ol,.markdown-preview ul{padding-left:24px;padding-left:1.5rem}.markdown-preview blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color, #42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-preview blockquote p{font-weight:600;margin-left:0}.markdown-preview iframe{margin:1em 0}.markdown-preview em{color:#7f8c8d}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EB%B0%B0%EC%B9%98-2-itemreader&quot;&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8; &amp;#xBC30;&amp;#xCE58; #2 - ItemReader&lt;/h1&gt;

&lt;h2 class=&quot;mume-header&quot; id=&quot;21-itemreader&quot;&gt;2.1 ItemReader&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xB9DE;&amp;#xB294; &lt;code&gt;ItemReader&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ItemReader&lt;/code&gt;&amp;#xB294; &amp;#xC4F0;&amp;#xB808;&amp;#xB4DC; &amp;#xC138;&amp;#xC774;&amp;#xD504;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;(Non-Thread-Safe) &amp;#xC4F0;&amp;#xB808;&amp;#xB4DC; &amp;#xAC04; &amp;#xACBD;&amp;#xD569;&amp;#xC774; &amp;#xBC1C;&amp;#xC0DD;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB3C4;&amp;#xB85D; &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &amp;#xC774;&amp;#xB97C; &amp;#xBCF4;&amp;#xC644;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;, &lt;code&gt;SynchronizedItemStreamReader&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xBA70;, &amp;#xC774;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBE4C;&amp;#xB354; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xC778; &lt;code&gt;SynchronizedItemStreamReaderBuilder&lt;/code&gt; &amp;#xB610;&amp;#xD55C; &amp;#xC81C;&amp;#xACF5;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flat-File, Message-Queue(AMQP), Database(RDBMS, Mongodb) &amp;#xB4F1;&amp;#xC758; ItemReader &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB4E4;&amp;#xC774; &amp;#xC874;&amp;#xC7AC;&amp;#xD558;&amp;#xBA70;, &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB4E4;&amp;#xC740; &lt;a href=&quot;https://docs.spring.io/spring-batch/4.0.x/reference/html/appendix.html#listOfReadersAndWriters&quot;&gt;&amp;#xB9C1;&amp;#xD06C;&lt;/a&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD574; &amp;#xD655;&amp;#xC778; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xC740;, Custom ItemReader&amp;#xAC00; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xACBD;&amp;#xC6B0;, ItemReader &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0C1;&amp;#xC18D;&amp;#xD558;&amp;#xAC8C; ItemReader &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC791;&amp;#xC131;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;22-listitemreader&quot;&gt;2.2 ListItemReader&lt;/h2&gt;

&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@StepScope&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; ListItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        List&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; oldUsers &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; userRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findByUpdatedDateBeforeAndStatusEquals&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;minusYears&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UserStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AVTIVE
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ListItemReader&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;oldUsers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;ListItemReader&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xBA74;, &amp;#xC77D;&amp;#xC5B4;&amp;#xC628; &amp;#xB9AC;&amp;#xC2A4;&amp;#xD2B8; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBA54;&amp;#xBAA8;&amp;#xB9AC;&amp;#xC5D0; &amp;#xC62C;&amp;#xB824;&amp;#xB450;&amp;#xACE0; ItemReader.read()&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xD558;&amp;#xB098;&amp;#xC529; &amp;#xCC98;&amp;#xB9AC; &amp;#xC791;&amp;#xC5C5;&amp;#xC744; &amp;#xC218;&amp;#xD589;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xD558;&amp;#xC9C0;&amp;#xB9CC;, &amp;#xC804;&amp;#xCCB4; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBA54;&amp;#xBAA8;&amp;#xB9AC;&amp;#xC5D0; &amp;#xC62C;&amp;#xB824;&amp;#xB450;&amp;#xACE0; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC740; &amp;#xBE44;&amp;#xD6A8;&amp;#xC728;&amp;#xC801;&amp;#xC774;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC774;&amp;#xB97C; &amp;#xB098;&amp;#xB220;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &lt;code&gt;PagingItemReader&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;23-database-readers&quot;&gt;2.3 Database Readers&lt;/h2&gt;

&lt;p&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xAE30;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; ItemReader&amp;#xC758; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xB098;&amp;#xB20C; &amp;#xB54C;, &lt;code&gt;Cursor Based ItemReader&lt;/code&gt;&amp;#xACFC; &lt;code&gt;Paging Based ItemReader&lt;/code&gt;&amp;#xC73C;&amp;#xB85C; &amp;#xB098;&amp;#xB20C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/p&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;cursor-based-itemreader&quot;&gt;Cursor Based ItemReader&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://docs.spring.io/spring-batch/4.0.x/reference/html/images/cursorExample.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#xAD00;&amp;#xACC4;&amp;#xD615; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xC5D0;&amp;#xC11C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; Streaming &amp;#xD574;&amp;#xC624;&amp;#xB294; &amp;#xC804;&amp;#xD1B5;&amp;#xC801;&amp;#xC778; &amp;#xBC29;&amp;#xBC95;&amp;#xC73C;&amp;#xB85C; &lt;code&gt;ResultSet&lt;/code&gt;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xCEE4;&amp;#xC11C;&amp;#xB97C; &amp;#xC720;&amp;#xC9C0;&amp;#xD558;&amp;#xC5EC; row &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC624;&amp;#xAC8C; &amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xB9CE;&amp;#xC774; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Spring Batch&amp;#xC5D0;&amp;#xC11C; Cursor Based ItemReader &amp;#xAD6C;&amp;#xD604;&amp;#xC740; &amp;#xCD08;&amp;#xAE30;&amp;#xD654; &amp;#xC2DC; &amp;#xCEE4;&amp;#xC11C;&amp;#xB97C; &amp;#xC5F4;&amp;#xACE0; &amp;#xBAA8;&amp;#xB4E0; &amp;#xD638;&amp;#xCD9C;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xCEE4;&amp;#xC11C;&amp;#xB97C; &amp;#xD55C; &amp;#xD589; &amp;#xC55E;&amp;#xC73C;&amp;#xB85C; &amp;#xC774;&amp;#xB3D9;&amp;#xC2DC;&amp;#xD0A8;&amp;#xB2E4;. &amp;#xCEE4;&amp;#xC11C; &amp;#xC774;&amp;#xB3D9;&amp;#xC740; read()&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xBA74;&amp;#xC11C; &amp;#xC77C;&amp;#xC5B4;&amp;#xB09C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Spring Batch&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; &lt;code&gt;JdbcCursorItemReader&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xBA70; &lt;code&gt;DataSource&lt;/code&gt;&amp;#xB85C;&amp;#xBD80;&amp;#xD130; &amp;#xC5BB;&amp;#xC740; &amp;#xC5F0;&amp;#xACB0;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; SQL &amp;#xBB38;&amp;#xC744; &amp;#xC2E4;&amp;#xD589;&amp;#xD558;&amp;#xACE0; &amp;#xC774;&amp;#xB97C; &lt;code&gt;ResultSet&lt;/code&gt;&amp;#xC744; &amp;#xC774;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xCEE4;&amp;#xC11C; &amp;#xAE30;&amp;#xBC18;&amp;#xC73C;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC628;&amp;#xB2E4;. &lt;code&gt;JdbcCursorItemReader&lt;/code&gt;&amp;#xC740; &lt;code&gt;JdbcCursorItemReaderBuilder&lt;/code&gt;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC0DD;&amp;#xC131; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC73C;&amp;#xBA70; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; JdbcCursorItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;CustomerCredit&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JdbcCursorItemReaderBuilder&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;CustomerCredit&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dataSource&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataSource&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;creditReader&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sql&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;select ID, NAME, CREDIT from CUSTOMER&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rowMapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CustomerCreditRowMapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xC774; &amp;#xBC16;&amp;#xC5D0;&amp;#xB3C4; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC740; ItemReader &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB3C4; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC5D0;&amp;#xC11C; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. &amp;#xC0C1;&amp;#xD669;&amp;#xC5D0; &amp;#xB9DE;&amp;#xAC8C; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-batch/4.0.x/reference/html/readersAndWriters.html#HibernateCursorItemReader&quot;&gt;&lt;code&gt;HibernateCursorItemReader&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;(https://docs.spring.io/spring-batch/4.0.x/reference/html/readersAndWriters.html#StoredProcedureItemReader)&quot;&gt;&lt;code&gt;StoredProcedureItemReader&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;paging-based-itemreader&quot;&gt;Paging Based ItemReader&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cursor &amp;#xAE30;&amp;#xBC18;&amp;#xC758; ItemReader&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4; &amp;#xCEE4;&amp;#xB125;&amp;#xC158;&amp;#xC744; &amp;#xC9C0;&amp;#xC18D;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xB3C5;&amp;#xC810;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xCC98;&amp;#xB9AC;&amp;#xAC00; &amp;#xC644;&amp;#xB8CC;&amp;#xB418;&amp;#xB294; &amp;#xC2DC;&amp;#xC810;&amp;#xAE4C;&amp;#xC9C0; &amp;#xCEE4;&amp;#xB125;&amp;#xC158;&amp;#xC744; &amp;#xB193;&amp;#xC544;&amp;#xC8FC;&amp;#xC9C0; &amp;#xC54A;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xACBD;&amp;#xC6B0;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C; &amp;#xC131;&amp;#xB2A5;&amp;#xC0C1;&amp;#xC5D0; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xC904; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xCC98;&amp;#xB9AC; &amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xAC00; &amp;#xD06C;&amp;#xB2E4;&amp;#xBA74; Cursor &amp;#xAE30;&amp;#xBC18;&amp;#xC774; &amp;#xC544;&amp;#xB2CC; Pagination &amp;#xAE30;&amp;#xBC18;&amp;#xC758; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC720;&amp;#xB9AC;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Pagination &amp;#xAE30;&amp;#xBC18;&amp;#xC758; ItemReader&amp;#xC758; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB294; &lt;code&gt;JdbcPagingItemReader&lt;/code&gt;, &lt;code&gt;JpaPagingItemReader&lt;/code&gt;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;jdbcpagingitemreader&quot;&gt;JdbcPagingItemReader&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JdbcPagingItemReader&lt;/code&gt;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xB54C;, SQL &amp;#xCFFC;&amp;#xB9AC;&amp;#xB97C; &amp;#xC81C;&amp;#xACF5; &lt;code&gt;PagingQueryProvider&lt;/code&gt;&amp;#xAC00; &amp;#xD544;&amp;#xC694;&lt;/li&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB9C8;&amp;#xB2E4; &amp;#xD398;&amp;#xC774;&amp;#xC9D5;&amp;#xC744; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xAD6C;&amp;#xBB38;&amp;#xACFC; &amp;#xC804;&amp;#xB7B5;&amp;#xC774; &amp;#xB2E4;&amp;#xB974;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC774;&amp;#xB97C; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xC918;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC9C0;&amp;#xC6D0;&amp;#xB418;&amp;#xB294; &amp;#xAC01; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4; &amp;#xC720;&amp;#xD615;&amp;#xB9C8;&amp;#xB2E4; &amp;#xB2E4;&amp;#xB978; &lt;code&gt;PagingQueryProvider&lt;/code&gt;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C;&amp;#xD569;&amp;#xB2C8;&amp;#xB2E4;&lt;/li&gt;
&lt;li&gt;&amp;#xB610;&amp;#xD55C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xC911;&amp;#xC778; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xC790;&amp;#xB3D9;&amp;#xC73C;&amp;#xB85C; &amp;#xAC80;&amp;#xC0C9;&amp;#xD558;&amp;#xACE0; &amp;#xC801;&amp;#xC808;&amp;#xD55C; &lt;code&gt;PagingQueryProvider&lt;/code&gt; &amp;#xAD6C;&amp;#xD604;&amp;#xC744; &amp;#xACB0;&amp;#xC815;&amp;#xD558;&amp;#xB294; &lt;code&gt;SqlPagingQueryProviderFactoryBean&lt;/code&gt;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;. &lt;code&gt;SqlPagingQueryProviderFactoryBean&lt;/code&gt;&amp;#xC740; select&amp;#xC808;, from&amp;#xC808; &amp;#xBC0F; sortKey &amp;#xAD6C;&amp;#xBB38;&amp;#xC744; &amp;#xBC18;&amp;#xB4DC;&amp;#xC2DC; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xC57C;&amp;#xD558;&amp;#xBA70;, where&amp;#xC808;&amp;#xC740; &amp;#xD544;&amp;#xC218;&amp;#xAC00; &amp;#xC544;&amp;#xB2CC; &amp;#xC635;&amp;#xC158;&amp;#xC73C;&amp;#xB85C; &amp;#xC124;&amp;#xC815; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; JdbcPagingItemReader &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DataSource dataSource&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        Map&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; parameterValues &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HashMap&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        parameterValues&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;status&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;NEW&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JdbcPagingItemReaderBuilder&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;CustomerCredit&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;creditReader&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dataSource&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dataSource&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;queryProvider&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;queryProvider&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parameterValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;parameterValues&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rowMapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;customerCreditMapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pageSize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                           &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; SqlPagingQueryProviderFactoryBean &lt;span class=&quot;token function&quot;&gt;queryProvider&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        SqlPagingQueryProviderFactoryBean provider &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SqlPagingQueryProviderFactoryBean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        provider&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setSelectClause&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;select id, name, credit&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        provider&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setFromClause&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;from customer&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        provider&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setWhereClause&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;where status=:status&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        provider&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setSortKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; provider&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;h4 class=&quot;mume-header&quot; id=&quot;jpapagingitemreader&quot;&gt;JpaPagingItemReader&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JpaPagingItemReader&lt;/code&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC9C0;&amp;#xC815;&amp;#xD55C; &amp;#xD398;&amp;#xC774;&amp;#xC9C0; &amp;#xC0AC;&amp;#xC774;&amp;#xC988;&amp;#xB9CC;&amp;#xD07C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC640;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xC870;&amp;#xD68C;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB294; JPA &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC0C1;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;DETACH&lt;/code&gt;&amp;#xC0C1;&amp;#xD0DC;&amp;#xC774;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0;, &amp;#xC601;&amp;#xC18D;&amp;#xC131; &amp;#xCEE8;&amp;#xD14D;&amp;#xC2A4;&amp;#xD2B8;&amp;#xC758; &amp;#xAD00;&amp;#xB9AC; &amp;#xB300;&amp;#xC0C1;&amp;#xC5D0;&amp;#xC11C; &amp;#xBC97;&amp;#xC5B4;&amp;#xB098;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JpaPagingItemReaderBuilder&lt;/code&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC0DD;&amp;#xC131; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xBA70;, &lt;code&gt;JpaPagingItemReader&lt;/code&gt;&amp;#xB97C; &amp;#xC9C1;&amp;#xC811; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xB3C4; &amp;#xAC00;&amp;#xB2A5;&amp;#xD558;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;// JpaPagingItemReaderBuilder&amp;#xB97C; &amp;#xD1B5;&amp;#xD55C; &amp;#xC0DD;&amp;#xC131;&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; JpaPagingItemReader &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JpaPagingItemReaderBuilder&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;CustomerCredit&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;creditReader&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;entityManagerFactory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;entityManagerFactory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;queryString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;select c from CustomerCredit c&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pageSize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// &amp;#xC9C1;&amp;#xC811; &amp;#xC0DD;&amp;#xC131;&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;destroyMethod &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@StepScope&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; JpaPagingItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        JpaPagingItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; jpaPagingItemReader &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JpaPagingItemReader&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        jpaPagingItemReader&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setQueryString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&amp;quot;select u from User as u where u.updatedDate &amp;lt; :updatedDate and u.status = :status&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        HashMap&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; map &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HashMap&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        map&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;updatedDate&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;minusYears&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        map&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;status&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UserStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ACTIVE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        jpaPagingItemReader&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setParameterValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;map&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        jpaPagingItemReader&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setEntityManagerFactory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;entityManagerFactory&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        jpaPagingItemReader&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setPageSize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;CHUNK_SIZE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; jpaPagingItemReader&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JpaPagingItemReader&lt;/code&gt; &amp;#xB0B4;&amp;#xBD80;&amp;#xC5D0;&amp;#xC11C; &lt;code&gt;EntityManager&lt;/code&gt;&amp;#xB97C; &amp;#xD560;&amp;#xB2F9; &amp;#xBC1B;&amp;#xC544;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD55C;&amp;#xB2E4;. &lt;code&gt;EntityManagerFactory&lt;/code&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC0DD;&amp;#xC131;&amp;#xD55C; &lt;code&gt;EntityManager&lt;/code&gt;&amp;#xC5D0;&amp;#xC11C; &amp;#xC9C0;&amp;#xC815;&amp;#xD55C; &amp;#xD06C;&amp;#xAE30;&amp;#xB300;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC624;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; &amp;#xC608;&amp;#xB97C; &amp;#xB4E4;&amp;#xC5B4; 10&amp;#xAC1C;&amp;#xC529; &lt;code&gt;[&amp;#xC77D;&amp;#xAE30;] -&amp;gt; [&amp;#xCC98;&amp;#xB9AC;] -&amp;gt; [&amp;#xC4F0;&amp;#xAE30;]&lt;/code&gt;&amp;#xB97C; &amp;#xD558;&amp;#xB294; Step&amp;#xC774; &amp;#xC788;&amp;#xB2E4;&amp;#xACE0; &amp;#xD588;&amp;#xC744; &amp;#xB54C;, &amp;#xCC98;&amp;#xC74C; &amp;#xC774;&amp;#xD6C4;&amp;#xC758; &amp;#xCC98;&amp;#xB9AC;&amp;#xC5D0; &amp;#xB300;&amp;#xD574; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC74;&amp;#xB108;&amp;#xB6F0;&amp;#xAE30;&amp;#xAC00; &amp;#xBC1C;&amp;#xC0DD; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xlink=&quot;http://www.w3.org/1999/xlink&quot; contentscripttype=&quot;application/ecmascript&quot; contentstyletype=&quot;text/css&quot; height=&quot;447px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:462px;height:447px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 462 447&quot; width=&quot;462px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f6vwfdg2mg7k7&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;89&quot; x2=&quot;89&quot; y1=&quot;65.4883&quot; y2=&quot;373.9727&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;405&quot; x2=&quot;405&quot; y1=&quot;65.4883&quot; y2=&quot;373.9727&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;159&quot; x=&quot;8&quot; y=&quot;30&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;145&quot; x=&quot;15&quot; y=&quot;50.5352&quot;&gt;BATCH_APPLICATION&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;30.4883&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;159&quot; x=&quot;8&quot; y=&quot;372.9727&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;145&quot; x=&quot;15&quot; y=&quot;393.5078&quot;&gt;BATCH_APPLICATION&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;73&quot; x=&quot;366&quot; y=&quot;62.5352&quot;&gt;DATABASE&lt;/text&gt;&lt;path d=&quot;M387.5,13 C387.5,3 405.5,3 405.5,3 C405.5,3 423.5,3 423.5,13 L423.5,39 C423.5,49 405.5,49 405.5,49 C405.5,49 387.5,49 387.5,39 L387.5,13 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; style=&quot;stroke: #000000; stroke-width: 1.5;&quot;/&gt;&lt;path d=&quot;M387.5,13 C387.5,23 405.5,23 405.5,23 C405.5,23 423.5,23 423.5,13 &quot; fill=&quot;none&quot; style=&quot;stroke: #000000; stroke-width: 1.5;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;73&quot; x=&quot;366&quot; y=&quot;386.5078&quot;&gt;DATABASE&lt;/text&gt;&lt;path d=&quot;M387.5,399.4609 C387.5,389.4609 405.5,389.4609 405.5,389.4609 C405.5,389.4609 423.5,389.4609 423.5,399.4609 L423.5,425.4609 C423.5,435.4609 405.5,435.4609 405.5,435.4609 C405.5,435.4609 387.5,435.4609 387.5,425.4609 L387.5,399.4609 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; style=&quot;stroke: #000000; stroke-width: 1.5;&quot;/&gt;&lt;path d=&quot;M387.5,399.4609 C387.5,409.4609 405.5,409.4609 405.5,409.4609 C405.5,409.4609 423.5,409.4609 423.5,399.4609 &quot; fill=&quot;none&quot; style=&quot;stroke: #000000; stroke-width: 1.5;&quot;/&gt;&lt;rect fill=&quot;#EEEEEE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;3&quot; style=&quot;stroke: #EEEEEE; stroke-width: 1.0;&quot; width=&quot;447&quot; x=&quot;3&quot; y=&quot;96.1436&quot;/&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0;&quot; x1=&quot;3&quot; x2=&quot;450&quot; y1=&quot;96.1436&quot; y2=&quot;96.1436&quot;/&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0;&quot; x1=&quot;3&quot; x2=&quot;450&quot; y1=&quot;99.1436&quot; y2=&quot;99.1436&quot;/&gt;&lt;rect fill=&quot;#EEEEEE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;23.3105&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;109&quot; x=&quot;172&quot; y=&quot;85.4883&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;91&quot; x=&quot;178&quot; y=&quot;102.0566&quot;&gt;1. &amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; Read&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;100.5,136.1094,90.5,140.1094,100.5,144.1094,96.5,140.1094&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;393.5,136.1094,403.5,140.1094,393.5,144.1094,397.5,140.1094&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;94.5&quot; x2=&quot;399.5&quot; y1=&quot;140.1094&quot; y2=&quot;140.1094&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;230&quot; x=&quot;106.5&quot; y=&quot;135.3672&quot;&gt;[READ]: SELECT * FROM USER LIMIT 5&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;89.5&quot; x2=&quot;131.5&quot; y1=&quot;169.4199&quot; y2=&quot;169.4199&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;131.5&quot; x2=&quot;131.5&quot; y1=&quot;169.4199&quot; y2=&quot;182.4199&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;90.5&quot; x2=&quot;131.5&quot; y1=&quot;182.4199&quot; y2=&quot;182.4199&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;100.5,178.4199,90.5,182.4199,100.5,186.4199,96.5,182.4199&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;159&quot; x=&quot;96.5&quot; y=&quot;164.6777&quot;&gt;[PROCESS]: &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC00;&amp;#xACF5;/&amp;#xCC98;&amp;#xB9AC;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;393.5,207.7305,403.5,211.7305,393.5,215.7305,397.5,211.7305&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;89.5&quot; x2=&quot;399.5&quot; y1=&quot;211.7305&quot; y2=&quot;211.7305&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;142&quot; x=&quot;96.5&quot; y=&quot;206.9883&quot;&gt;[WRITE]: &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC785;&amp;#xB825;/&amp;#xC218;&amp;#xC815;&lt;/text&gt;&lt;rect fill=&quot;#EEEEEE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;3&quot; style=&quot;stroke: #EEEEEE; stroke-width: 1.0;&quot; width=&quot;447&quot; x=&quot;3&quot; y=&quot;240.3857&quot;/&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0;&quot; x1=&quot;3&quot; x2=&quot;450&quot; y1=&quot;240.3857&quot; y2=&quot;240.3857&quot;/&gt;&lt;line style=&quot;stroke: #000000; stroke-width: 1.0;&quot; x1=&quot;3&quot; x2=&quot;450&quot; y1=&quot;243.3857&quot; y2=&quot;243.3857&quot;/&gt;&lt;rect fill=&quot;#EEEEEE&quot; filter=&quot;url(#f6vwfdg2mg7k7)&quot; height=&quot;23.3105&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;109&quot; x=&quot;172&quot; y=&quot;229.7305&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;91&quot; x=&quot;178&quot; y=&quot;246.2988&quot;&gt;2. &amp;#xB450; &amp;#xBC88;&amp;#xC9F8; Read&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;100.5,280.3516,90.5,284.3516,100.5,288.3516,96.5,284.3516&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;393.5,280.3516,403.5,284.3516,393.5,288.3516,397.5,284.3516&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;94.5&quot; x2=&quot;399.5&quot; y1=&quot;284.3516&quot; y2=&quot;284.3516&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;292&quot; x=&quot;106.5&quot; y=&quot;279.6094&quot;&gt;[READ]: SELECT * FROM USER OFFSET 5 LIMIT 5&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;89.5&quot; x2=&quot;131.5&quot; y1=&quot;313.6621&quot; y2=&quot;313.6621&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;131.5&quot; x2=&quot;131.5&quot; y1=&quot;313.6621&quot; y2=&quot;326.6621&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;90.5&quot; x2=&quot;131.5&quot; y1=&quot;326.6621&quot; y2=&quot;326.6621&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;100.5,322.6621,90.5,326.6621,100.5,330.6621,96.5,326.6621&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;159&quot; x=&quot;96.5&quot; y=&quot;308.9199&quot;&gt;[PROCESS]: &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xAC00;&amp;#xACF5;/&amp;#xCC98;&amp;#xB9AC;&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;393.5,351.9727,403.5,355.9727,393.5,359.9727,397.5,355.9727&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;89.5&quot; x2=&quot;399.5&quot; y1=&quot;355.9727&quot; y2=&quot;355.9727&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;142&quot; x=&quot;96.5&quot; y=&quot;351.2305&quot;&gt;[WRITE]: &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xC785;&amp;#xB825;/&amp;#xC218;&amp;#xC815;&lt;/text&gt;&lt;!--
@startuml
participant BATCH_APPLICATION
database DATABASE

== 1. 첫 번째 Read ==
BATCH_APPLICATION &lt;-&gt; DATABASE : [READ]: SELECT * FROM USER LIMIT 5
BATCH_APPLICATION -&gt; BATCH_APPLICATION : [PROCESS]: 데이터 가공/처리
BATCH_APPLICATION -&gt; DATABASE: [WRITE]: 데이터 입력/수정
== 2. 두 번째 Read ==
BATCH_APPLICATION &lt;-&gt; DATABASE : [READ]: SELECT * FROM USER OFFSET 5 LIMIT 5
BATCH_APPLICATION -&gt; BATCH_APPLICATION : [PROCESS]: 데이터 가공/처리
BATCH_APPLICATION -&gt; DATABASE: [WRITE]: 데이터 입력/수정
@enduml

PlantUML version 1.2018.11(Sun Sep 23 01:43:53 KST 2018)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 10.0.1+10
Operating System: Mac OS X
OS Version: 10.12.2
Default Encoding: US-ASCII
Language: ko
Country: KR
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&amp;#xCCAD;&amp;#xD06C; &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC624;&amp;#xB3C4;&amp;#xB85D; &amp;#xAE30;&amp;#xBCF8; &amp;#xAD6C;&amp;#xD604;&amp;#xC774; &amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC5D0; 5&amp;#xAC1C;&amp;#xC758; &amp;#xC544;&amp;#xC774;&amp;#xD15C;&amp;#xC744; &amp;#xAC74;&amp;#xB108; &amp;#xB6F0;&amp;#xAC8C; &amp;#xB418;&amp;#xB294; &amp;#xC0C1;&amp;#xD669;&amp;#xC774; &amp;#xC0DD;&amp;#xAE38; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. &amp;#xC2E4;&amp;#xC81C; &amp;#xB450; &amp;#xBC88;&amp;#xC9F8; &amp;#xB2E8;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C; &amp;#xC62C;&amp;#xBC14;&amp;#xB978; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC838;&amp;#xC624;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &lt;code&gt;OFFSET 5&lt;/code&gt;&amp;#xC744; &amp;#xBE7C;&amp;#xB193;&amp;#xACE0; SQL&amp;#xBB38;&amp;#xC744; &amp;#xC9C8;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;OFFSET &amp;#xC801;&amp;#xC6A9;&amp;#xC744; &amp;#xD53C;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xC544;&amp;#xB798;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &lt;code&gt;JpaPagingItemReader&lt;/code&gt;&amp;#xC758; getPage&amp;#xB97C; &amp;#xC624;&amp;#xBC84;&amp;#xB77C;&amp;#xC774;&amp;#xB4DC;&amp;#xD558;&amp;#xC5EC; &amp;#xB9E4;&amp;#xBC88; &amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xD398;&amp;#xC774;&amp;#xC9C0;&amp;#xB9CC; &amp;#xCC38;&amp;#xC870;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xBCC0;&amp;#xACBD;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;JpaPagingItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; jpaPagingItemReader &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JpaPagingItemReader&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getPage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;h4 class=&quot;mume-header&quot; id=&quot;repositoryitemreader&quot;&gt;RepositoryItemReader&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PagingAndSortingRepository&lt;/code&gt;&amp;#xB8F0; &amp;#xD65C;&amp;#xC6A9;&amp;#xD55C; ItemReader &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RepositoryItemReader&lt;/code&gt;&amp;#xB97C; &amp;#xC9C1;&amp;#xC811; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xACFC; &amp;#xBE4C;&amp;#xB354; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xC778; &lt;code&gt;RepositoryItemReaderBuilder&lt;/code&gt;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &lt;code&gt;RepositoryItemReader&lt;/code&gt; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&amp;#xAD6C;&amp;#xD604; &amp;#xC2DC;, &amp;#xC8FC;&amp;#xC758;&amp;#xD574;&amp;#xC57C; &amp;#xD560; &amp;#xC810;&amp;#xC740; Repository&amp;#xC5D0;&amp;#xC11C; Pageable &amp;#xD0C0;&amp;#xC785; &amp;#xD639;&amp;#xC740; &amp;#xD558;&amp;#xC704; &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294;&amp;#xC810;&amp;#xACFC; &amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC; &amp;#xB9C8;&amp;#xC9C0;&amp;#xB9C9; &amp;#xC778;&amp;#xC790;&amp;#xC5D0; Pageable &amp;#xC778;&amp;#xC790;&amp;#xB97C; &amp;#xD3EC;&amp;#xD568;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xB294; &amp;#xC810;&amp;#xC774;&amp;#xB2E4;. &amp;#xC544;&amp;#xB798; &amp;#xC608;&amp;#xC81C; &amp;#xCF54;&amp;#xB4DC;&amp;#xB97C; &amp;#xCC38;&amp;#xACE0;&amp;#xD558;&amp;#xC790;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// 1. Pageable &amp;#xD0C0;&amp;#xC785;&amp;#xC744; &amp;#xBC18;&amp;#xD658;&amp;#xD574;&amp;#xC57C; &amp;#xD558;&amp;#xBA70;, &amp;#xC778;&amp;#xC790; &amp;#xB9C8;&amp;#xC9C0;&amp;#xB9C9;&amp;#xC5D0; Pageable &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xD3EC;&amp;#xD568;&amp;#xD574;&amp;#xC57C; &amp;#xD568;.&lt;/span&gt;
    Page&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findByUpdatedDateBeforeAndStatusEquals&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;LocalDateTime localDateTime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UserStatus status&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Pageable pageable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
&lt;span class=&quot;token annotation punctuation&quot;&gt;@StepScope&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; RepositoryItemReader&lt;span class=&quot;token generics function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;itemReader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RepositoryItemReaderBuilder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;userRepository&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methodName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;findByUpdatedDateBeforeAndStatusEquals&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pageSize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;CHUNK_SIZE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;maxItemCount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;CHUNK_SIZE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Arrays&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;asList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;LocalDateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;minusYears&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UserStatus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ACTIVE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sorts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Collections&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;singletonMap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;idx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Sort&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Direction&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ASC&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;repositoryItemReader&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RepositoryItemReader&lt;/code&gt;&amp;#xB3C4; &amp;#xB9C8;&amp;#xCC2C;&amp;#xAC00;&amp;#xC9C0;&amp;#xB85C; &lt;code&gt;JpaPagingItemReader&lt;/code&gt;&amp;#xC640; &amp;#xAC19;&amp;#xC774; &amp;#xC9C0;&amp;#xC815;&amp;#xD574;&amp;#xB193;&amp;#xC740; pageSize&amp;#xC5D0; &amp;#xC758;&amp;#xAC70;&amp;#xD558;&amp;#xC5EC; &amp;#xAC74;&amp;#xB108;&amp;#xB6F0;&amp;#xB294; SQL &amp;#xAD6C;&amp;#xBB38;&amp;#xC774; &amp;#xD3EC;&amp;#xD568;&amp;#xB428;&amp;#xC744; &amp;#xD655;&amp;#xC778;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC5C8;&amp;#xB2E4;. &amp;#xC774;&amp;#xB97C; &amp;#xD68C;&amp;#xD53C;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &lt;code&gt;doPageRead&lt;/code&gt; &amp;#xBA54;&amp;#xC18C;&amp;#xB4DC;&amp;#xB97C; &amp;#xC624;&amp;#xBC84;&amp;#xB77C;&amp;#xC774;&amp;#xB4DC;&amp;#xD558;&amp;#xC5EC; &amp;#xCCAB; &amp;#xBC88;&amp;#xC9F8; &amp;#xD398;&amp;#xC774;&amp;#xC9C0;&amp;#xB9CC; &amp;#xD638;&amp;#xCD9C;&amp;#xB418;&amp;#xB3C4;&amp;#xB85D; &amp;#xC218;&amp;#xC815;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;. &lt;strong&gt;&amp;#xC544;&amp;#xB798; &amp;#xC774;&amp;#xBBF8;&amp;#xC9C0;&amp;#xC758; &amp;#xC8FC;&amp;#xC11D; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xC0B4;&amp;#xD3B4;&amp;#xBCF4;&amp;#xB3C4;&amp;#xB85D; &amp;#xD558;&amp;#xC790;&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;https://i.imgur.com/vnUQFi9.png&quot; alt=&quot;RepositoryItemReader.doPageRead()&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#xC2E4;&amp;#xBB34;&amp;#xC5D0;&amp;#xC11C;&amp;#xB294; JPA&amp;#xB97C; &amp;#xC6D0;&amp;#xD65C;&amp;#xD558;&amp;#xAC8C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;, querydsl &amp;#xD639;&amp;#xC740; Specification API&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, &amp;#xC774;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAE30; &amp;#xC704;&amp;#xD574;&amp;#xC11C;&amp;#xB294; &amp;#xACB0;&amp;#xAD6D; Custom ItemReader&amp;#xB97C; &amp;#xAD6C;&amp;#xD604;&amp;#xD574;&amp;#xC11C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xBC29;&amp;#xBC95;&amp;#xBC16;&amp;#xC5D0; &amp;#xC5C6;&amp;#xB294;&amp;#xAC70; &amp;#xAC19;&amp;#xB2E4;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot;&gt;&amp;#xCC38;&amp;#xACE0;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://book.naver.com/bookdb/book_detail.nhn?bid=14031681&quot;&gt;&amp;#xCC98;&amp;#xC74C; &amp;#xBC30;&amp;#xC6B0;&amp;#xB294; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8; 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-batch/4.1.x/reference/html/index.html&quot;&gt;Spring Batch - Reference Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Spring</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/125</guid>
      <comments>https://stylishc.tistory.com/125#entry125comment</comments>
      <pubDate>Fri, 4 Jan 2019 00:27:48 +0900</pubDate>
    </item>
    <item>
      <title>스프링 부트 배치 #1 - 개요/주요개념</title>
      <link>https://stylishc.tistory.com/124</link>
      <description>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;
      &lt;title&gt;SPRING_BATCH_#1&lt;/title&gt;
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
      
      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.css&quot;&gt;
      
      
      
      
      
      
      
      
      

      &lt;style&gt; 
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*=&quot;language-&quot;],
pre[class*=&quot;language-&quot;] {
  color: #333;
  background: none;
  font-family: Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*=&quot;language-&quot;] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) &gt; code[class*=&quot;language-&quot;] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}html body{font-family:&quot;Helvetica Neue&quot;,Helvetica,&quot;Segoe UI&quot;,Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body&gt;:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body&gt;p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body&gt;ul,html body&gt;ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li&gt;p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote&gt;:first-child{margin-top:0}html body blockquote&gt;:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:&quot;\00a0&quot;}html body pre&gt;code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers&gt;code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows&gt;span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .btn-group{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .status{display:none}.markdown-preview:not([for=&quot;preview&quot;]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=&quot;html-export&quot;]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=&quot;html-export&quot;]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
 
      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body for=&quot;html-export&quot;&gt;
      &lt;div class=&quot;mume markdown-preview   &quot;&gt;
      &lt;h1 class=&quot;mume-header&quot; id=&quot;%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EB%B0%B0%EC%B9%98-1-%EA%B0%9C%EC%9A%94%EC%A3%BC%EC%9A%94%EA%B0%9C%EB%85%90&quot;&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8; &amp;#xBC30;&amp;#xCE58; #1 - &amp;#xAC1C;&amp;#xC694;/&amp;#xC8FC;&amp;#xC694;&amp;#xAC1C;&amp;#xB150;&lt;/h1&gt;

&lt;h2 class=&quot;mume-header&quot; id=&quot;%EA%B0%9C%EC%9A%94&quot;&gt;&amp;#xAC1C;&amp;#xC694;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xBC31;&amp;#xC5D4;&amp;#xB4DC;&amp;#xC758; &amp;#xBC30;&amp;#xCE58; &amp;#xCC98;&amp;#xB9AC; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xAD6C;&amp;#xD604;&amp;#xD558;&amp;#xB294; &amp;#xB370; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xB294; &amp;#xD504;&amp;#xB808;&amp;#xC784;&amp;#xC6CC;&amp;#xD06C;.&lt;/li&gt;
&lt;li&gt;&amp;#xBD80;&amp;#xD2B8; &amp;#xBC30;&amp;#xCE58;&amp;#xC758; &amp;#xACBD;&amp;#xC6B0;, &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xC758; &amp;#xC124;&amp;#xC815; &amp;#xC694;&amp;#xC18C;&amp;#xB4E4;&amp;#xC744; &amp;#xAC04;&amp;#xD3B8;&amp;#xD654;&amp;#xC2DC;&amp;#xCF1C; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBC30;&amp;#xCE58;&amp;#xB97C; &amp;#xBE60;&amp;#xB974;&amp;#xACE0; &amp;#xC27D;&amp;#xAC8C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB3C4;&amp;#xB85D; &amp;#xAD6C;&amp;#xC131;.
&lt;ul&gt;
&lt;li&gt;&amp;#xBC30;&amp;#xCE58;&amp;#xB780;, &amp;#xC21C;&amp;#xCC28;&amp;#xC801;&amp;#xC73C;&amp;#xB85C; &amp;#xC790;&amp;#xB8CC;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD55C;&amp;#xB2E4;&amp;#xB294; &amp;#xB73B;&amp;#xC73C;&amp;#xB85C; &amp;#xC77C;&amp;#xAD04; &amp;#xCC98;&amp;#xB9AC;&amp;#xC640; &amp;#xAC19;&amp;#xC740; &amp;#xB73B;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;why-spring-batch&quot;&gt;Why Spring Batch?&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xB300;&amp;#xC6A9;&amp;#xB7C9; &amp;#xCC98;&amp;#xB9AC; &amp;#xCD5C;&amp;#xC801;&amp;#xD654;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xACE0;, &amp;#xACE0;&amp;#xC131;&amp;#xB2A5;&amp;#xC744; &amp;#xBC1C;&amp;#xD718;&lt;/li&gt;
&lt;li&gt;&amp;#xB85C;&amp;#xAE45;. &amp;#xD1B5;&amp;#xACC4; &amp;#xCC98;&amp;#xB9AC;, &amp;#xD2B8;&amp;#xB79C;&amp;#xC7AD;&amp;#xC158; &amp;#xAD00;&amp;#xB9AC; &amp;#xB4F1; &amp;#xD544;&amp;#xC218; &amp;#xAE30;&amp;#xB2A5; &amp;#xC9C0;&amp;#xC6D0;&lt;/li&gt;
&lt;li&gt;&amp;#xC608;&amp;#xC678; &amp;#xBC0F; &amp;#xBE44;&amp;#xC815;&amp;#xC0C1; &amp;#xB3D9;&amp;#xC791;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xBC29;&amp;#xC5B4; &amp;#xAE30;&amp;#xB2A5;&lt;/li&gt;
&lt;li&gt;&amp;#xAC1C;&amp;#xBC1C;&amp;#xC790;&amp;#xB294; Spring Batch &amp;#xD504;&amp;#xB85C;&amp;#xADF8;&amp;#xB798;&amp;#xBC0D; &amp;#xBAA8;&amp;#xB378;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xC5EC; &amp;#xBE44;&amp;#xC988;&amp;#xB2C8;&amp;#xC2A4; &amp;#xB85C;&amp;#xC9C1;&amp;#xC5D0; &amp;#xC9D1;&amp;#xC911;&amp;#xD558;&amp;#xACE0; &amp;#xD504;&amp;#xB808;&amp;#xC784;&amp;#xC6CC;&amp;#xD06C;&amp;#xAC00; &amp;#xC778;&amp;#xD504;&amp;#xB77C;&amp;#xB97C; &amp;#xAD00;&amp;#xB9AC;&amp;#xD558;&amp;#xB3C4;&amp;#xB85D; &amp;#xD568;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot;&gt;&amp;#xC8FC;&amp;#xC758;&amp;#xC0AC;&amp;#xD56D;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xBCF5;&amp;#xC7A1;&amp;#xD55C; &amp;#xAD6C;&amp;#xC870;&amp;#xC640; &amp;#xB85C;&amp;#xC9C1;&amp;#xC744; &amp;#xD53C;&amp;#xD574;&amp;#xC57C; &amp;#xD568;&lt;/li&gt;
&lt;li&gt;&amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC9C1;&amp;#xC811; &amp;#xB2E4;&amp;#xB8E8;&amp;#xB294; &amp;#xCF54;&amp;#xB4DC;&amp;#xAC00; &amp;#xB9CE;&amp;#xC73C;&amp;#xBBC0;&amp;#xB85C;, &amp;#xBB34;&amp;#xACB0;&amp;#xC131;&amp;#xC744; &amp;#xC720;&amp;#xC9C0;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xBC29;&amp;#xC5B4;&amp;#xC801;&amp;#xC778; &amp;#xBC29;&amp;#xBC95;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD568;.&lt;/li&gt;
&lt;li&gt;I/O &amp;#xC0AC;&amp;#xC6A9;&amp;#xC744; &amp;#xCD5C;&amp;#xC18C;&amp;#xD654; &amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;. &amp;#xC7A6;&amp;#xC740; I/O &amp;#xBC1C;&amp;#xC0DD;&amp;#xC740; &amp;#xBC30;&amp;#xCE58; &amp;#xC5B4;&amp;#xD50C;&amp;#xB9AC;&amp;#xCF00;&amp;#xC774;&amp;#xC158; &amp;#xC131;&amp;#xB2A5;&amp;#xC5D0; &amp;#xC601;&amp;#xD5A5;&amp;#xC744; &amp;#xC904; &amp;#xC218; &amp;#xC788;&amp;#xAE30; &amp;#xB54C;&amp;#xBB38;&amp;#xC774;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;Minimize system resource use, especially I/O. Perform as many operations as possible in internal memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8; &amp;#xBC30;&amp;#xCE58;&amp;#xB294; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC2A4;&amp;#xCE90;&amp;#xC904;&amp;#xB9C1; &amp;#xAE30;&amp;#xB2A5;&amp;#xC744; &amp;#xC81C;&amp;#xACF5;&amp;#xD558;&amp;#xC9C0; &amp;#xC54A;&amp;#xB294;&amp;#xB2E4;. &amp;#xC774;&amp;#xC5D0; &amp;#xB530;&amp;#xB77C;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC2A4;&amp;#xCF00;&amp;#xC904;&amp;#xB9C1; &amp;#xAD6C;&amp;#xD604;&amp;#xCCB4;&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD55C;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&amp;#xCFFC;&amp;#xCE20;, &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xC2A4;&amp;#xCE90;&amp;#xC904;&amp;#xB7EC; &amp;#xB4F1;&amp;#xC744; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD574;&amp;#xC57C; &amp;#xD568;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC2E4;&amp;#xC81C; &amp;#xD658;&amp;#xACBD;&amp;#xACFC; &amp;#xBE44;&amp;#xC2B7;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xBCFC;&amp;#xB968;&amp;#xC744; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xD14C;&amp;#xC2A4;&amp;#xD2B8;&amp;#xB97C; &amp;#xD568;&amp;#xC73C;&amp;#xB85C;&amp;#xC368;, &amp;#xCC98;&amp;#xB9AC; &amp;#xC548;&amp;#xC815;&amp;#xC131;&amp;#xC744; &amp;#xB192;&amp;#xD788;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC88B;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EB%B0%B0%EC%B9%98-%EC%B2%98%EB%A6%AC-%EC%A0%88%EC%B0%A8&quot;&gt;&amp;#xBC30;&amp;#xCE58; &amp;#xCC98;&amp;#xB9AC; &amp;#xC808;&amp;#xCC28;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC77D;&amp;#xAE30;: &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xBCA0;&amp;#xC774;&amp;#xC2A4;, &amp;#xD30C;&amp;#xC77C; &amp;#xB4F1;&amp;#xC5D0;&amp;#xC11C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC77D;&amp;#xB294;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;Reads a large number of records from a database, file, or queue.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xCC98;&amp;#xB9AC;: &amp;#xC77D;&amp;#xC740; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;/&amp;#xAC00;&amp;#xACF5;
&lt;ul&gt;
&lt;li&gt;Processes the data in some fashion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#xC4F0;&amp;#xAE30;: &amp;#xCC98;&amp;#xB9AC;/&amp;#xAC00;&amp;#xACF5;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xC800;&amp;#xC7A5;&amp;#xC18C;&amp;#xC5D0; &amp;#xC800;&amp;#xC7A5;
&lt;ul&gt;
&lt;li&gt;Writes back data in a modified form.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://docs.spring.io/spring-batch/4.1.x/reference/html/images/spring-batch-reference-model.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Job&amp;#xACFC; Step&amp;#xC740; 1:N&amp;#xC758; &amp;#xAD00;&amp;#xACC4;&amp;#xB85C;, &amp;#xD558;&amp;#xB098;&amp;#xC758; Job&amp;#xC5D0; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xC758; Step&amp;#xC73C;&amp;#xB85C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xD504;&amp;#xB85C;&amp;#xC138;&amp;#xC2A4;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C4;&amp;#xB2E4;. &amp;#xAC01;&amp;#xAC01; Step&amp;#xC740; ItemReader, ItemProcessor, ItemWriter&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, Step&amp;#xACFC;&amp;#xB294; 1:1 &amp;#xAD00;&amp;#xACC4;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C4;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;1-job&quot;&gt;1. Job&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xCC98;&amp;#xB9AC; &amp;#xACFC;&amp;#xC815; &amp;#xD558;&amp;#xB098;&amp;#xB97C; &amp;#xAC00;&amp;#xB9AC;&amp;#xD0A4;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xC758; Step&amp;#xC744; &amp;#xD3EC;&amp;#xD568;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;. Step&amp;#xB4E4;&amp;#xC758; &amp;#xCEE8;&amp;#xD14C;&amp;#xC774;&amp;#xB108; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xC218;&amp;#xD589;&amp;#xD55C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;Job &amp;#xAC1D;&amp;#xCCB4;&amp;#xB97C; &amp;#xB9CC;&amp;#xB4DC;&amp;#xB294; &amp;#xBE4C;&amp;#xB354; &amp;#xD074;&amp;#xB798;&amp;#xC2A4;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xC5EC;&amp;#xB7EC; &amp;#xBE4C;&amp;#xB354;&amp;#xB97C; &amp;#xD1B5;&amp;#xD569;&amp;#xD55C; JobBuilderFactory&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC6D0;&amp;#xD558;&amp;#xB294; Job&amp;#xC744; &amp;#xC27D;&amp;#xAC8C; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xC74C;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; Job &lt;span class=&quot;token function&quot;&gt;footballJob&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jobBuilderFactory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;footballJob&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;playerLoad&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gameLoad&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;playerSummarization&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;JobBuilderFactory.get()&amp;#xC744; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xAC8C; &amp;#xB418;&amp;#xBA74;, &amp;#xC0C8;&amp;#xB85C;&amp;#xC6B4; JobBuilder &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4;&amp;#xB97C; &amp;#xBC18;&amp;#xD658;&amp;#xD568;. JobBuilder&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xACFC;&amp;#xC815;&amp;#xC5D0;&amp;#xC11C; JobRepository&amp;#xB97C; &amp;#xC8FC;&amp;#xC785;&amp;#xBC1B;&amp;#xAC8C; &amp;#xB418;&amp;#xB294;&amp;#xB370;, JobBuilderFactory&amp;#xC5D0;&amp;#xC11C; &amp;#xC0DD;&amp;#xC131;&amp;#xB418;&amp;#xB294; &amp;#xBAA8;&amp;#xB4E0; JobBuilder&amp;#xAC00; &amp;#xB3D9;&amp;#xC77C;&amp;#xD55C; JobRepository&amp;#xB97C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JobBuilerFactory&amp;#xC5D0;&amp;#xC11C; JobBuilder&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xBA70; &amp;#xC0DD;&amp;#xC131;&amp;#xD55C; &amp;#xBE4C;&amp;#xB354;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JobBuilder&amp;#xB294; &amp;#xC9C1;&amp;#xC811; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xB294; &amp;#xAC83;&amp;#xC774; &amp;#xC544;&amp;#xB2C8;&amp;#xB77C;, &amp;#xBCC4;&amp;#xB3C4;&amp;#xC758; &amp;#xAD6C;&amp;#xCCB4;&amp;#xC801;&amp;#xC778; JobBuilder&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD558;&amp;#xAC8C; &amp;#xB41C;&amp;#xB2E4;.&lt;/strong&gt; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xC5EC;&amp;#xB7EC; &amp;#xC0C1;&amp;#xD669;&amp;#xC744; &amp;#xACE0;&amp;#xB824;&amp;#xD558;&amp;#xC5EC; &amp;#xC774;&amp;#xB807;&amp;#xAC8C; &amp;#xAD6C;&amp;#xD604;&amp;#xB418;&amp;#xC5B4; &amp;#xC788;&amp;#xB294;&amp;#xB4EF; &amp;#xBCF4;&amp;#xC774;&amp;#xBA70;, &amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC; &amp;#xCCB4;&amp;#xC774;&amp;#xB2DD;&amp;#xC744; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC6D0;&amp;#xD558;&amp;#xB294; &amp;#xB0B4;&amp;#xC6A9;&amp;#xC744; &amp;#xBA85;&amp;#xC2DC;&amp;#xD558;&amp;#xBA74; &amp;#xC27D;&amp;#xAC8C; &amp;#xCC98;&amp;#xB9AC; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre data-role=&quot;codeBlock&quot; data-info=&quot;java&quot; class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Autowired&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; JobBuilderFactory jobBuilderFactory&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token annotation punctuation&quot;&gt;@Bean&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; Job &lt;span class=&quot;token function&quot;&gt;simpleJob&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// 1. simpleJob &amp;#xC774;&amp;#xB77C;&amp;#xB294; &amp;#xC774;&amp;#xB984;&amp;#xC744; &amp;#xAC00;&amp;#xC9C4; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; JobBuilder &amp;#xC778;&amp;#xC2A4;&amp;#xD134;&amp;#xC2A4; &amp;#xBC18;&amp;#xD658;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; jobBuilderFactory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;simpleJob&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// 2. Step&amp;#xC744; &amp;#xC8FC;&amp;#xC785;, Step&amp;#xD639;&amp;#xC740; Flow&amp;#xB97C; &amp;#xD30C;&amp;#xB77C;&amp;#xBA54;&amp;#xD130;&amp;#xB85C; &amp;#xBC1B;&amp;#xC544;&amp;#xC11C; &amp;#xAD6C;&amp;#xCCB4;&amp;#xC801;&amp;#xC778; &amp;#xBE4C;&amp;#xB354;&amp;#xB97C; &amp;#xC0DD;&amp;#xC131;&amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;simpleStep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// 3. build()&amp;#xB97C; &amp;#xD638;&amp;#xCD9C;&amp;#xD558;&amp;#xC5EC; &amp;quot;simpleJob&amp;quot;&amp;#xC758; &amp;#xC774;&amp;#xB984;&amp;#xC744; &amp;#xAC00;&amp;#xC9C0;&amp;#xB294; Job&amp;#xC744; &amp;#xC0DD;&amp;#xC131;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;h4 class=&quot;mume-header&quot; id=&quot;11-jobinstance&quot;&gt;1.1 JobInstance&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xD558;&amp;#xB098;&amp;#xC758; Job&amp;#xC758; &amp;#xC2E4;&amp;#xD589; &amp;#xB2E8;&amp;#xC704;, JobExecution&amp;#xC744; &amp;#xC5EC;&amp;#xB7EC;&amp;#xAC1C; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xC74C;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;12-jobexecution&quot;&gt;1.2 JobExecution&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;JobInstance&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD55C; &amp;#xBC88; &amp;#xC2E4;&amp;#xD589;&amp;#xC744; &amp;#xB098;&amp;#xD0C0;&amp;#xB0B4;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;. Job &amp;#xC2E4;&amp;#xD589;&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C; JobInstance, &amp;#xC2E4;&amp;#xD589; &amp;#xC0C1;&amp;#xD0DC;, &amp;#xC2DC;&amp;#xC791; &amp;#xC2DC;&amp;#xAC04;, &amp;#xC885;&amp;#xB8CC; &amp;#xC2DC;&amp;#xAC04;, &amp;#xC2E4;&amp;#xD328; &amp;#xBA54;&amp;#xC138;&amp;#xC9C0; &amp;#xB4F1; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xC74C;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;13-jobparameter&quot;&gt;1.3 JobParameter&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;https://docs.spring.io/spring-batch/4.1.x/reference/html/images/job-stereotypes-parameters.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Job&amp;#xC774; &amp;#xC2E4;&amp;#xD589;&amp;#xB420; &amp;#xB584; &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xC778;&amp;#xC790;&amp;#xB97C; Map &amp;#xD0C0;&amp;#xC785;&amp;#xC73C;&amp;#xB85C; &amp;#xC800;&amp;#xC7A5;&amp;#xD558;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;. JobInstance&amp;#xC640; 1:1 &amp;#xAD00;&amp;#xACC4;&amp;#xC774;&amp;#xBA70;, &amp;#xC0AC;&amp;#xC6A9; &amp;#xD560; &amp;#xC218; &amp;#xC788;&amp;#xB294; &amp;#xB370;&amp;#xC774;&amp;#xD130; &amp;#xD0C0;&amp;#xC785;&amp;#xC740; Long, String, Date, Double &amp;#xB4F1;&amp;#xC774; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;li&gt;JobInstance&amp;#xB97C; &amp;#xAD6C;&amp;#xBD84;&amp;#xD558;&amp;#xB294; &amp;#xAE30;&amp;#xC900;&amp;#xC73C;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;&amp;#xB420; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JobInstance = Job + identifying JobParameters&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;2-step&quot;&gt;2. Step&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC2E4;&amp;#xC9C8;&amp;#xC801;&amp;#xC778; Job &amp;#xCC98;&amp;#xB9AC;&amp;#xB97C; &amp;#xB2F4;&amp;#xB2F9;. &amp;#xD544;&amp;#xC694;&amp;#xD55C; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xB3C4;&amp;#xBA54;&amp;#xC778; &amp;#xAC1D;&amp;#xCCB4;&amp;#xC774;&amp;#xBA70; &amp;#xBAA8;&amp;#xB4E0; Job&amp;#xC740; &amp;#xC5EC;&amp;#xB7EC; &amp;#xAC1C;&amp;#xC758; Step&amp;#xC744; &amp;#xAC00;&amp;#xC9C8; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class=&quot;mume-header&quot; id=&quot;21-stepexecution&quot;&gt;2.1 StepExecution&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Job&amp;#xC5D0; JobExecution&amp;#xC774; &amp;#xC788;&amp;#xB4EF;&amp;#xC774;, Step&amp;#xC5D0;&amp;#xB3C4; &amp;#xC774;&amp;#xC5D0; &amp;#xB300;&amp;#xC751;&amp;#xD558;&amp;#xB294; StepExecution&amp;#xC774; &amp;#xC874;&amp;#xC7AC;&amp;#xD55C;&amp;#xB2E4;. &amp;#xD574;&amp;#xB2F9; Step&amp;#xC758; &amp;#xC2E4;&amp;#xD589; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;3-jobrepository&quot;&gt;3. JobRepository&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JobRepository&amp;#xB294; &amp;#xBC30;&amp;#xCE58; &amp;#xCC98;&amp;#xB9AC; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB85C;, Job&amp;#xC758; &amp;#xC2E4;&amp;#xD589; &amp;#xD69F;&amp;#xC218; &amp;#xBC0F; &amp;#xC2DC;&amp;#xAC04; &amp;#xC815;&amp;#xBCF4; &amp;#xB4F1;&amp;#xC758; &amp;#xBA54;&amp;#xD0C0; &amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xB2E4;. Step&amp;#xC758; &amp;#xC2E4;&amp;#xD589;&amp;#xC815;&amp;#xBCF4;&amp;#xB97C; &amp;#xB2F4;&amp;#xACE0; &amp;#xC788;&amp;#xB294; StepExecution&amp;#xB3C4; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xC73C;&amp;#xBA70;, &amp;#xC804;&amp;#xCCB4; &amp;#xBA54;&amp;#xD0C0; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xAC00;&amp;#xC9C0;&amp;#xACE0; &amp;#xC788;&amp;#xB294; &amp;#xAC1D;&amp;#xCCB4;&amp;#xB77C;&amp;#xACE0; &amp;#xC0DD;&amp;#xAC01;&amp;#xD558;&amp;#xBA74; &amp;#xB41C;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;4-joblauncher&quot;&gt;4. JobLauncher&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Job, JobParameter&amp;#xC640; &amp;#xD568;&amp;#xAED8; &amp;#xBC30;&amp;#xCE58;&amp;#xB97C; &amp;#xC2DC;&amp;#xC791;&amp;#xD558;&amp;#xB294; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB85C; &amp;#xC0AC;&amp;#xC6A9;. &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xC758; &amp;#xB9E4;&amp;#xC18C;&amp;#xB4DC;&amp;#xB294; &lt;code&gt;run()&lt;/code&gt;&amp;#xB9CC; &amp;#xC874;&amp;#xC7AC;&amp;#xD568;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;5-itemreader&quot;&gt;5. ItemReader&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Step&amp;#xC5D0;&amp;#xC11C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC77D;&amp;#xC5B4;&amp;#xC624;&amp;#xB294; &amp;#xC5ED;&amp;#xD560;&amp;#xC744; &amp;#xC218;&amp;#xD589;. FILE, DB, QUEUE &amp;#xB4F1;&amp;#xC5D0;&amp;#xC11C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC77D;&amp;#xC5B4; &amp;#xC62C; &amp;#xC218; &amp;#xC788;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;6-itemprocessor&quot;&gt;6. ItemProcessor&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC77D;&amp;#xC5B4;&amp;#xC628; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD558;&amp;#xB294; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;. Input&amp;#xACFC; Output&amp;#xC5D0; &amp;#xB300;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785; &amp;#xBA85;&amp;#xC2DC;&amp;#xAC00; &amp;#xAC00;&amp;#xB2A5;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;mume-header&quot; id=&quot;7-itemwriter&quot;&gt;7. ItemWriter&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#xC774;&amp;#xC804; &amp;#xB2E8;&amp;#xACC4;&amp;#xC5D0;&amp;#xC11C; &amp;#xCC98;&amp;#xB9AC;&amp;#xD55C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xC800;&amp;#xC7A5;&amp;#xD558;&amp;#xB294; &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;. List &amp;#xC778;&amp;#xD130;&amp;#xD398;&amp;#xC774;&amp;#xC2A4;&amp;#xB97C; &amp;#xD1B5;&amp;#xD558;&amp;#xC5EC; &amp;#xC9C0;&amp;#xC815;&amp;#xD55C; &amp;#xD0C0;&amp;#xC785;&amp;#xC758; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC544;&amp;#xC624;&amp;#xBA70; CHUNK &amp;#xB2E8;&amp;#xC704;&amp;#xB85C; &amp;#xB370;&amp;#xC774;&amp;#xD130;&amp;#xB97C; &amp;#xBC1B;&amp;#xC544;&amp;#xC628;&amp;#xB2E4;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;mume-header&quot; id=&quot;%EC%B0%B8%EA%B3%A0%EC%9E%90%EB%A3%8C&quot;&gt;&amp;#xCC38;&amp;#xACE0;&amp;#xC790;&amp;#xB8CC;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://book.naver.com/bookdb/book_detail.nhn?bid=14031681&quot;&gt;&amp;#xCC98;&amp;#xC74C; &amp;#xBC30;&amp;#xC6B0;&amp;#xB294; &amp;#xC2A4;&amp;#xD504;&amp;#xB9C1; &amp;#xBD80;&amp;#xD2B8; 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-batch/4.1.x/reference/html/index.html&quot;&gt;Spring Batch - Reference Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      &lt;/div&gt;
      
      
    
    
    
    
    
    
    
    
  
    &lt;/body&gt;&lt;/html&gt;</description>
      <category>Programing/Spring</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/124</guid>
      <comments>https://stylishc.tistory.com/124#entry124comment</comments>
      <pubDate>Tue, 1 Jan 2019 21:50:57 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 프로토타입 &amp;amp;&amp;amp; 프로토타입 체이닝</title>
      <link>https://stylishc.tistory.com/122</link>
      <description>  
      &lt;meta charset=&quot;utf-8&quot;&gt;
      &lt;title&gt;prototype&lt;/title&gt;
      &lt;style&gt;.markdown-preview-enhanced pre, .markdown-preview-enhanced .host { color: rgb(171, 178, 191); background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced pre .line.cursor-line, .markdown-preview-enhanced .host .line.cursor-line { background-color: rgba(153, 187, 255, 0.0392157); }
.markdown-preview-enhanced pre .invisible, .markdown-preview-enhanced .host .invisible { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .cursor, .markdown-preview-enhanced .host .cursor { border-left-width: 2px; border-left-style: solid; border-left-color: rgb(82, 139, 255); }
.markdown-preview-enhanced pre .selection .region, .markdown-preview-enhanced .host .selection .region { background-color: rgb(62, 68, 81); }
.markdown-preview-enhanced pre .bracket-matcher .region, .markdown-preview-enhanced .host .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(82, 139, 255); box-sizing: border-box; }
.markdown-preview-enhanced pre .invisible-character, .markdown-preview-enhanced .host .invisible-character { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .indent-guide, .markdown-preview-enhanced .host .indent-guide { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .wrap-guide, .markdown-preview-enhanced .host .wrap-guide { background-color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .gutter .line-number, .markdown-preview-enhanced .host .gutter .line-number { color: rgb(99, 109, 131); -webkit-font-smoothing: antialiased; }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line, .markdown-preview-enhanced .host .gutter .line-number.cursor-line { color: rgb(171, 178, 191); background-color: rgb(44, 49, 58); }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .host .gutter .line-number.cursor-line-no-selection { background-color: transparent; }
.markdown-preview-enhanced pre .gutter .line-number .icon-right, .markdown-preview-enhanced .host .gutter .line-number .icon-right { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before { bottom: -3px; }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed::after, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after { content: &quot;&quot;; position: absolute; left: 0px; bottom: 0px; width: 25px; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgba(224, 82, 82, 0.498039); pointer-events: none; }
.markdown-preview-enhanced pre .gutter .line-number.folded, .markdown-preview-enhanced .host .gutter .line-number.folded, .markdown-preview-enhanced pre .gutter .line-number::after, .markdown-preview-enhanced .host .gutter .line-number::after, .markdown-preview-enhanced pre .fold-marker::after, .markdown-preview-enhanced .host .fold-marker::after { color: rgb(171, 178, 191); }
.markdown-preview-enhanced { font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; font-size: 16px; line-height: 1.6; color: rgb(171, 178, 191); overflow: auto; margin: 10px 13px; padding: 2em; background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced .mermaid .label { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .node rect, .markdown-preview-enhanced .node circle, .markdown-preview-enhanced .node ellipse, .markdown-preview-enhanced .node polygon { fill: rgb(236, 236, 255); stroke: rgb(204, 204, 255); stroke-width: 1px; }
.markdown-preview-enhanced .edgePath .path { stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .edgeLabel { background-color: rgb(232, 232, 232); }
.markdown-preview-enhanced .cluster rect { fill: rgb(255, 255, 222) !important; rx: 4px !important; stroke: rgb(170, 170, 51) !important; stroke-width: 1px !important; }
.markdown-preview-enhanced .cluster text { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .actor { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced text.actor { fill: black; stroke: none; }
.markdown-preview-enhanced .actor-line { stroke: grey; }
.markdown-preview-enhanced .messageLine0 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .messageLine1 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced #arrowhead { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced #crosshead path { fill: rgb(51, 51, 51) !important; stroke: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced .messageText { fill: rgb(51, 51, 51); stroke: none; }
.markdown-preview-enhanced .labelBox { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced .labelText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopLine { stroke-width: 2px; stroke: rgb(204, 204, 255); }
.markdown-preview-enhanced .note { stroke: rgb(170, 170, 51); fill: rgb(255, 245, 173); }
.markdown-preview-enhanced .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced .section { stroke: none; opacity: 0.2; }
.markdown-preview-enhanced .section0 { fill: rgba(102, 102, 255, 0.490196); }
.markdown-preview-enhanced .section2 { fill: rgb(255, 244, 0); }
.markdown-preview-enhanced .section1, .markdown-preview-enhanced .section3 { fill: white; opacity: 0.2; }
.markdown-preview-enhanced .sectionTitle0 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle1 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle2 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle3 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle { text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; }
.markdown-preview-enhanced .grid path { stroke-width: 0px; }
.markdown-preview-enhanced .today { fill: none; stroke: red; stroke-width: 2px; }
.markdown-preview-enhanced .task { stroke-width: 2px; }
.markdown-preview-enhanced .taskText { text-anchor: middle; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideRight { fill: black; text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideLeft { fill: black; text-anchor: end; font-size: 11px; }
.markdown-preview-enhanced .taskText0, .markdown-preview-enhanced .taskText1, .markdown-preview-enhanced .taskText2, .markdown-preview-enhanced .taskText3 { fill: white; }
.markdown-preview-enhanced .task0, .markdown-preview-enhanced .task1, .markdown-preview-enhanced .task2, .markdown-preview-enhanced .task3 { fill: rgb(138, 144, 221); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .taskTextOutside0, .markdown-preview-enhanced .taskTextOutside2 { fill: black; }
.markdown-preview-enhanced .taskTextOutside1, .markdown-preview-enhanced .taskTextOutside3 { fill: black; }
.markdown-preview-enhanced .active0, .markdown-preview-enhanced .active1, .markdown-preview-enhanced .active2, .markdown-preview-enhanced .active3 { fill: rgb(191, 199, 255); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .activeText0, .markdown-preview-enhanced .activeText1, .markdown-preview-enhanced .activeText2, .markdown-preview-enhanced .activeText3 { fill: black !important; }
.markdown-preview-enhanced .done0, .markdown-preview-enhanced .done1, .markdown-preview-enhanced .done2, .markdown-preview-enhanced .done3 { stroke: grey; fill: lightgrey; stroke-width: 2px; }
.markdown-preview-enhanced .doneText0, .markdown-preview-enhanced .doneText1, .markdown-preview-enhanced .doneText2, .markdown-preview-enhanced .doneText3 { fill: black !important; }
.markdown-preview-enhanced .crit0, .markdown-preview-enhanced .crit1, .markdown-preview-enhanced .crit2, .markdown-preview-enhanced .crit3 { stroke: rgb(255, 136, 136); fill: red; stroke-width: 2px; }
.markdown-preview-enhanced .activeCrit0, .markdown-preview-enhanced .activeCrit1, .markdown-preview-enhanced .activeCrit2, .markdown-preview-enhanced .activeCrit3 { stroke: rgb(255, 136, 136); fill: rgb(191, 199, 255); stroke-width: 2px; }
.markdown-preview-enhanced .doneCrit0, .markdown-preview-enhanced .doneCrit1, .markdown-preview-enhanced .doneCrit2, .markdown-preview-enhanced .doneCrit3 { stroke: rgb(255, 136, 136); fill: lightgrey; stroke-width: 2px; cursor: pointer; shape-rendering: crispEdges; }
.markdown-preview-enhanced .doneCritText0, .markdown-preview-enhanced .doneCritText1, .markdown-preview-enhanced .doneCritText2, .markdown-preview-enhanced .doneCritText3 { fill: black !important; }
.markdown-preview-enhanced .activeCritText0, .markdown-preview-enhanced .activeCritText1, .markdown-preview-enhanced .activeCritText2, .markdown-preview-enhanced .activeCritText3 { fill: black !important; }
.markdown-preview-enhanced .titleText { text-anchor: middle; font-size: 18px; fill: black; }
.markdown-preview-enhanced .node text { font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: 'trebuchet ms', verdana, arial; font-size: 12px; border: 1px solid rgb(170, 170, 51); border-radius: 2px; pointer-events: none; z-index: 100; background: rgb(255, 255, 222); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { color: rgb(85, 85, 85); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced[is=&quot;space-pen-div&quot;] { width: 100%; margin: 0px; z-index: 999; overflow: scroll; font-size: 16px; display: block; box-sizing: border-box; position: absolute; }
.markdown-preview-enhanced h1, .markdown-preview-enhanced h2, .markdown-preview-enhanced h3, .markdown-preview-enhanced h4, .markdown-preview-enhanced h5, .markdown-preview-enhanced h6 { line-height: 1.2; margin-top: 1em; margin-bottom: 16px; color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h3, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h4, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h5, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h6 { color: rgb(85, 85, 85); }
.markdown-preview-enhanced h1 { font-size: 2.4em; font-weight: 300; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h2 { font-size: 1.8em; font-weight: 400; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h3 { font-size: 1.5em; font-weight: 500; }
.markdown-preview-enhanced h4 { font-size: 1.2em; font-weight: 600; }
.markdown-preview-enhanced h5 { font-size: 1.1em; font-weight: 600; }
.markdown-preview-enhanced h6 { font-size: 1em; font-weight: 600; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2 { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(231, 231, 231); }
.markdown-preview-enhanced strong { color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] strong { color: rgb(85, 85, 85); }
.markdown-preview-enhanced del { color: rgb(124, 135, 156); }
.markdown-preview-enhanced a:not([href]) { color: inherit; text-decoration: none; }
.markdown-preview-enhanced a { color: rgb(0, 136, 204); text-decoration: none; }
.markdown-preview-enhanced a:hover { color: rgb(0, 80, 163); text-decoration: none; }
.markdown-preview-enhanced img { max-width: 100%; }
.markdown-preview-enhanced &gt; p { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced &gt; ul, .markdown-preview-enhanced &gt; ol { margin-bottom: 16px; }
.markdown-preview-enhanced ul, .markdown-preview-enhanced ol { padding-left: 2em; }
.markdown-preview-enhanced ul.no-list, .markdown-preview-enhanced ol.no-list { padding: 0px; list-style-type: none; }
.markdown-preview-enhanced ul ul, .markdown-preview-enhanced ul ol, .markdown-preview-enhanced ol ol, .markdown-preview-enhanced ol ul { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced li { margin-bottom: 0px; }
.markdown-preview-enhanced li.task-list-item { list-style: none; }
.markdown-preview-enhanced li &gt; p { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced .task-list-item-checkbox { margin: 0px 0.2em 0.25em -1.6em; vertical-align: middle; }
.markdown-preview-enhanced .task-list-item-checkbox:hover { cursor: pointer; }
.markdown-preview-enhanced blockquote { margin: 16px 0px; font-size: inherit; padding: 0px 15px; color: rgb(124, 135, 156); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(75, 83, 98); }
.markdown-preview-enhanced blockquote &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced blockquote &gt; :last-child { margin-bottom: 0px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] blockquote { color: rgb(119, 119, 119); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(221, 221, 221); }
.markdown-preview-enhanced hr { height: 4px; margin: 32px 0px; border: 0px none; background-color: rgb(75, 83, 98); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] hr { background-color: rgb(231, 231, 231); }
.markdown-preview-enhanced table { margin: 10px 0px 15px; border-collapse: collapse; }
.markdown-preview-enhanced table th { font-weight: bold; color: rgb(255, 255, 255); }
.markdown-preview-enhanced table td, .markdown-preview-enhanced table th { border: 1px solid rgb(75, 83, 98); padding: 5px 10px; }
.markdown-preview-enhanced table th { padding: 5px 10px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { color: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] td, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { border: 1px solid rgb(221, 221, 221); }
.markdown-preview-enhanced code { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: rgb(255, 255, 255); font-size: 0.85em !important; background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] code { color: inherit; background-color: rgba(0, 0, 0, 0.0392157); }
.markdown-preview-enhanced pre &gt; code { padding: 0px; margin: 0px; word-break: normal; white-space: pre; border: 0px; font-size: 0.85em !important; background: transparent; }
.markdown-preview-enhanced .highlight { margin-bottom: 16px; }
.markdown-preview-enhanced .highlight pre, .markdown-preview-enhanced pre { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; padding: 16px; overflow: auto; line-height: 1.45; color: rgb(171, 178, 191); border: rgb(75, 83, 98); border-radius: 3px; font-size: 0.85em !important; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced .highlight pre { margin-bottom: 0px; word-break: normal; }
.markdown-preview-enhanced pre { word-wrap: break-word; }
.markdown-preview-enhanced pre .section { opacity: 1; }
.markdown-preview-enhanced pre code, .markdown-preview-enhanced pre tt { display: inline; max-width: initial; padding: 0px; margin: 0px; overflow: initial; line-height: inherit; word-wrap: normal; border: 0px; background-color: transparent; }
.markdown-preview-enhanced pre code::before, .markdown-preview-enhanced pre tt::before, .markdown-preview-enhanced pre code::after, .markdown-preview-enhanced pre tt::after { content: normal; }
.markdown-preview-enhanced p, .markdown-preview-enhanced blockquote, .markdown-preview-enhanced ul, .markdown-preview-enhanced ol, .markdown-preview-enhanced dl, .markdown-preview-enhanced pre { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced pre.editor-colors { margin: 16px 0px; padding: 1em; font-size: 0.92em; border-radius: 3px; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced kbd { color: rgb(255, 255, 255); border-width: 1px 1px 2px; border-style: solid; border-color: rgb(75, 83, 98) rgb(75, 83, 98) rgb(62, 68, 81); background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] kbd { color: rgb(85, 85, 85); border-style: solid; border-width: 1px; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(187, 187, 187); border-radius: 3px; box-shadow: rgb(187, 187, 187) 0px -1px 0px inset; background-color: rgb(252, 252, 252); }
.markdown-preview-enhanced .pagebreak, .markdown-preview-enhanced .newpage { page-break-before: always; }
.markdown-preview-enhanced .mermaid { margin-bottom: 16px; }
.markdown-preview-enhanced .mermaid .edgePath .path { stroke: rgb(255, 255, 255); }
.markdown-preview-enhanced .mermaid .edgePath marker path { fill: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid line, .markdown-preview-enhanced .mermaid marker { stroke: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid .messageText { fill: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid .edgePath .path { stroke: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid marker path { fill: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] line, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] marker { stroke: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .messageText { fill: rgb(85, 85, 85); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors, .markdown-preview-enhanced .github-syntax-theme .host { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter, .markdown-preview-enhanced .github-syntax-theme .host .gutter { color: rgb(179, 179, 179); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77); background-color: rgb(245, 245, 245); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .wrap-guide, .markdown-preview-enhanced .github-syntax-theme .host .wrap-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .indent-guide, .markdown-preview-enhanced .github-syntax-theme .host .indent-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .invisible-character, .markdown-preview-enhanced .github-syntax-theme .host .invisible-character { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker .region { border: rgb(0, 0, 0); background-color: transparent; }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker.current-result .region { border: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .cursor { border-color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039); }
.markdown-preview-enhanced .github-syntax-theme .comment, .markdown-preview-enhanced .github-syntax-theme .punctuation.comment { color: rgb(176, 176, 176); }
.markdown-preview-enhanced .github-syntax-theme .string, .markdown-preview-enhanced .github-syntax-theme .string .constant.character.escape { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.language { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.character, .markdown-preview-enhanced .github-syntax-theme .constant.other.rgb-value { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.inherited-class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.any.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.begin.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.end.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.operator { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .storage { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .storage.type { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.function { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.constant { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.type, .markdown-preview-enhanced .github-syntax-theme .support.class, .markdown-preview-enhanced .github-syntax-theme .meta.property-name.scss { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.other.variable { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .invalid, .markdown-preview-enhanced .github-syntax-theme .invalid.illegal { color: rgb(248, 248, 248); background-color: rgb(181, 42, 29); }
.markdown-preview-enhanced .github-syntax-theme .invalid.deprecated { color: rgb(181, 42, 29); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.filename.find-in-files { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .punctuation.definition.entity, .markdown-preview-enhanced .github-syntax-theme .punctuation.terminator.rule.scss { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .source.css .meta.value, .markdown-preview-enhanced .github-syntax-theme .source.css .support.constant, .markdown-preview-enhanced .github-syntax-theme .source.css .support.function { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.constant.property-value, .markdown-preview-enhanced .github-syntax-theme .source.scss .support.function, .markdown-preview-enhanced .github-syntax-theme .meta.property-value.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .variable, .markdown-preview-enhanced .github-syntax-theme .source.scss .variable, .markdown-preview-enhanced .github-syntax-theme .variable.interpolation.scss, .markdown-preview-enhanced .github-syntax-theme .source.scss .meta.set.variable { color: rgb(222, 104, 173); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control.else.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.if.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.content.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.unit { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.important { color: rgb(235, 69, 53); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag.reference.scss { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.type.new.js { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .variable.language.js { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .variable.parameter.function { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.js .meta.function .entity.name.function, .markdown-preview-enhanced .github-syntax-theme .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .source.php .entity.name.type.class { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.heading.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.italic.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.bold.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.end.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.metadata.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.link.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.raw.markdown { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.section.function.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .punctuation, .markdown-preview-enhanced .github-syntax-theme .meta.method-call, .markdown-preview-enhanced .github-syntax-theme .meta.method { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.separator { color: rgb(179, 179, 179); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.image { color: rgb(65, 131, 196); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.underline.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .constant.other.reference { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.list { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold { font-weight: bold; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold .markup.italic { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic .markup.bold { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgba(240, 192, 0, 0.8); z-index: 100; background-color: rgba(255, 214, 51, 0.0980392); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.html.angular, .markdown-preview-enhanced .github-syntax-theme .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter { color: rgb(179, 179, 179) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77) !important; background-color: rgb(245, 245, 245) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .wrap-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .wrap-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .indent-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .indent-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .invisible-character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .invisible-character { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker .region { border: rgb(0, 0, 0) !important; background-color: transparent !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker.current-result .region { border: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .cursor { border-color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .comment, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.comment { color: rgb(176, 176, 176) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string .constant.character.escape { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.language { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.other.rgb-value { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.inherited-class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.any.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.begin.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.end.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.operator { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage.type { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.function { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.type, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-name.scss { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.other.variable { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.illegal { color: rgb(248, 248, 248) !important; background-color: rgb(181, 42, 29) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.deprecated { color: rgb(181, 42, 29) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.filename.find-in-files { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .punctuation.definition.entity, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.terminator.rule.scss { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .meta.value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.constant, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.function { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant.property-value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .support.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-value.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.interpolation.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .meta.set.variable { color: rgb(222, 104, 173) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.else.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.if.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.content.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.unit { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.important { color: rgb(235, 69, 53) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag.reference.scss { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.type.new.js { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.language.js { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.parameter.function { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .meta.function .entity.name.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.php .entity.name.type.class { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.heading.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.italic.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.bold.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.end.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.metadata.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.link.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.raw.markdown { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.section.function.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method-call, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.separator { color: rgb(179, 179, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.image { color: rgb(65, 131, 196) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.underline.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .constant.other.reference { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.list { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold { font-weight: bold !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold .markup.italic { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic .markup.bold { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .bracket-matcher .region { border-bottom-width: 1px !important; border-bottom-style: solid !important; border-bottom-color: rgba(240, 192, 0, 0.8) !important; z-index: 100 !important; background-color: rgba(255, 214, 51, 0.0980392) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.html.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(171, 178, 191); overflow: auto; background-color: rgb(40, 44, 52); }
.markdown-preview:not([data-use-github-style]) &gt; :first-child { margin-top: 0px; }
.markdown-preview:not([data-use-github-style]) h1, .markdown-preview:not([data-use-github-style]) h2, .markdown-preview:not([data-use-github-style]) h3, .markdown-preview:not([data-use-github-style]) h4, .markdown-preview:not([data-use-github-style]) h5, .markdown-preview:not([data-use-github-style]) h6 { line-height: 1.2; margin-top: 1.5em; margin-bottom: 0.5em; color: rgb(255, 255, 255); }
.markdown-preview:not([data-use-github-style]) h1 { font-size: 2.4em; font-weight: 300; }
.markdown-preview:not([data-use-github-style]) h2 { font-size: 1.8em; font-weight: 400; }
.markdown-preview:not([data-use-github-style]) h3 { font-size: 1.5em; font-weight: 500; }
.markdown-preview:not([data-use-github-style]) h4 { font-size: 1.2em; font-weight: 600; }
.markdown-preview:not([data-use-github-style]) h5 { font-size: 1.1em; font-weight: 600; }
.markdown-preview:not([data-use-github-style]) h6 { font-size: 1em; font-weight: 600; }
.markdown-preview:not([data-use-github-style]) strong { color: rgb(255, 255, 255); }
.markdown-preview:not([data-use-github-style]) del { color: rgb(124, 135, 156); }
.markdown-preview:not([data-use-github-style]) a, .markdown-preview:not([data-use-github-style]) a code { color: rgb(82, 139, 255); }
.markdown-preview:not([data-use-github-style]) img { max-width: 100%; }
.markdown-preview:not([data-use-github-style]) &gt; p { margin-top: 0px; margin-bottom: 1.5em; }
.markdown-preview:not([data-use-github-style]) &gt; ul, .markdown-preview:not([data-use-github-style]) &gt; ol { margin-bottom: 1.5em; }
.markdown-preview:not([data-use-github-style]) blockquote { margin: 1.5em 0px; font-size: inherit; color: rgb(124, 135, 156); border-color: rgb(75, 83, 98); border-width: 4px; }
.markdown-preview:not([data-use-github-style]) hr { margin: 3em 0px; border-top-width: 2px; border-top-style: dashed; border-top-color: rgb(75, 83, 98); background: none; }
.markdown-preview:not([data-use-github-style]) table { margin: 1.5em 0px; }
.markdown-preview:not([data-use-github-style]) th { color: rgb(255, 255, 255); }
.markdown-preview:not([data-use-github-style]) th, .markdown-preview:not([data-use-github-style]) td { padding: 0.66em 1em; border: 1px solid rgb(75, 83, 98); }
.markdown-preview:not([data-use-github-style]) code { color: rgb(255, 255, 255); background-color: rgb(58, 63, 75); }
.markdown-preview:not([data-use-github-style]) pre.editor-colors { margin: 1.5em 0px; padding: 1em; font-size: 0.92em; border-radius: 3px; background-color: rgb(49, 54, 63); }
.markdown-preview:not([data-use-github-style]) kbd { color: rgb(255, 255, 255); border-width: 1px 1px 2px; border-style: solid; border-color: rgb(75, 83, 98) rgb(75, 83, 98) rgb(62, 68, 81); background-color: rgb(58, 63, 75); }
.markdown-preview[data-use-github-style] { font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; line-height: 1.6; word-wrap: break-word; padding: 30px; font-size: 16px; color: rgb(51, 51, 51); overflow: scroll; background-color: rgb(255, 255, 255); }
.markdown-preview[data-use-github-style] &gt; :first-child { margin-top: 0px !important; }
.markdown-preview[data-use-github-style] &gt; :last-child { margin-bottom: 0px !important; }
.markdown-preview[data-use-github-style] a:not([href]) { color: inherit; text-decoration: none; }
.markdown-preview[data-use-github-style] .absent { color: rgb(204, 0, 0); }
.markdown-preview[data-use-github-style] .anchor { position: absolute; top: 0px; left: 0px; display: block; padding-right: 6px; padding-left: 30px; margin-left: -30px; }
.markdown-preview[data-use-github-style] .anchor:focus { outline: none; }
.markdown-preview[data-use-github-style] h1, .markdown-preview[data-use-github-style] h2, .markdown-preview[data-use-github-style] h3, .markdown-preview[data-use-github-style] h4, .markdown-preview[data-use-github-style] h5, .markdown-preview[data-use-github-style] h6 { position: relative; margin-top: 1em; margin-bottom: 16px; font-weight: bold; line-height: 1.4; }
.markdown-preview[data-use-github-style] h1 .octicon-link, .markdown-preview[data-use-github-style] h2 .octicon-link, .markdown-preview[data-use-github-style] h3 .octicon-link, .markdown-preview[data-use-github-style] h4 .octicon-link, .markdown-preview[data-use-github-style] h5 .octicon-link, .markdown-preview[data-use-github-style] h6 .octicon-link { display: none; color: rgb(0, 0, 0); vertical-align: middle; }
.markdown-preview[data-use-github-style] h1:hover .anchor, .markdown-preview[data-use-github-style] h2:hover .anchor, .markdown-preview[data-use-github-style] h3:hover .anchor, .markdown-preview[data-use-github-style] h4:hover .anchor, .markdown-preview[data-use-github-style] h5:hover .anchor, .markdown-preview[data-use-github-style] h6:hover .anchor { padding-left: 8px; margin-left: -30px; text-decoration: none; }
.markdown-preview[data-use-github-style] h1:hover .anchor .octicon-link, .markdown-preview[data-use-github-style] h2:hover .anchor .octicon-link, .markdown-preview[data-use-github-style] h3:hover .anchor .octicon-link, .markdown-preview[data-use-github-style] h4:hover .anchor .octicon-link, .markdown-preview[data-use-github-style] h5:hover .anchor .octicon-link, .markdown-preview[data-use-github-style] h6:hover .anchor .octicon-link { display: inline-block; }
.markdown-preview[data-use-github-style] h1 tt, .markdown-preview[data-use-github-style] h2 tt, .markdown-preview[data-use-github-style] h3 tt, .markdown-preview[data-use-github-style] h4 tt, .markdown-preview[data-use-github-style] h5 tt, .markdown-preview[data-use-github-style] h6 tt, .markdown-preview[data-use-github-style] h1 code, .markdown-preview[data-use-github-style] h2 code, .markdown-preview[data-use-github-style] h3 code, .markdown-preview[data-use-github-style] h4 code, .markdown-preview[data-use-github-style] h5 code, .markdown-preview[data-use-github-style] h6 code { font-size: inherit; }
.markdown-preview[data-use-github-style] h1 { padding-bottom: 0.3em; font-size: 2.25em; line-height: 1.2; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); }
.markdown-preview[data-use-github-style] h1 .anchor { line-height: 1; }
.markdown-preview[data-use-github-style] h2 { padding-bottom: 0.3em; font-size: 1.75em; line-height: 1.225; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); }
.markdown-preview[data-use-github-style] h2 .anchor { line-height: 1; }
.markdown-preview[data-use-github-style] h3 { font-size: 1.5em; line-height: 1.43; }
.markdown-preview[data-use-github-style] h3 .anchor { line-height: 1.2; }
.markdown-preview[data-use-github-style] h4 { font-size: 1.25em; }
.markdown-preview[data-use-github-style] h4 .anchor { line-height: 1.2; }
.markdown-preview[data-use-github-style] h5 { font-size: 1em; }
.markdown-preview[data-use-github-style] h5 .anchor { line-height: 1.1; }
.markdown-preview[data-use-github-style] h6 { font-size: 1em; color: rgb(119, 119, 119); }
.markdown-preview[data-use-github-style] h6 .anchor { line-height: 1.1; }
.markdown-preview[data-use-github-style] p, .markdown-preview[data-use-github-style] blockquote, .markdown-preview[data-use-github-style] ul, .markdown-preview[data-use-github-style] ol, .markdown-preview[data-use-github-style] dl, .markdown-preview[data-use-github-style] table, .markdown-preview[data-use-github-style] pre { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview[data-use-github-style] hr { height: 4px; padding: 0px; margin: 16px 0px; border: 0px none; background-color: rgb(231, 231, 231); }
.markdown-preview[data-use-github-style] ul, .markdown-preview[data-use-github-style] ol { padding-left: 2em; }
.markdown-preview[data-use-github-style] ul.no-list, .markdown-preview[data-use-github-style] ol.no-list { padding: 0px; list-style-type: none; }
.markdown-preview[data-use-github-style] ul ul, .markdown-preview[data-use-github-style] ul ol, .markdown-preview[data-use-github-style] ol ol, .markdown-preview[data-use-github-style] ol ul { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview[data-use-github-style] li &gt; p { margin-top: 16px; }
.markdown-preview[data-use-github-style] dl { padding: 0px; }
.markdown-preview[data-use-github-style] dl dt { padding: 0px; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: bold; }
.markdown-preview[data-use-github-style] dl dd { padding: 0px 16px; margin-bottom: 16px; }
.markdown-preview[data-use-github-style] blockquote { padding: 0px 15px; color: rgb(119, 119, 119); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(221, 221, 221); }
.markdown-preview[data-use-github-style] blockquote &gt; :first-child { margin-top: 0px; }
.markdown-preview[data-use-github-style] blockquote &gt; :last-child { margin-bottom: 0px; }
.markdown-preview[data-use-github-style] table { display: block; width: 100%; overflow: auto; word-break: keep-all; }
.markdown-preview[data-use-github-style] table th { font-weight: bold; }
.markdown-preview[data-use-github-style] table th, .markdown-preview[data-use-github-style] table td { padding: 6px 13px; border: 1px solid rgb(221, 221, 221); }
.markdown-preview[data-use-github-style] table tr { border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(255, 255, 255); }
.markdown-preview[data-use-github-style] table tr:nth-child(2n) { background-color: rgb(248, 248, 248); }
.markdown-preview[data-use-github-style] img { max-width: 100%; box-sizing: border-box; }
.markdown-preview[data-use-github-style] .emoji { max-width: none; }
.markdown-preview[data-use-github-style] span.frame { display: block; overflow: hidden; }
.markdown-preview[data-use-github-style] span.frame &gt; span { display: block; float: left; width: auto; padding: 7px; margin: 13px 0px 0px; overflow: hidden; border: 1px solid rgb(221, 221, 221); }
.markdown-preview[data-use-github-style] span.frame span img { display: block; float: left; }
.markdown-preview[data-use-github-style] span.frame span span { display: block; padding: 5px 0px 0px; clear: both; color: rgb(51, 51, 51); }
.markdown-preview[data-use-github-style] span.align-center { display: block; overflow: hidden; clear: both; }
.markdown-preview[data-use-github-style] span.align-center &gt; span { display: block; margin: 13px auto 0px; overflow: hidden; text-align: center; }
.markdown-preview[data-use-github-style] span.align-center span img { margin: 0px auto; text-align: center; }
.markdown-preview[data-use-github-style] span.align-right { display: block; overflow: hidden; clear: both; }
.markdown-preview[data-use-github-style] span.align-right &gt; span { display: block; margin: 13px 0px 0px; overflow: hidden; text-align: right; }
.markdown-preview[data-use-github-style] span.align-right span img { margin: 0px; text-align: right; }
.markdown-preview[data-use-github-style] span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; }
.markdown-preview[data-use-github-style] span.float-left span { margin: 13px 0px 0px; }
.markdown-preview[data-use-github-style] span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; }
.markdown-preview[data-use-github-style] span.float-right &gt; span { display: block; margin: 13px auto 0px; overflow: hidden; text-align: right; }
.markdown-preview[data-use-github-style] code, .markdown-preview[data-use-github-style] tt { padding: 0.2em 0px; margin: 0px; font-size: 85%; border-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); }
.markdown-preview[data-use-github-style] code::before, .markdown-preview[data-use-github-style] tt::before, .markdown-preview[data-use-github-style] code::after, .markdown-preview[data-use-github-style] tt::after { letter-spacing: -0.2em; content: &quot; &quot;; }
.markdown-preview[data-use-github-style] code br, .markdown-preview[data-use-github-style] tt br { display: none; }
.markdown-preview[data-use-github-style] del code { text-decoration: inherit; }
.markdown-preview[data-use-github-style] pre &gt; code { padding: 0px; margin: 0px; font-size: 100%; word-break: normal; white-space: pre; border: 0px; background: transparent; }
.markdown-preview[data-use-github-style] .highlight { margin-bottom: 16px; }
.markdown-preview[data-use-github-style] .highlight pre, .markdown-preview[data-use-github-style] pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; border-radius: 3px; background-color: rgb(247, 247, 247); }
.markdown-preview[data-use-github-style] .highlight pre { margin-bottom: 0px; word-break: normal; }
.markdown-preview[data-use-github-style] pre { word-wrap: normal; }
.markdown-preview[data-use-github-style] pre code, .markdown-preview[data-use-github-style] pre tt { display: inline; max-width: initial; padding: 0px; margin: 0px; overflow: initial; line-height: inherit; word-wrap: normal; border: 0px; background-color: transparent; }
.markdown-preview[data-use-github-style] pre code::before, .markdown-preview[data-use-github-style] pre tt::before, .markdown-preview[data-use-github-style] pre code::after, .markdown-preview[data-use-github-style] pre tt::after { content: normal; }
.markdown-preview[data-use-github-style] kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: rgb(85, 85, 85); vertical-align: middle; border-style: solid; border-width: 1px; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(187, 187, 187); border-radius: 3px; box-shadow: rgb(187, 187, 187) 0px -1px 0px inset; background-color: rgb(252, 252, 252); }
.markdown-preview[data-use-github-style] a { color: rgb(51, 122, 183); }
.markdown-preview[data-use-github-style] code { color: inherit; }
.markdown-preview[data-use-github-style] pre.editor-colors { padding: 0.8em 1em; margin-bottom: 1em; font-size: 0.85em; border-radius: 4px; overflow: auto; }
.scrollbars-visible-always .markdown-preview pre.editor-colors::shadow .vertical-scrollbar, .scrollbars-visible-always .markdown-preview pre.editor-colors::shadow .horizontal-scrollbar { visibility: hidden; }
.scrollbars-visible-always .markdown-preview pre.editor-colors:hover::shadow .vertical-scrollbar, .scrollbars-visible-always .markdown-preview pre.editor-colors:hover::shadow .horizontal-scrollbar { visibility: visible; }
.bracket-matcher .region {
  border-bottom: 1px dotted lime;
  position: absolute;
}

pre.editor-colors,
.host {
  background-color: #282c34;
  color: #abb2bf;
}
pre.editor-colors .line.cursor-line,
.host .line.cursor-line {
  background-color: rgba(153, 187, 255, 0.04);
}
pre.editor-colors .invisible,
.host .invisible {
  color: #abb2bf;
}
pre.editor-colors .cursor,
.host .cursor {
  border-left: 2px solid #528bff;
}
pre.editor-colors .selection .region,
.host .selection .region {
  background-color: #3e4451;
}
pre.editor-colors .bracket-matcher .region,
.host .bracket-matcher .region {
  border-bottom: 1px solid #528bff;
  box-sizing: border-box;
}
pre.editor-colors .invisible-character,
.host .invisible-character {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .indent-guide,
.host .indent-guide {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .wrap-guide,
.host .wrap-guide {
  background-color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .gutter .line-number,
.host .gutter .line-number {
  color: #636d83;
  -webkit-font-smoothing: antialiased;
}
pre.editor-colors .gutter .line-number.cursor-line,
.host .gutter .line-number.cursor-line {
  color: #abb2bf;
  background-color: #2c313a;
}
pre.editor-colors .gutter .line-number.cursor-line-no-selection,
.host .gutter .line-number.cursor-line-no-selection {
  background-color: transparent;
}
pre.editor-colors .gutter .line-number .icon-right,
.host .gutter .line-number .icon-right {
  color: #abb2bf;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before {
  bottom: -3px;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed::after,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after {
  content: &quot;&quot;;
  position: absolute;
  left: 0px;
  bottom: 0px;
  width: 25px;
  border-bottom: 1px dotted rgba(224, 82, 82, 0.5);
  pointer-events: none;
}
pre.editor-colors .gutter .line-number.folded,
.host .gutter .line-number.folded,
pre.editor-colors .gutter .line-number:after,
.host .gutter .line-number:after,
pre.editor-colors .fold-marker:after,
.host .fold-marker:after {
  color: #abb2bf;
}
.comment {
  color: #5c6370;
  font-style: italic;
}
.comment .markup.link {
  color: #5c6370;
}
.entity.name.type {
  color: #e5c07b;
}
.entity.other.inherited-class {
  color: #98c379;
}
.keyword {
  color: #c678dd;
}
.keyword.control {
  color: #c678dd;
}
.keyword.operator {
  color: #abb2bf;
}
.keyword.other.special-method {
  color: #61afef;
}
.keyword.other.unit {
  color: #d19a66;
}
.storage {
  color: #c678dd;
}
.storage.type.annotation,
.storage.type.primitive {
  color: #c678dd;
}
.storage.modifier.package,
.storage.modifier.import {
  color: #abb2bf;
}
.constant {
  color: #d19a66;
}
.constant.variable {
  color: #d19a66;
}
.constant.character.escape {
  color: #56b6c2;
}
.constant.numeric {
  color: #d19a66;
}
.constant.other.color {
  color: #56b6c2;
}
.constant.other.symbol {
  color: #56b6c2;
}
.variable {
  color: #e06c75;
}
.variable.interpolation {
  color: #be5046;
}
.variable.parameter {
  color: #abb2bf;
}
.string {
  color: #98c379;
}
.string.regexp {
  color: #56b6c2;
}
.string.regexp .source.ruby.embedded {
  color: #e5c07b;
}
.string.other.link {
  color: #e06c75;
}
.punctuation.definition.comment {
  color: #5c6370;
}
.punctuation.definition.method-parameters,
.punctuation.definition.function-parameters,
.punctuation.definition.parameters,
.punctuation.definition.separator,
.punctuation.definition.seperator,
.punctuation.definition.array {
  color: #abb2bf;
}
.punctuation.definition.heading,
.punctuation.definition.identity {
  color: #61afef;
}
.punctuation.definition.bold {
  color: #e5c07b;
  font-weight: bold;
}
.punctuation.definition.italic {
  color: #c678dd;
  font-style: italic;
}
.punctuation.section.embedded {
  color: #be5046;
}
.punctuation.section.method,
.punctuation.section.class,
.punctuation.section.inner-class {
  color: #abb2bf;
}
.support.class {
  color: #e5c07b;
}
.support.type {
  color: #56b6c2;
}
.support.function {
  color: #56b6c2;
}
.support.function.any-method {
  color: #61afef;
}
.entity.name.function {
  color: #61afef;
}
.entity.name.class,
.entity.name.type.class {
  color: #e5c07b;
}
.entity.name.section {
  color: #61afef;
}
.entity.name.tag {
  color: #e06c75;
}
.entity.other.attribute-name {
  color: #d19a66;
}
.entity.other.attribute-name.id {
  color: #61afef;
}
.meta.class {
  color: #e5c07b;
}
.meta.class.body {
  color: #abb2bf;
}
.meta.method-call,
.meta.method {
  color: #abb2bf;
}
.meta.definition.variable {
  color: #e06c75;
}
.meta.link {
  color: #d19a66;
}
.meta.require {
  color: #61afef;
}
.meta.selector {
  color: #c678dd;
}
.meta.separator {
  background-color: #373b41;
  color: #abb2bf;
}
.meta.tag {
  color: #abb2bf;
}
.underline {
  text-decoration: underline;
}
.none {
  color: #abb2bf;
}
.invalid.deprecated {
  color: #523d14 !important;
  background-color: #e0c285 !important;
}
.invalid.illegal {
  color: #ffffff !important;
  background-color: #e05252 !important;
}
.markup.bold {
  color: #d19a66;
  font-weight: bold;
}
.markup.changed {
  color: #c678dd;
}
.markup.deleted {
  color: #e06c75;
}
.markup.italic {
  color: #c678dd;
  font-style: italic;
}
.markup.heading {
  color: #e06c75;
}
.markup.heading .punctuation.definition.heading {
  color: #61afef;
}
.markup.link {
  color: #c678dd;
}
.markup.inserted {
  color: #98c379;
}
.markup.quote {
  color: #d19a66;
}
.markup.raw {
  color: #98c379;
}
.source.cs .keyword.operator {
  color: #c678dd;
}
.source.css .property-name,
.source.css .property-value {
  color: #828997;
}
.source.css .property-name.support,
.source.css .property-value.support {
  color: #abb2bf;
}
.source.gfm .markup {
  -webkit-font-smoothing: auto;
}
.source.gfm .link .entity {
  color: #61afef;
}
.source.ini .keyword.other.definition.ini {
  color: #e06c75;
}
.source.java .storage.modifier.import {
  color: #e5c07b;
}
.source.java .storage.type {
  color: #e5c07b;
}
.source.java-properties .meta.key-pair {
  color: #e06c75;
}
.source.java-properties .meta.key-pair &gt; .punctuation {
  color: #abb2bf;
}
.source.js .keyword.operator {
  color: #56b6c2;
}
.source.js .keyword.operator.delete,
.source.js .keyword.operator.in,
.source.js .keyword.operator.of,
.source.js .keyword.operator.instanceof,
.source.js .keyword.operator.new,
.source.js .keyword.operator.typeof,
.source.js .keyword.operator.void {
  color: #c678dd;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json &gt; .punctuation.string {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation {
  color: #98c379;
}
.source.json .meta.structure.dictionary.json &gt; .constant.language.json,
.source.json .meta.structure.array.json &gt; .constant.language.json {
  color: #56b6c2;
}
.source.ruby .constant.other.symbol &gt; .punctuation {
  color: inherit;
}
.source.python .keyword.operator.logical.python {
  color: #c678dd;
}
.source.python .variable.parameter {
  color: #d19a66;
}
&lt;/style&gt;
  
  &lt;h1 id=&quot;javascript_prototype-prototype-chainning&quot;&gt;JavaScript_Prototype &amp;amp; Prototype Chainning&lt;/h1&gt;
&lt;p&gt;자바스크립트는 &lt;strong&gt;프로토타입&lt;/strong&gt; 기반의 객체지향 언어로 일반적인 객체 지향 언어와 다른 특성을 가지고 있다.&lt;/p&gt;&lt;p&gt;특히, 자바스크립트는 기본적으로는 원시타입과 참조타입으로 데이터 타입을 나눌 수 있지만, 엔진 내부에서는 원시타입 역시 객체로 &lt;strong&gt;오토박싱(AutoBoxing)&lt;/strong&gt; 을 시켜서 객체형으로 변환하여 변수를 관리한다.(즉, 원시타입도 어떤 생성자 함수의 인스턴스이다.)&lt;/p&gt;
&lt;h2 id=&quot;-implicit-prototype-link-&quot;&gt;암묵적인 프로토타입 링크(implicit prototype link)&lt;/h2&gt;
&lt;p&gt;자바스크립트의 모든 객체는 프로토타입 (링크)객체를 가지고 있다. 프로토타입 객체란, 자신을 생성한 생성자 함수의 프로토타입 객체를 가리키는 일종의 링크 객체로 자바스크립트에서 상속을 구현하는 핵심 메카니즘이라고 할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ECMA 표준에서는 이를 &lt;strong&gt;암묵적인 프로토타입 링크&lt;/strong&gt; 라고 명칭한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;Person&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable language js&quot;&gt;&lt;span&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;foo&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta class instance constructor&quot;&gt;&lt;span class=&quot;keyword operator new js&quot;&gt;&lt;span&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type instance js&quot;&gt;&lt;span&gt;Person&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Choi&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;foo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;===&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;Person&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;위 코드에서 foo 객체(인스턴스)의 프로토타입 링크는 foo 객체의 생성자인 Person 함수 객체의 &lt;strong&gt;[프로토타입]&lt;/strong&gt; 영역을 가리키가 된다. 즉, 생성자 함수의 프로토타입 영역이 인스턴스의 프로토타입 링크가 가리키게 되는 객체가 되는 것이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Chrome에서는 &lt;em&gt;proto&lt;/em&gt; 라는 프로퍼티가 프로토타입 링크 역할을 하는 객체 프로퍼티가 된다.
즉, 숨겨진 프로토타입 링크 역할을 수행하게 되는 것이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;생성자 함수로 생성된 객체뿐만 아니라, 객체 리터럴도 프로토타입 링크를 가지게 되는데 왜냐하면 객체 리터럴 역시 내부적으로는 Object() 생성자 함수의 객체(인스턴스)이기 때문에, Object.Prototype 영역을 가리키는 암묵적인 프로토타입 링크를 가지게 된다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;객체&amp;nbsp;리터럴&amp;nbsp;생성&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;obj&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation section scope begin js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation section scope end js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;객체&amp;nbsp;리터럴도&amp;nbsp;Object&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;된다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;obj&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;===&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Object&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;결과적으로, 기억해야 할 부분은 바로 &lt;strong&gt;객체리터럴 역시 Object() 생성자 함수의 인스턴스&lt;/strong&gt; 라는 점이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;-prototype-chainning-&quot;&gt;프로토타입 체인(Prototype Chainning)&lt;/h2&gt;
&lt;p&gt;자바스크립트에서 객체의 속성이나 매소드를 참조할 때, 객체에 해당 속성과 매소드가 없을 경우 &lt;strong&gt;프로토타입 링크&lt;/strong&gt; 를 따라 프로토타입 객체의 프로퍼티를 차례대로 찾아가는 것을 &lt;strong&gt;프로토타입 체인&lt;/strong&gt; 이라고 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;객체의 속성을 읽거나 매소드를 호출(실행)할 때 프로토타입 체인이 작동한다&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;myObj&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation section scope begin js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation section scope end js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;myObj&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Choi&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;myObj&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;hasOwnProperty&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;myObj&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;hasOwnProperty&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;위 코드에서 hasOwnProperty() 매소드를 사용할 수 있는 근거도 위에서 말한대로 객체 리터럴 역시 Object() 생성자 함수의 인스턴스이기 때문에, 객체의 프로토타입 링크는 Object() 생성자 함수 객체의 프로토타입 영역을 참조하게 된다. 그래서 기존 Object() 생성자 함수의 프로토타입 영역에 정의되어 있는 매소드인 hasOwnProperty(Native 영역의 함수)를 사용할 수 있는 것이다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;==&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Object&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Number&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;==&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Object&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;이 밖에도, Number, String, Function 등의 생성자 함수들도 각자 프로토타입 영역을 가지고 있는데 &lt;strong&gt;프로토타입 영역은 곧 객체&lt;/strong&gt; 이기 때문에 객체의 프로토타입 링크를 가지고 있게 된다. 이때 프로토타입 링크가 바라보게 되는 곳이 바로 Object()의 프로토타입 영역이기 때문에 실질적으로 모든 객체(인스턴스)에서 Object.prototype에 정의한 매서드들을 사용할 수 있는 것이 된다.&lt;/p&gt;
&lt;h2 id=&quot;-this&quot;&gt;프로토타입 &amp;amp;&amp;amp; this&lt;/h2&gt;
&lt;p&gt;프로토타입 객체의 속성(프로퍼티)가 매서드인 경우, 결과적으로 &lt;strong&gt;this 키워드는 매서드를 호출한 객체를 바라보게 된다.&lt;/strong&gt; 말이 어려운데 아래 예제를 살펴보면 쉽게 이해할 수 있을 것이다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable language js&quot;&gt;&lt;span&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function prototype js&quot;&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;msg&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword control js&quot;&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;alert&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable language js&quot;&gt;&lt;span&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이&amp;nbsp;말합니다.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;msg&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;tiger&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta class instance constructor&quot;&gt;&lt;span class=&quot;keyword operator new js&quot;&gt;&lt;span&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type instance js&quot;&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;타이거&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;tiger&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;난&amp;nbsp;호랭이야!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;타이거가&amp;nbsp;말합니다.&amp;nbsp;난&amp;nbsp;호랭이야!&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;sayHello를 호출한 객체는 바로 tiger 객체이기 때문에, sayHello 매서드 내부의 this 키워드가 가리키는 것은 바로 tiger 객체 자체를 참조하게 된다.(이것은 일종의 자바스크립트의 법칙과도 같다.) 즉, 호출한 객체의 자체를 바라보게 되는 것인데 살짝 예제를 틀어서보면 재밌는 부분을 발견할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted double js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;강아지&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;강아지가&amp;nbsp;말합니다.&amp;nbsp;난&amp;nbsp;강아지인데?!!!&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;난&amp;nbsp;강아지인데?!!!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;첫 번쨰 예제와 두 번쨰 예제의 차이점은 sayHello() 매서도를 호출한 객체가 달라졌다는 부분이다. 다시 말해, 첫 번째 예제에서 sayHello()를 호출한 객체는 tiger 객체이기 때문에 this 키워드가 가리키는 객체는 tiger 객체가 되는 것이고, 두 번째 예제에서 sayHello()를 호출한 객체가 Animal.prototype 객체이기 때문에 this가 가리키는 녀석이 바로 Animal.prototype이 되는 것이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;정리해서, &lt;strong&gt;객체의 속성(프로퍼티)가 매소드일 경우 이를 호출한 this는 호출한 객체에 바인딩된다&lt;/strong&gt; 가 결론이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;-&quot;&gt;디플트 프로토타입 링크&lt;/h2&gt;
&lt;p&gt;함수를 작성하면 기본적으로 디폴트 프로토타입 영역이 생성이 된다. 이 디폴트 프로토타입 영역은 constructor 라는 속성을 가지는데 constructor 단어 그 자체의 의미처럼 작성한 함수 객체를 참조하는 프로퍼티이다. 그런데 재밌는 부분은 이 디폴트 프로토타입 객체는 개발자에 의해서 변경이 가능하다는 점이다. 그렇기 때문에 프로토타입 객체의 참조 관계를 임의로 개발자가 변경하여 사용하는 것이 가능하다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;Weapon&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable language js&quot;&gt;&lt;span&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;machineGun&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta class instance constructor&quot;&gt;&lt;span class=&quot;keyword operator new js&quot;&gt;&lt;span&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type instance js&quot;&gt;&lt;span&gt;Weapon&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;머신건&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;1번&amp;nbsp;문제&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;machineGun&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;===&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;Weapon&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta class js&quot;&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Weapon&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function json js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;sayWeaponName&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword control js&quot;&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable language js&quot;&gt;&lt;span&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant dom js&quot;&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;newGun&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta class instance constructor&quot;&gt;&lt;span class=&quot;keyword operator new js&quot;&gt;&lt;span&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type instance js&quot;&gt;&lt;span&gt;Weapon&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;뉴건&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;2번&amp;nbsp;문제&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;machineGun&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator comparison js&quot;&gt;&lt;span&gt;===&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;newGun&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;__proto__&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;첫 번째 문제의 경우, Weapon 생성자 함수의 인스턴스인 machineGun의 프로토타입 링크는 Weapon 생성자 함수 객체의 프로토타입 영역을 가리키고 있기 때문에 두 객체의 constructor 는 동일한 녀석인 Weapon 생성자 함수를 가리키게 된다.&lt;/p&gt;&lt;p&gt;두 번째 문제의 경우, machineGun의 프로토타입 링크가 끊어지지 않은 상태에서 Weapon 함수 객체의 프로토타입 영역을 다른 객체로 대체했다. 이렇게 되면 기존 machineGun의 프로토타입 링크는 그대로 유지되는 반면에 새롭게 생성되는 newGun 객체의 프로토타입 링크는 새롭게 정의된 프로토타입 객체를 바라보게 되면서 2번 문제의 경우 다른 객체를 바라보게 됨에 따라 &quot;false&quot;인 결과가 나오게 된다.&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://book.naver.com/bookdb/book_detail.nhn?bid=7400243&quot;&gt;인사이드 자바스크립트&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://book.naver.com/bookdb/book_detail.nhn?bid=6960939&quot;&gt;자바스크립트 객체지향 프로그래밍&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/JavaScript</category>
      <category>ecma</category>
      <category>implicit prototype chain</category>
      <category>JavaScript</category>
      <category>Prototype</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/122</guid>
      <comments>https://stylishc.tistory.com/122#entry122comment</comments>
      <pubDate>Sun, 17 Jul 2016 22:50:14 +0900</pubDate>
    </item>
    <item>
      <title>[Node.js] PM2_프로세스 관리 도구</title>
      <link>https://stylishc.tistory.com/121</link>
      <description>&lt;title&gt;pm2.md&lt;/title&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt; &lt;style&gt; .markdown-preview-enhanced pre, .markdown-preview-enhanced .host { color: rgb(171, 178, 191); background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced pre .line.cursor-line, .markdown-preview-enhanced .host .line.cursor-line { background-color: rgba(153, 187, 255, 0.0392157); }
.markdown-preview-enhanced pre .invisible, .markdown-preview-enhanced .host .invisible { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .cursor, .markdown-preview-enhanced .host .cursor { border-left-width: 2px; border-left-style: solid; border-left-color: rgb(82, 139, 255); }
.markdown-preview-enhanced pre .selection .region, .markdown-preview-enhanced .host .selection .region { background-color: rgb(62, 68, 81); }
.markdown-preview-enhanced pre .bracket-matcher .region, .markdown-preview-enhanced .host .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(82, 139, 255); box-sizing: border-box; }
.markdown-preview-enhanced pre .invisible-character, .markdown-preview-enhanced .host .invisible-character { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .indent-guide, .markdown-preview-enhanced .host .indent-guide { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .wrap-guide, .markdown-preview-enhanced .host .wrap-guide { background-color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .gutter .line-number, .markdown-preview-enhanced .host .gutter .line-number { color: rgb(99, 109, 131); -webkit-font-smoothing: antialiased; }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line, .markdown-preview-enhanced .host .gutter .line-number.cursor-line { color: rgb(171, 178, 191); background-color: rgb(44, 49, 58); }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .host .gutter .line-number.cursor-line-no-selection { background-color: transparent; }
.markdown-preview-enhanced pre .gutter .line-number .icon-right, .markdown-preview-enhanced .host .gutter .line-number .icon-right { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before { bottom: -3px; }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed::after, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after { content: &quot;&quot;; position: absolute; left: 0px; bottom: 0px; width: 25px; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgba(224, 82, 82, 0.498039); pointer-events: none; }
.markdown-preview-enhanced pre .gutter .line-number.folded, .markdown-preview-enhanced .host .gutter .line-number.folded, .markdown-preview-enhanced pre .gutter .line-number::after, .markdown-preview-enhanced .host .gutter .line-number::after, .markdown-preview-enhanced pre .fold-marker::after, .markdown-preview-enhanced .host .fold-marker::after { color: rgb(171, 178, 191); }
.markdown-preview-enhanced { font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; font-size: 16px; line-height: 1.6; color: rgb(171, 178, 191); overflow: auto; margin: 10px 13px; padding: 2em; background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced .mermaid .label { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .node rect, .markdown-preview-enhanced .node circle, .markdown-preview-enhanced .node ellipse, .markdown-preview-enhanced .node polygon { fill: rgb(236, 236, 255); stroke: rgb(204, 204, 255); stroke-width: 1px; }
.markdown-preview-enhanced .edgePath .path { stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .edgeLabel { background-color: rgb(232, 232, 232); }
.markdown-preview-enhanced .cluster rect { fill: rgb(255, 255, 222) !important; rx: 4px !important; stroke: rgb(170, 170, 51) !important; stroke-width: 1px !important; }
.markdown-preview-enhanced .cluster text { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .actor { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced text.actor { fill: black; stroke: none; }
.markdown-preview-enhanced .actor-line { stroke: grey; }
.markdown-preview-enhanced .messageLine0 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .messageLine1 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced #arrowhead { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced #crosshead path { fill: rgb(51, 51, 51) !important; stroke: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced .messageText { fill: rgb(51, 51, 51); stroke: none; }
.markdown-preview-enhanced .labelBox { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced .labelText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopLine { stroke-width: 2px; stroke: rgb(204, 204, 255); }
.markdown-preview-enhanced .note { stroke: rgb(170, 170, 51); fill: rgb(255, 245, 173); }
.markdown-preview-enhanced .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced .section { stroke: none; opacity: 0.2; }
.markdown-preview-enhanced .section0 { fill: rgba(102, 102, 255, 0.490196); }
.markdown-preview-enhanced .section2 { fill: rgb(255, 244, 0); }
.markdown-preview-enhanced .section1, .markdown-preview-enhanced .section3 { fill: white; opacity: 0.2; }
.markdown-preview-enhanced .sectionTitle0 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle1 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle2 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle3 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle { text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; }
.markdown-preview-enhanced .grid path { stroke-width: 0px; }
.markdown-preview-enhanced .today { fill: none; stroke: red; stroke-width: 2px; }
.markdown-preview-enhanced .task { stroke-width: 2px; }
.markdown-preview-enhanced .taskText { text-anchor: middle; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideRight { fill: black; text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideLeft { fill: black; text-anchor: end; font-size: 11px; }
.markdown-preview-enhanced .taskText0, .markdown-preview-enhanced .taskText1, .markdown-preview-enhanced .taskText2, .markdown-preview-enhanced .taskText3 { fill: white; }
.markdown-preview-enhanced .task0, .markdown-preview-enhanced .task1, .markdown-preview-enhanced .task2, .markdown-preview-enhanced .task3 { fill: rgb(138, 144, 221); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .taskTextOutside0, .markdown-preview-enhanced .taskTextOutside2 { fill: black; }
.markdown-preview-enhanced .taskTextOutside1, .markdown-preview-enhanced .taskTextOutside3 { fill: black; }
.markdown-preview-enhanced .active0, .markdown-preview-enhanced .active1, .markdown-preview-enhanced .active2, .markdown-preview-enhanced .active3 { fill: rgb(191, 199, 255); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .activeText0, .markdown-preview-enhanced .activeText1, .markdown-preview-enhanced .activeText2, .markdown-preview-enhanced .activeText3 { fill: black !important; }
.markdown-preview-enhanced .done0, .markdown-preview-enhanced .done1, .markdown-preview-enhanced .done2, .markdown-preview-enhanced .done3 { stroke: grey; fill: lightgrey; stroke-width: 2px; }
.markdown-preview-enhanced .doneText0, .markdown-preview-enhanced .doneText1, .markdown-preview-enhanced .doneText2, .markdown-preview-enhanced .doneText3 { fill: black !important; }
.markdown-preview-enhanced .crit0, .markdown-preview-enhanced .crit1, .markdown-preview-enhanced .crit2, .markdown-preview-enhanced .crit3 { stroke: rgb(255, 136, 136); fill: red; stroke-width: 2px; }
.markdown-preview-enhanced .activeCrit0, .markdown-preview-enhanced .activeCrit1, .markdown-preview-enhanced .activeCrit2, .markdown-preview-enhanced .activeCrit3 { stroke: rgb(255, 136, 136); fill: rgb(191, 199, 255); stroke-width: 2px; }
.markdown-preview-enhanced .doneCrit0, .markdown-preview-enhanced .doneCrit1, .markdown-preview-enhanced .doneCrit2, .markdown-preview-enhanced .doneCrit3 { stroke: rgb(255, 136, 136); fill: lightgrey; stroke-width: 2px; cursor: pointer; shape-rendering: crispEdges; }
.markdown-preview-enhanced .doneCritText0, .markdown-preview-enhanced .doneCritText1, .markdown-preview-enhanced .doneCritText2, .markdown-preview-enhanced .doneCritText3 { fill: black !important; }
.markdown-preview-enhanced .activeCritText0, .markdown-preview-enhanced .activeCritText1, .markdown-preview-enhanced .activeCritText2, .markdown-preview-enhanced .activeCritText3 { fill: black !important; }
.markdown-preview-enhanced .titleText { text-anchor: middle; font-size: 18px; fill: black; }
.markdown-preview-enhanced .node text { font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: 'trebuchet ms', verdana, arial; font-size: 12px; border: 1px solid rgb(170, 170, 51); border-radius: 2px; pointer-events: none; z-index: 100; background: rgb(255, 255, 222); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { color: rgb(85, 85, 85); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced h1, .markdown-preview-enhanced h2, .markdown-preview-enhanced h3, .markdown-preview-enhanced h4, .markdown-preview-enhanced h5, .markdown-preview-enhanced h6 { line-height: 1.2; margin-top: 1em; margin-bottom: 16px; color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h3, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h4, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h5, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h6 { color: rgb(85, 85, 85); }
.markdown-preview-enhanced h1 { font-size: 2.4em; font-weight: 300; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h2 { font-size: 1.8em; font-weight: 400; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h3 { font-size: 1.5em; font-weight: 500; }
.markdown-preview-enhanced h4 { font-size: 1.2em; font-weight: 600; }
.markdown-preview-enhanced h5 { font-size: 1.1em; font-weight: 600; }
.markdown-preview-enhanced h6 { font-size: 1em; font-weight: 600; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2 { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(231, 231, 231); }
.markdown-preview-enhanced strong { color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] strong { color: rgb(85, 85, 85); }
.markdown-preview-enhanced del { color: rgb(124, 135, 156); }
.markdown-preview-enhanced a:not([href]) { color: inherit; text-decoration: none; }
.markdown-preview-enhanced a { color: rgb(0, 136, 204); text-decoration: none; }
.markdown-preview-enhanced a:hover { color: rgb(0, 80, 163); text-decoration: none; }
.markdown-preview-enhanced img { max-width: 100%; }
.markdown-preview-enhanced &gt; p { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced &gt; ul, .markdown-preview-enhanced &gt; ol { margin-bottom: 16px; }
.markdown-preview-enhanced ul, .markdown-preview-enhanced ol { padding-left: 2em; }
.markdown-preview-enhanced ul.no-list, .markdown-preview-enhanced ol.no-list { padding: 0px; list-style-type: none; }
.markdown-preview-enhanced ul ul, .markdown-preview-enhanced ul ol, .markdown-preview-enhanced ol ol, .markdown-preview-enhanced ol ul { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced li { margin-bottom: 0px; }
.markdown-preview-enhanced li.task-list-item { list-style: none; }
.markdown-preview-enhanced li &gt; p { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced .task-list-item-checkbox { margin: 0px 0.2em 0.25em -1.6em; vertical-align: middle; }
.markdown-preview-enhanced .task-list-item-checkbox:hover { cursor: pointer; }
.markdown-preview-enhanced blockquote { margin: 16px 0px; font-size: inherit; padding: 0px 15px; color: rgb(124, 135, 156); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(75, 83, 98); }
.markdown-preview-enhanced blockquote &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced blockquote &gt; :last-child { margin-bottom: 0px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] blockquote { color: rgb(119, 119, 119); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(221, 221, 221); }
.markdown-preview-enhanced hr { height: 4px; margin: 32px 0px; border: 0px none; background-color: rgb(75, 83, 98); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] hr { background-color: rgb(231, 231, 231); }
.markdown-preview-enhanced table { margin: 10px 0px 15px; border-collapse: collapse; }
.markdown-preview-enhanced table th { font-weight: bold; color: rgb(255, 255, 255); }
.markdown-preview-enhanced table td, .markdown-preview-enhanced table th { border: 1px solid rgb(75, 83, 98); padding: 5px 10px; }
.markdown-preview-enhanced table th { padding: 5px 10px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { color: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] td, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { border: 1px solid rgb(221, 221, 221); }
.markdown-preview-enhanced code { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: rgb(255, 255, 255); font-size: 0.85em !important; background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] code { color: inherit; background-color: rgba(0, 0, 0, 0.0392157); }
.markdown-preview-enhanced pre &gt; code { padding: 0px; margin: 0px; word-break: normal; white-space: pre; border: 0px; font-size: 0.85em !important; background: transparent; }
.markdown-preview-enhanced .highlight { margin-bottom: 16px; }
.markdown-preview-enhanced .highlight pre, .markdown-preview-enhanced pre { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; padding: 16px; overflow: auto; line-height: 1.45; color: rgb(171, 178, 191); border: rgb(75, 83, 98); border-radius: 3px; font-size: 0.85em !important; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced .highlight pre { margin-bottom: 0px; word-break: normal; }
.markdown-preview-enhanced pre { word-wrap: break-word; }
.markdown-preview-enhanced pre .section { opacity: 1; }
.markdown-preview-enhanced pre code, .markdown-preview-enhanced pre tt { display: inline; max-width: initial; padding: 0px; margin: 0px; overflow: initial; line-height: inherit; word-wrap: normal; border: 0px; background-color: transparent; }
.markdown-preview-enhanced pre code::before, .markdown-preview-enhanced pre tt::before, .markdown-preview-enhanced pre code::after, .markdown-preview-enhanced pre tt::after { content: normal; }
.markdown-preview-enhanced p, .markdown-preview-enhanced blockquote, .markdown-preview-enhanced ul, .markdown-preview-enhanced ol, .markdown-preview-enhanced dl, .markdown-preview-enhanced pre { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced pre.editor-colors { margin: 16px 0px; padding: 1em; font-size: 0.92em; border-radius: 3px; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced kbd { color: rgb(255, 255, 255); border-width: 1px 1px 2px; border-style: solid; border-color: rgb(75, 83, 98) rgb(75, 83, 98) rgb(62, 68, 81); background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] kbd { color: rgb(85, 85, 85); border-style: solid; border-width: 1px; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(187, 187, 187); border-radius: 3px; box-shadow: rgb(187, 187, 187) 0px -1px 0px inset; background-color: rgb(252, 252, 252); }
.markdown-preview-enhanced .pagebreak, .markdown-preview-enhanced .newpage { page-break-before: always; }
@media screen and (min-width: 914px) { 
  .markdown-preview-enhanced { width: 854px; margin: 10px auto; overflow-y: scroll; background: rgb(40, 44, 52); }
}
@media screen and (max-width: 400px) { 
  .markdown-preview-enhanced { font-size: 14px; }
}
@media screen and (min-width: 914px) { 
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { background: rgb(255, 255, 255); }
}
@media print { 
  .markdown-preview-enhanced { background-color: rgb(40, 44, 52); }
  .markdown-preview-enhanced h1, .markdown-preview-enhanced h2, .markdown-preview-enhanced h3, .markdown-preview-enhanced h4, .markdown-preview-enhanced h5, .markdown-preview-enhanced h6 { color: rgb(255, 255, 255); }
  .markdown-preview-enhanced blockquote { color: rgb(124, 135, 156); }
  .markdown-preview-enhanced table, .markdown-preview-enhanced pre { page-break-inside: avoid; }
  .markdown-preview-enhanced img { display: block; max-width: 100%; max-height: 100%; }
  .markdown-preview-enhanced pre, .markdown-preview-enhanced code { word-wrap: break-word; }
}
@media print { 
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { background: rgb(255, 255, 255); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h3, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h4, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h5, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h6 { color: rgb(34, 34, 34); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] blockquote { color: rgb(119, 119, 119); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] pre { border: 2px solid rgb(246, 246, 246); }
}
.markdown-preview-enhanced .mermaid { margin-bottom: 16px; }
.markdown-preview-enhanced .mermaid .edgePath .path { stroke: rgb(255, 255, 255); }
.markdown-preview-enhanced .mermaid .edgePath marker path { fill: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid line, .markdown-preview-enhanced .mermaid marker { stroke: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid .messageText { fill: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid .edgePath .path { stroke: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid marker path { fill: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] line, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] marker { stroke: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .messageText { fill: rgb(85, 85, 85); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors, .markdown-preview-enhanced .github-syntax-theme .host { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter, .markdown-preview-enhanced .github-syntax-theme .host .gutter { color: rgb(179, 179, 179); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77); background-color: rgb(245, 245, 245); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .wrap-guide, .markdown-preview-enhanced .github-syntax-theme .host .wrap-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .indent-guide, .markdown-preview-enhanced .github-syntax-theme .host .indent-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .invisible-character, .markdown-preview-enhanced .github-syntax-theme .host .invisible-character { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker .region { border: rgb(0, 0, 0); background-color: transparent; }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker.current-result .region { border: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .cursor { border-color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039); }
.markdown-preview-enhanced .github-syntax-theme .comment, .markdown-preview-enhanced .github-syntax-theme .punctuation.comment { color: rgb(176, 176, 176); }
.markdown-preview-enhanced .github-syntax-theme .string, .markdown-preview-enhanced .github-syntax-theme .string .constant.character.escape { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.language { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.character, .markdown-preview-enhanced .github-syntax-theme .constant.other.rgb-value { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.inherited-class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.any.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.begin.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.end.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.operator { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .storage { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .storage.type { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.function { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.constant { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.type, .markdown-preview-enhanced .github-syntax-theme .support.class, .markdown-preview-enhanced .github-syntax-theme .meta.property-name.scss { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.other.variable { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .invalid, .markdown-preview-enhanced .github-syntax-theme .invalid.illegal { color: rgb(248, 248, 248); background-color: rgb(181, 42, 29); }
.markdown-preview-enhanced .github-syntax-theme .invalid.deprecated { color: rgb(181, 42, 29); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.filename.find-in-files { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .punctuation.definition.entity, .markdown-preview-enhanced .github-syntax-theme .punctuation.terminator.rule.scss { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .source.css .meta.value, .markdown-preview-enhanced .github-syntax-theme .source.css .support.constant, .markdown-preview-enhanced .github-syntax-theme .source.css .support.function { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.constant.property-value, .markdown-preview-enhanced .github-syntax-theme .source.scss .support.function, .markdown-preview-enhanced .github-syntax-theme .meta.property-value.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .variable, .markdown-preview-enhanced .github-syntax-theme .source.scss .variable, .markdown-preview-enhanced .github-syntax-theme .variable.interpolation.scss, .markdown-preview-enhanced .github-syntax-theme .source.scss .meta.set.variable { color: rgb(222, 104, 173); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control.else.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.if.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.content.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.unit { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.important { color: rgb(235, 69, 53); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag.reference.scss { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.type.new.js { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .variable.language.js { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .variable.parameter.function { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.js .meta.function .entity.name.function, .markdown-preview-enhanced .github-syntax-theme .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .source.php .entity.name.type.class { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.heading.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.italic.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.bold.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.end.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.metadata.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.link.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.raw.markdown { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.section.function.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .punctuation, .markdown-preview-enhanced .github-syntax-theme .meta.method-call, .markdown-preview-enhanced .github-syntax-theme .meta.method { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.separator { color: rgb(179, 179, 179); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.image { color: rgb(65, 131, 196); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.underline.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .constant.other.reference { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.list { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold { font-weight: bold; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold .markup.italic { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic .markup.bold { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgba(240, 192, 0, 0.8); z-index: 100; background-color: rgba(255, 214, 51, 0.0980392); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.html.angular, .markdown-preview-enhanced .github-syntax-theme .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter { color: rgb(179, 179, 179) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77) !important; background-color: rgb(245, 245, 245) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .wrap-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .wrap-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .indent-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .indent-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .invisible-character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .invisible-character { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker .region { border: rgb(0, 0, 0) !important; background-color: transparent !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker.current-result .region { border: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .cursor { border-color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .comment, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.comment { color: rgb(176, 176, 176) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string .constant.character.escape { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.language { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.other.rgb-value { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.inherited-class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.any.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.begin.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.end.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.operator { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage.type { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.function { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.type, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-name.scss { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.other.variable { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.illegal { color: rgb(248, 248, 248) !important; background-color: rgb(181, 42, 29) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.deprecated { color: rgb(181, 42, 29) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.filename.find-in-files { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .punctuation.definition.entity, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.terminator.rule.scss { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .meta.value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.constant, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.function { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant.property-value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .support.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-value.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.interpolation.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .meta.set.variable { color: rgb(222, 104, 173) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.else.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.if.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.content.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.unit { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.important { color: rgb(235, 69, 53) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag.reference.scss { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.type.new.js { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.language.js { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.parameter.function { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .meta.function .entity.name.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.php .entity.name.type.class { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.heading.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.italic.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.bold.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.end.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.metadata.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.link.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.raw.markdown { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.section.function.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method-call, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.separator { color: rgb(179, 179, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.image { color: rgb(65, 131, 196) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.underline.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .constant.other.reference { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.list { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold { font-weight: bold !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold .markup.italic { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic .markup.bold { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .bracket-matcher .region { border-bottom-width: 1px !important; border-bottom-style: solid !important; border-bottom-color: rgba(240, 192, 0, 0.8) !important; z-index: 100 !important; background-color: rgba(255, 214, 51, 0.0980392) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.html.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced-custom { font-family: KoPubDotum; }
.markdown-preview-enhanced { font-family: KoPubDotum !important; }
.bracket-matcher .region {
  border-bottom: 1px dotted lime;
  position: absolute;
}

pre.editor-colors,
.host {
  background-color: #282c34;
  color: #abb2bf;
}
pre.editor-colors .line.cursor-line,
.host .line.cursor-line {
  background-color: rgba(153, 187, 255, 0.04);
}
pre.editor-colors .invisible,
.host .invisible {
  color: #abb2bf;
}
pre.editor-colors .cursor,
.host .cursor {
  border-left: 2px solid #528bff;
}
pre.editor-colors .selection .region,
.host .selection .region {
  background-color: #3e4451;
}
pre.editor-colors .bracket-matcher .region,
.host .bracket-matcher .region {
  border-bottom: 1px solid #528bff;
  box-sizing: border-box;
}
pre.editor-colors .invisible-character,
.host .invisible-character {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .indent-guide,
.host .indent-guide {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .wrap-guide,
.host .wrap-guide {
  background-color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .gutter .line-number,
.host .gutter .line-number {
  color: #636d83;
  -webkit-font-smoothing: antialiased;
}
pre.editor-colors .gutter .line-number.cursor-line,
.host .gutter .line-number.cursor-line {
  color: #abb2bf;
  background-color: #2c313a;
}
pre.editor-colors .gutter .line-number.cursor-line-no-selection,
.host .gutter .line-number.cursor-line-no-selection {
  background-color: transparent;
}
pre.editor-colors .gutter .line-number .icon-right,
.host .gutter .line-number .icon-right {
  color: #abb2bf;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before {
  bottom: -3px;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed::after,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after {
  content: &quot;&quot;;
  position: absolute;
  left: 0px;
  bottom: 0px;
  width: 25px;
  border-bottom: 1px dotted rgba(224, 82, 82, 0.5);
  pointer-events: none;
}
pre.editor-colors .gutter .line-number.folded,
.host .gutter .line-number.folded,
pre.editor-colors .gutter .line-number:after,
.host .gutter .line-number:after,
pre.editor-colors .fold-marker:after,
.host .fold-marker:after {
  color: #abb2bf;
}
.comment {
  color: #5c6370;
  font-style: italic;
}
.comment .markup.link {
  color: #5c6370;
}
.entity.name.type {
  color: #e5c07b;
}
.entity.other.inherited-class {
  color: #98c379;
}
.keyword {
  color: #c678dd;
}
.keyword.control {
  color: #c678dd;
}
.keyword.operator {
  color: #abb2bf;
}
.keyword.other.special-method {
  color: #61afef;
}
.keyword.other.unit {
  color: #d19a66;
}
.storage {
  color: #c678dd;
}
.storage.type.annotation,
.storage.type.primitive {
  color: #c678dd;
}
.storage.modifier.package,
.storage.modifier.import {
  color: #abb2bf;
}
.constant {
  color: #d19a66;
}
.constant.variable {
  color: #d19a66;
}
.constant.character.escape {
  color: #56b6c2;
}
.constant.numeric {
  color: #d19a66;
}
.constant.other.color {
  color: #56b6c2;
}
.constant.other.symbol {
  color: #56b6c2;
}
.variable {
  color: #e06c75;
}
.variable.interpolation {
  color: #be5046;
}
.variable.parameter {
  color: #abb2bf;
}
.string {
  color: #98c379;
}
.string.regexp {
  color: #56b6c2;
}
.string.regexp .source.ruby.embedded {
  color: #e5c07b;
}
.string.other.link {
  color: #e06c75;
}
.punctuation.definition.comment {
  color: #5c6370;
}
.punctuation.definition.method-parameters,
.punctuation.definition.function-parameters,
.punctuation.definition.parameters,
.punctuation.definition.separator,
.punctuation.definition.seperator,
.punctuation.definition.array {
  color: #abb2bf;
}
.punctuation.definition.heading,
.punctuation.definition.identity {
  color: #61afef;
}
.punctuation.definition.bold {
  color: #e5c07b;
  font-weight: bold;
}
.punctuation.definition.italic {
  color: #c678dd;
  font-style: italic;
}
.punctuation.section.embedded {
  color: #be5046;
}
.punctuation.section.method,
.punctuation.section.class,
.punctuation.section.inner-class {
  color: #abb2bf;
}
.support.class {
  color: #e5c07b;
}
.support.type {
  color: #56b6c2;
}
.support.function {
  color: #56b6c2;
}
.support.function.any-method {
  color: #61afef;
}
.entity.name.function {
  color: #61afef;
}
.entity.name.class,
.entity.name.type.class {
  color: #e5c07b;
}
.entity.name.section {
  color: #61afef;
}
.entity.name.tag {
  color: #e06c75;
}
.entity.other.attribute-name {
  color: #d19a66;
}
.entity.other.attribute-name.id {
  color: #61afef;
}
.meta.class {
  color: #e5c07b;
}
.meta.class.body {
  color: #abb2bf;
}
.meta.method-call,
.meta.method {
  color: #abb2bf;
}
.meta.definition.variable {
  color: #e06c75;
}
.meta.link {
  color: #d19a66;
}
.meta.require {
  color: #61afef;
}
.meta.selector {
  color: #c678dd;
}
.meta.separator {
  background-color: #373b41;
  color: #abb2bf;
}
.meta.tag {
  color: #abb2bf;
}
.underline {
  text-decoration: underline;
}
.none {
  color: #abb2bf;
}
.invalid.deprecated {
  color: #523d14 !important;
  background-color: #e0c285 !important;
}
.invalid.illegal {
  color: #ffffff !important;
  background-color: #e05252 !important;
}
.markup.bold {
  color: #d19a66;
  font-weight: bold;
}
.markup.changed {
  color: #c678dd;
}
.markup.deleted {
  color: #e06c75;
}
.markup.italic {
  color: #c678dd;
  font-style: italic;
}
.markup.heading {
  color: #e06c75;
}
.markup.heading .punctuation.definition.heading {
  color: #61afef;
}
.markup.link {
  color: #c678dd;
}
.markup.inserted {
  color: #98c379;
}
.markup.quote {
  color: #d19a66;
}
.markup.raw {
  color: #98c379;
}
.source.cs .keyword.operator {
  color: #c678dd;
}
.source.css .property-name,
.source.css .property-value {
  color: #828997;
}
.source.css .property-name.support,
.source.css .property-value.support {
  color: #abb2bf;
}
.source.gfm .markup {
  -webkit-font-smoothing: auto;
}
.source.gfm .link .entity {
  color: #61afef;
}
.source.ini .keyword.other.definition.ini {
  color: #e06c75;
}
.source.java .storage.modifier.import {
  color: #e5c07b;
}
.source.java .storage.type {
  color: #e5c07b;
}
.source.java-properties .meta.key-pair {
  color: #e06c75;
}
.source.java-properties .meta.key-pair &gt; .punctuation {
  color: #abb2bf;
}
.source.js .keyword.operator {
  color: #56b6c2;
}
.source.js .keyword.operator.delete,
.source.js .keyword.operator.in,
.source.js .keyword.operator.of,
.source.js .keyword.operator.instanceof,
.source.js .keyword.operator.new,
.source.js .keyword.operator.typeof,
.source.js .keyword.operator.void {
  color: #c678dd;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json &gt; .punctuation.string {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation {
  color: #98c379;
}
.source.json .meta.structure.dictionary.json &gt; .constant.language.json,
.source.json .meta.structure.array.json &gt; .constant.language.json {
  color: #56b6c2;
}
.source.ruby .constant.other.symbol &gt; .punctuation {
  color: inherit;
}
.source.python .keyword.operator.logical.python {
  color: #c678dd;
}
.source.python .variable.parameter {
  color: #d19a66;
}
 &lt;/style&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css&quot;&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/0.5.8/mermaid.min.css&quot;&gt; &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/0.5.8/mermaid.min.js&quot;&gt;&lt;/script&gt;   &lt;h1 class=&quot;line&quot; data-line=&quot;0&quot; id=&quot;pm2&quot;&gt;PM2&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;1&quot;&gt;Node.js 애플리케이션용 프로덕션 프로세스 관리자&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;2&quot;&gt;로드 밸런서 기본 제공&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;3&quot;&gt;앱을 항상 작동 상태로 유지&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;4&quot;&gt;시스템 가동 중단 없이 앱을 다시 로드
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;5&quot;&gt;&lt;strong&gt;MAX MEMORY RESTART&lt;/strong&gt; 기능을 제공하는데 &lt;strong&gt;커맨드라인/JSON/코드(JS)&lt;/strong&gt; 등으로 설정 가능하다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;6&quot;&gt;일반적인 시스템 관리 태스크를 쉽게 처리 가능&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;7&quot;&gt;애플리케이션 로깅, 모니터링 및 클러스터링을 관리
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;8&quot;&gt;클러스터 모드의 경우, 여러개의 프로세스를 생성해놓고, 이를 PM2에서 자동으로 로드밸런싱으로 지원해주기 때문에, 앞단 웹 서버(Nginx, Apache Server 등)에서 프록시 설정만 간단히 해줘도 된다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;10&quot; id=&quot;설치&quot;&gt;설치&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta scope logical-expression shell&quot;&gt;&lt;span class=&quot;punctuation definition logical-expression shell&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span class=&quot;punctuation definition logical-expression shell&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;npm&amp;nbsp;install&amp;nbsp;pm2&amp;nbsp;-g&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;15&quot; id=&quot;기본-사용&quot;&gt;기본 사용&lt;/h2&gt;
&lt;p class=&quot;line&quot; data-line=&quot;16&quot;&gt;앱을 시작할때 즉시 백그라운드로 보내진다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;21&quot;&gt;메뉴얼을 읽으면서 가장 괜찮다고 생각한 부분이 바로 다른 스크립트 언어도 같이 지원하는 부분이었다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.pl&amp;nbsp;--interpreter=perl&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.coffee&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.php&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.py&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.sh&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;echo.rb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;32&quot; id=&quot;어플리케이션-설정-파일-사용&quot;&gt;어플리케이션 설정 파일 사용&lt;/h2&gt;
&lt;p class=&quot;line&quot; data-line=&quot;33&quot;&gt;JSON, YML 포맷으로 만들어진 파일을 일종의 시작 프로파일로 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;start.yml&lt;/span&gt;&lt;span class=&quot;meta scope subshell shell&quot;&gt;&lt;span class=&quot;punctuation definition subshell shell&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;start.json&lt;/span&gt;&lt;span class=&quot;punctuation definition subshell shell&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;38&quot;&gt;&lt;strong&gt;start.yml&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-yml&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;apps&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;punctuation definition entry yaml&quot;&gt;&lt;span&gt;-&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;script&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;app.js&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;constant numeric yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;exec_mode&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;cluster&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;punctuation definition entry yaml&quot;&gt;&lt;span&gt;-&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;script&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;worker.js&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;watch&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;env&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;NODE_ENV&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;development&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;env_production&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source yaml&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span class=&quot;entity name tag yaml&quot;&gt;&lt;span&gt;NODE_ENV&lt;/span&gt;&lt;span class=&quot;punctuation separator key-value yaml&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string unquoted yaml&quot;&gt;&lt;span&gt;production&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;52&quot;&gt;&lt;strong&gt;start.json&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-json&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;punctuation definition dictionary begin json&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;apps&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;punctuation definition array begin json&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;punctuation definition dictionary begin json&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bash-worker&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;./a-bash-script&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;exec_interpreter&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;exec_mode&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fork_mode&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition dictionary end json&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator array json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;punctuation definition dictionary begin json&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ruby-worker&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;./some-ruby-script&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;exec_interpreter&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ruby&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation separator dictionary pair json&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;exec_mode&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;punctuation separator dictionary key-value json&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double json&quot;&gt;&lt;span class=&quot;punctuation definition string begin json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fork_mode&lt;/span&gt;&lt;span class=&quot;punctuation definition string end json&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition dictionary end json&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;meta structure dictionary value json&quot;&gt;&lt;span class=&quot;meta structure array json&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition array end json&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source json&quot;&gt;&lt;span class=&quot;meta structure dictionary json&quot;&gt;&lt;span class=&quot;punctuation definition dictionary end json&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;73&quot; id=&quot;cheatsheat&quot;&gt;CheatSheat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;74&quot;&gt;출처 : &lt;a href=&quot;http://pm2.keymetrics.io/docs/usage/quick-start/#cheat-sheet&quot;&gt;PM2 공식 홈페이지&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Fork&amp;nbsp;mode&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;--name&amp;nbsp;my-api&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;프로세스&amp;nbsp;네임&amp;nbsp;지정&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Cluster&amp;nbsp;mode&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;-i&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;가용한&amp;nbsp;CPU&amp;nbsp;갯수만큼&amp;nbsp;클러스터&amp;nbsp;확장&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;-i&amp;nbsp;max&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;위&amp;nbsp;설정과&amp;nbsp;동일하지만&amp;nbsp;곧&amp;nbsp;Deprecated&amp;nbsp;예정?&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Listing&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;list&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;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;모든&amp;nbsp;프로세스&amp;nbsp;리스트/상태&amp;nbsp;확인&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;jlist&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;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;모든&amp;nbsp;프로세스&amp;nbsp;리스트/상태&amp;nbsp;확인(JSON)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;prettylist&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;모든&amp;nbsp;프로세스&amp;nbsp;리스트/상태&amp;nbsp;확인(Beatiful&amp;nbsp;JSON)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;describe&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;특정&amp;nbsp;프로세스&amp;nbsp;정보&amp;nbsp;확인&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;monit&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;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;모든&amp;nbsp;프로세스&amp;nbsp;모니터링&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Logs&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;logs&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta scope logical-expression shell&quot;&gt;&lt;span class=&quot;punctuation definition logical-expression shell&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;--raw&lt;/span&gt;&lt;span class=&quot;punctuation definition logical-expression shell&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Display&amp;nbsp;all&amp;nbsp;processes&amp;nbsp;logs&amp;nbsp;in&amp;nbsp;streaming&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;flush&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;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Empty&amp;nbsp;all&amp;nbsp;log&amp;nbsp;file&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;reloadLogs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Reload&amp;nbsp;all&amp;nbsp;logs&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Actions&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;stop&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Stop&amp;nbsp;all&amp;nbsp;processes&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;restart&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Restart&amp;nbsp;all&amp;nbsp;processes&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;reload&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Will&amp;nbsp;0s&amp;nbsp;downtime&amp;nbsp;reload&amp;nbsp;(for&amp;nbsp;NETWORKED&amp;nbsp;apps)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;gracefulReload&amp;nbsp;all&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Send&amp;nbsp;exit&amp;nbsp;message&amp;nbsp;then&amp;nbsp;reload&amp;nbsp;(for&amp;nbsp;networked&amp;nbsp;apps)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;stop&amp;nbsp;0&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;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Stop&amp;nbsp;specific&amp;nbsp;process&amp;nbsp;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;restart&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Restart&amp;nbsp;specific&amp;nbsp;process&amp;nbsp;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;delete&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Will&amp;nbsp;remove&amp;nbsp;process&amp;nbsp;from&amp;nbsp;pm2&amp;nbsp;list&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;delete&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Will&amp;nbsp;remove&amp;nbsp;all&amp;nbsp;processes&amp;nbsp;from&amp;nbsp;pm2&amp;nbsp;list&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Misc&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;reset&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator redirect shell&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span class=&quot;keyword operator redirect shell&quot;&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Reset&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;(restarted&amp;nbsp;time...)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;updatePM2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Update&amp;nbsp;in&amp;nbsp;memory&amp;nbsp;pm2&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;ping&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;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Ensure&amp;nbsp;pm2&amp;nbsp;daemon&amp;nbsp;has&amp;nbsp;been&amp;nbsp;launched&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;sendSignal&amp;nbsp;SIGUSR2&amp;nbsp;my-app&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment line number-sign shell&quot;&gt;&lt;span class=&quot;punctuation definition comment shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Send&amp;nbsp;system&amp;nbsp;signal&amp;nbsp;to&amp;nbsp;script&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;--no-daemon&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;--no-vizion&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;$&amp;nbsp;pm2&amp;nbsp;start&amp;nbsp;app.js&amp;nbsp;--no-autorestart&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h1 class=&quot;line&quot; data-line=&quot;124&quot; id=&quot;참고&quot;&gt;참고&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;125&quot;&gt;&lt;a href=&quot;https://doesnotscale.com/deploying-node-js-with-pm2-and-nginx/&quot;&gt;Deploying Node.js with PM2 and Nginx&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;126&quot;&gt;&lt;a href=&quot;http://www.tutorialbook.co.kr/entry/PM2-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-NodeJS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0&quot;&gt;PM2 를 이용하여 NodeJS 프로세스 관리하기&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/Node.js</category>
      <category>cluster</category>
      <category>node.js</category>
      <category>pm2</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/121</guid>
      <comments>https://stylishc.tistory.com/121#entry121comment</comments>
      <pubDate>Fri, 15 Jul 2016 14:54:01 +0900</pubDate>
    </item>
    <item>
      <title>[Node.js] Express.js 기본 개념 및 내용 정리</title>
      <link>https://stylishc.tistory.com/120</link>
      <description>   &lt;title&gt;readme.md&lt;/title&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt; &lt;style&gt; .markdown-preview-enhanced pre, .markdown-preview-enhanced .host { color: rgb(171, 178, 191); background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced pre .line.cursor-line, .markdown-preview-enhanced .host .line.cursor-line { background-color: rgba(153, 187, 255, 0.0392157); }
.markdown-preview-enhanced pre .invisible, .markdown-preview-enhanced .host .invisible { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .cursor, .markdown-preview-enhanced .host .cursor { border-left-width: 2px; border-left-style: solid; border-left-color: rgb(82, 139, 255); }
.markdown-preview-enhanced pre .selection .region, .markdown-preview-enhanced .host .selection .region { background-color: rgb(62, 68, 81); }
.markdown-preview-enhanced pre .bracket-matcher .region, .markdown-preview-enhanced .host .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(82, 139, 255); box-sizing: border-box; }
.markdown-preview-enhanced pre .invisible-character, .markdown-preview-enhanced .host .invisible-character { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .indent-guide, .markdown-preview-enhanced .host .indent-guide { color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .wrap-guide, .markdown-preview-enhanced .host .wrap-guide { background-color: rgba(171, 178, 191, 0.14902); }
.markdown-preview-enhanced pre .gutter .line-number, .markdown-preview-enhanced .host .gutter .line-number { color: rgb(99, 109, 131); -webkit-font-smoothing: antialiased; }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line, .markdown-preview-enhanced .host .gutter .line-number.cursor-line { color: rgb(171, 178, 191); background-color: rgb(44, 49, 58); }
.markdown-preview-enhanced pre .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .host .gutter .line-number.cursor-line-no-selection { background-color: transparent; }
.markdown-preview-enhanced pre .gutter .line-number .icon-right, .markdown-preview-enhanced .host .gutter .line-number .icon-right { color: rgb(171, 178, 191); }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before { bottom: -3px; }
.markdown-preview-enhanced pre .gutter:not(.git-diff-icon) .line-number.git-line-removed::after, .markdown-preview-enhanced .host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after { content: &quot;&quot;; position: absolute; left: 0px; bottom: 0px; width: 25px; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgba(224, 82, 82, 0.498039); pointer-events: none; }
.markdown-preview-enhanced pre .gutter .line-number.folded, .markdown-preview-enhanced .host .gutter .line-number.folded, .markdown-preview-enhanced pre .gutter .line-number::after, .markdown-preview-enhanced .host .gutter .line-number::after, .markdown-preview-enhanced pre .fold-marker::after, .markdown-preview-enhanced .host .fold-marker::after { color: rgb(171, 178, 191); }
.markdown-preview-enhanced { font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; font-size: 16px; line-height: 1.6; color: rgb(171, 178, 191); overflow: auto; margin: 10px 13px; padding: 2em; background-color: rgb(40, 44, 52); }
.markdown-preview-enhanced .mermaid .label { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .node rect, .markdown-preview-enhanced .node circle, .markdown-preview-enhanced .node ellipse, .markdown-preview-enhanced .node polygon { fill: rgb(236, 236, 255); stroke: rgb(204, 204, 255); stroke-width: 1px; }
.markdown-preview-enhanced .edgePath .path { stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .edgeLabel { background-color: rgb(232, 232, 232); }
.markdown-preview-enhanced .cluster rect { fill: rgb(255, 255, 222) !important; rx: 4px !important; stroke: rgb(170, 170, 51) !important; stroke-width: 1px !important; }
.markdown-preview-enhanced .cluster text { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .actor { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced text.actor { fill: black; stroke: none; }
.markdown-preview-enhanced .actor-line { stroke: grey; }
.markdown-preview-enhanced .messageLine0 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced .messageLine1 { stroke-width: 1.5px; stroke: rgb(51, 51, 51); }
.markdown-preview-enhanced #arrowhead { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced #crosshead path { fill: rgb(51, 51, 51) !important; stroke: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced .messageText { fill: rgb(51, 51, 51); stroke: none; }
.markdown-preview-enhanced .labelBox { stroke: rgb(204, 204, 255); fill: rgb(236, 236, 255); }
.markdown-preview-enhanced .labelText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopText { fill: black; stroke: none; }
.markdown-preview-enhanced .loopLine { stroke-width: 2px; stroke: rgb(204, 204, 255); }
.markdown-preview-enhanced .note { stroke: rgb(170, 170, 51); fill: rgb(255, 245, 173); }
.markdown-preview-enhanced .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced .section { stroke: none; opacity: 0.2; }
.markdown-preview-enhanced .section0 { fill: rgba(102, 102, 255, 0.490196); }
.markdown-preview-enhanced .section2 { fill: rgb(255, 244, 0); }
.markdown-preview-enhanced .section1, .markdown-preview-enhanced .section3 { fill: white; opacity: 0.2; }
.markdown-preview-enhanced .sectionTitle0 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle1 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle2 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle3 { fill: rgb(51, 51, 51); }
.markdown-preview-enhanced .sectionTitle { text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; }
.markdown-preview-enhanced .grid path { stroke-width: 0px; }
.markdown-preview-enhanced .today { fill: none; stroke: red; stroke-width: 2px; }
.markdown-preview-enhanced .task { stroke-width: 2px; }
.markdown-preview-enhanced .taskText { text-anchor: middle; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideRight { fill: black; text-anchor: start; font-size: 11px; }
.markdown-preview-enhanced .taskTextOutsideLeft { fill: black; text-anchor: end; font-size: 11px; }
.markdown-preview-enhanced .taskText0, .markdown-preview-enhanced .taskText1, .markdown-preview-enhanced .taskText2, .markdown-preview-enhanced .taskText3 { fill: white; }
.markdown-preview-enhanced .task0, .markdown-preview-enhanced .task1, .markdown-preview-enhanced .task2, .markdown-preview-enhanced .task3 { fill: rgb(138, 144, 221); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .taskTextOutside0, .markdown-preview-enhanced .taskTextOutside2 { fill: black; }
.markdown-preview-enhanced .taskTextOutside1, .markdown-preview-enhanced .taskTextOutside3 { fill: black; }
.markdown-preview-enhanced .active0, .markdown-preview-enhanced .active1, .markdown-preview-enhanced .active2, .markdown-preview-enhanced .active3 { fill: rgb(191, 199, 255); stroke: rgb(83, 79, 188); }
.markdown-preview-enhanced .activeText0, .markdown-preview-enhanced .activeText1, .markdown-preview-enhanced .activeText2, .markdown-preview-enhanced .activeText3 { fill: black !important; }
.markdown-preview-enhanced .done0, .markdown-preview-enhanced .done1, .markdown-preview-enhanced .done2, .markdown-preview-enhanced .done3 { stroke: grey; fill: lightgrey; stroke-width: 2px; }
.markdown-preview-enhanced .doneText0, .markdown-preview-enhanced .doneText1, .markdown-preview-enhanced .doneText2, .markdown-preview-enhanced .doneText3 { fill: black !important; }
.markdown-preview-enhanced .crit0, .markdown-preview-enhanced .crit1, .markdown-preview-enhanced .crit2, .markdown-preview-enhanced .crit3 { stroke: rgb(255, 136, 136); fill: red; stroke-width: 2px; }
.markdown-preview-enhanced .activeCrit0, .markdown-preview-enhanced .activeCrit1, .markdown-preview-enhanced .activeCrit2, .markdown-preview-enhanced .activeCrit3 { stroke: rgb(255, 136, 136); fill: rgb(191, 199, 255); stroke-width: 2px; }
.markdown-preview-enhanced .doneCrit0, .markdown-preview-enhanced .doneCrit1, .markdown-preview-enhanced .doneCrit2, .markdown-preview-enhanced .doneCrit3 { stroke: rgb(255, 136, 136); fill: lightgrey; stroke-width: 2px; cursor: pointer; shape-rendering: crispEdges; }
.markdown-preview-enhanced .doneCritText0, .markdown-preview-enhanced .doneCritText1, .markdown-preview-enhanced .doneCritText2, .markdown-preview-enhanced .doneCritText3 { fill: black !important; }
.markdown-preview-enhanced .activeCritText0, .markdown-preview-enhanced .activeCritText1, .markdown-preview-enhanced .activeCritText2, .markdown-preview-enhanced .activeCritText3 { fill: black !important; }
.markdown-preview-enhanced .titleText { text-anchor: middle; font-size: 18px; fill: black; }
.markdown-preview-enhanced .node text { font-family: 'trebuchet ms', verdana, arial; font-size: 14px; }
.markdown-preview-enhanced div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: 'trebuchet ms', verdana, arial; font-size: 12px; border: 1px solid rgb(170, 170, 51); border-radius: 2px; pointer-events: none; z-index: 100; background: rgb(255, 255, 222); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { color: rgb(85, 85, 85); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced h1, .markdown-preview-enhanced h2, .markdown-preview-enhanced h3, .markdown-preview-enhanced h4, .markdown-preview-enhanced h5, .markdown-preview-enhanced h6 { line-height: 1.2; margin-top: 1em; margin-bottom: 16px; color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h3, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h4, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h5, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h6 { color: rgb(85, 85, 85); }
.markdown-preview-enhanced h1 { font-size: 2.4em; font-weight: 300; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h2 { font-size: 1.8em; font-weight: 400; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(75, 83, 98); }
.markdown-preview-enhanced h3 { font-size: 1.5em; font-weight: 500; }
.markdown-preview-enhanced h4 { font-size: 1.2em; font-weight: 600; }
.markdown-preview-enhanced h5 { font-size: 1.1em; font-weight: 600; }
.markdown-preview-enhanced h6 { font-size: 1em; font-weight: 600; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2 { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(231, 231, 231); }
.markdown-preview-enhanced strong { color: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] strong { color: rgb(85, 85, 85); }
.markdown-preview-enhanced del { color: rgb(124, 135, 156); }
.markdown-preview-enhanced a:not([href]) { color: inherit; text-decoration: none; }
.markdown-preview-enhanced a { color: rgb(0, 136, 204); text-decoration: none; }
.markdown-preview-enhanced a:hover { color: rgb(0, 80, 163); text-decoration: none; }
.markdown-preview-enhanced img { max-width: 100%; }
.markdown-preview-enhanced &gt; p { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced &gt; ul, .markdown-preview-enhanced &gt; ol { margin-bottom: 16px; }
.markdown-preview-enhanced ul, .markdown-preview-enhanced ol { padding-left: 2em; }
.markdown-preview-enhanced ul.no-list, .markdown-preview-enhanced ol.no-list { padding: 0px; list-style-type: none; }
.markdown-preview-enhanced ul ul, .markdown-preview-enhanced ul ol, .markdown-preview-enhanced ol ol, .markdown-preview-enhanced ol ul { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced li { margin-bottom: 0px; }
.markdown-preview-enhanced li.task-list-item { list-style: none; }
.markdown-preview-enhanced li &gt; p { margin-top: 0px; margin-bottom: 0px; }
.markdown-preview-enhanced .task-list-item-checkbox { margin: 0px 0.2em 0.25em -1.6em; vertical-align: middle; }
.markdown-preview-enhanced .task-list-item-checkbox:hover { cursor: pointer; }
.markdown-preview-enhanced blockquote { margin: 16px 0px; font-size: inherit; padding: 0px 15px; color: rgb(124, 135, 156); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(75, 83, 98); }
.markdown-preview-enhanced blockquote &gt; :first-child { margin-top: 0px; }
.markdown-preview-enhanced blockquote &gt; :last-child { margin-bottom: 0px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] blockquote { color: rgb(119, 119, 119); border-left-width: 4px; border-left-style: solid; border-left-color: rgb(221, 221, 221); }
.markdown-preview-enhanced hr { height: 4px; margin: 32px 0px; border: 0px none; background-color: rgb(75, 83, 98); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] hr { background-color: rgb(231, 231, 231); }
.markdown-preview-enhanced table { margin: 10px 0px 15px; border-collapse: collapse; }
.markdown-preview-enhanced table th { font-weight: bold; color: rgb(255, 255, 255); }
.markdown-preview-enhanced table td, .markdown-preview-enhanced table th { border: 1px solid rgb(75, 83, 98); padding: 5px 10px; }
.markdown-preview-enhanced table th { padding: 5px 10px; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { color: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] td, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] th { border: 1px solid rgb(221, 221, 221); }
.markdown-preview-enhanced code { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: rgb(255, 255, 255); font-size: 0.85em !important; background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] code { color: inherit; background-color: rgba(0, 0, 0, 0.0392157); }
.markdown-preview-enhanced pre &gt; code { padding: 0px; margin: 0px; word-break: normal; white-space: pre; border: 0px; font-size: 0.85em !important; background: transparent; }
.markdown-preview-enhanced .highlight { margin-bottom: 16px; }
.markdown-preview-enhanced .highlight pre, .markdown-preview-enhanced pre { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; padding: 16px; overflow: auto; line-height: 1.45; color: rgb(171, 178, 191); border: rgb(75, 83, 98); border-radius: 3px; font-size: 0.85em !important; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced .highlight pre { margin-bottom: 0px; word-break: normal; }
.markdown-preview-enhanced pre { word-wrap: break-word; }
.markdown-preview-enhanced pre .section { opacity: 1; }
.markdown-preview-enhanced pre code, .markdown-preview-enhanced pre tt { display: inline; max-width: initial; padding: 0px; margin: 0px; overflow: initial; line-height: inherit; word-wrap: normal; border: 0px; background-color: transparent; }
.markdown-preview-enhanced pre code::before, .markdown-preview-enhanced pre tt::before, .markdown-preview-enhanced pre code::after, .markdown-preview-enhanced pre tt::after { content: normal; }
.markdown-preview-enhanced p, .markdown-preview-enhanced blockquote, .markdown-preview-enhanced ul, .markdown-preview-enhanced ol, .markdown-preview-enhanced dl, .markdown-preview-enhanced pre { margin-top: 0px; margin-bottom: 16px; }
.markdown-preview-enhanced pre.editor-colors { margin: 16px 0px; padding: 1em; font-size: 0.92em; border-radius: 3px; background-color: rgb(49, 54, 63); }
.markdown-preview-enhanced kbd { color: rgb(255, 255, 255); border-width: 1px 1px 2px; border-style: solid; border-color: rgb(75, 83, 98) rgb(75, 83, 98) rgb(62, 68, 81); background-color: rgb(58, 63, 75); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] kbd { color: rgb(85, 85, 85); border-style: solid; border-width: 1px; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(187, 187, 187); border-radius: 3px; box-shadow: rgb(187, 187, 187) 0px -1px 0px inset; background-color: rgb(252, 252, 252); }
.markdown-preview-enhanced .pagebreak, .markdown-preview-enhanced .newpage { page-break-before: always; }
@media screen and (min-width: 914px) { 
  .markdown-preview-enhanced { width: 854px; margin: 10px auto; overflow-y: scroll; background: rgb(40, 44, 52); }
}
@media screen and (max-width: 400px) { 
  .markdown-preview-enhanced { font-size: 14px; }
}
@media screen and (min-width: 914px) { 
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { background: rgb(255, 255, 255); }
}
@media print { 
  .markdown-preview-enhanced { background-color: rgb(40, 44, 52); }
  .markdown-preview-enhanced h1, .markdown-preview-enhanced h2, .markdown-preview-enhanced h3, .markdown-preview-enhanced h4, .markdown-preview-enhanced h5, .markdown-preview-enhanced h6 { color: rgb(255, 255, 255); }
  .markdown-preview-enhanced blockquote { color: rgb(124, 135, 156); }
  .markdown-preview-enhanced table, .markdown-preview-enhanced pre { page-break-inside: avoid; }
  .markdown-preview-enhanced img { display: block; max-width: 100%; max-height: 100%; }
  .markdown-preview-enhanced pre, .markdown-preview-enhanced code { word-wrap: break-word; }
}
@media print { 
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] { background: rgb(255, 255, 255); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h1, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h2, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h3, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h4, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h5, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] h6 { color: rgb(34, 34, 34); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] blockquote { color: rgb(119, 119, 119); }
  .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] pre { border: 2px solid rgb(246, 246, 246); }
}
.markdown-preview-enhanced .mermaid { margin-bottom: 16px; }
.markdown-preview-enhanced .mermaid .edgePath .path { stroke: rgb(255, 255, 255); }
.markdown-preview-enhanced .mermaid .edgePath marker path { fill: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid line, .markdown-preview-enhanced .mermaid marker { stroke: rgb(255, 255, 255) !important; opacity: 1 !important; }
.markdown-preview-enhanced .mermaid .messageText { fill: rgb(255, 255, 255); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid .edgePath .path { stroke: rgb(85, 85, 85); }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .mermaid marker path { fill: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] line, .markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] marker { stroke: rgb(85, 85, 85) !important; opacity: 1 !important; }
.markdown-preview-enhanced[data-use-github-style=&quot;true&quot;] .messageText { fill: rgb(85, 85, 85); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors, .markdown-preview-enhanced .github-syntax-theme .host { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre { color: rgb(51, 51, 51); background-color: rgb(247, 247, 247); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter, .markdown-preview-enhanced .github-syntax-theme .host .gutter { color: rgb(179, 179, 179); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77); background-color: rgb(245, 245, 245); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .wrap-guide, .markdown-preview-enhanced .github-syntax-theme .host .wrap-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .indent-guide, .markdown-preview-enhanced .github-syntax-theme .host .indent-guide { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .invisible-character, .markdown-preview-enhanced .github-syntax-theme .host .invisible-character { color: rgb(223, 223, 223); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker .region { border: rgb(0, 0, 0); background-color: transparent; }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced .github-syntax-theme .host .search-results .marker.current-result .region { border: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .cursor { border-color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4); }
.markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced .github-syntax-theme .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039); }
.markdown-preview-enhanced .github-syntax-theme .comment, .markdown-preview-enhanced .github-syntax-theme .punctuation.comment { color: rgb(176, 176, 176); }
.markdown-preview-enhanced .github-syntax-theme .string, .markdown-preview-enhanced .github-syntax-theme .string .constant.character.escape { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.language { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.character, .markdown-preview-enhanced .github-syntax-theme .constant.other.rgb-value { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced .github-syntax-theme .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.inherited-class { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.any.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(171, 176, 179); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.begin.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.end.html, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.tag.html, .markdown-preview-enhanced .github-syntax-theme .meta.tag.block.any.html { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.operator { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .storage { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .storage.type { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.function { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.constant { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.type, .markdown-preview-enhanced .github-syntax-theme .support.class, .markdown-preview-enhanced .github-syntax-theme .meta.property-name.scss { color: rgb(0, 153, 204); }
.markdown-preview-enhanced .github-syntax-theme .support.other.variable { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .invalid, .markdown-preview-enhanced .github-syntax-theme .invalid.illegal { color: rgb(248, 248, 248); background-color: rgb(181, 42, 29); }
.markdown-preview-enhanced .github-syntax-theme .invalid.deprecated { color: rgb(181, 42, 29); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.filename.find-in-files { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .punctuation.definition.entity, .markdown-preview-enhanced .github-syntax-theme .punctuation.terminator.rule.scss { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .source.css .meta.value, .markdown-preview-enhanced .github-syntax-theme .source.css .support.constant, .markdown-preview-enhanced .github-syntax-theme .source.css .support.function { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced .github-syntax-theme .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .support.constant.property-value, .markdown-preview-enhanced .github-syntax-theme .source.scss .support.function, .markdown-preview-enhanced .github-syntax-theme .meta.property-value.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .variable, .markdown-preview-enhanced .github-syntax-theme .source.scss .variable, .markdown-preview-enhanced .github-syntax-theme .variable.interpolation.scss, .markdown-preview-enhanced .github-syntax-theme .source.scss .meta.set.variable { color: rgb(222, 104, 173); }
.markdown-preview-enhanced .github-syntax-theme .keyword.control.else.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.if.scss, .markdown-preview-enhanced .github-syntax-theme .keyword.control.content.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.unit { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .keyword.other.important { color: rgb(235, 69, 53); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.tag.reference.scss { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .entity.name.type.new.js { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .variable.language.js { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .variable.parameter.function { color: rgb(181, 127, 0); }
.markdown-preview-enhanced .github-syntax-theme .source.js .meta.function .entity.name.function, .markdown-preview-enhanced .github-syntax-theme .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181); }
.markdown-preview-enhanced .github-syntax-theme .source.php .entity.name.type.class { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.definition.heading.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.italic.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.bold.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.string.end.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.metadata.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.link.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced .github-syntax-theme .punctuation.definition.raw.markdown { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .punctuation.section.function.scss { color: rgb(99, 163, 92); }
.markdown-preview-enhanced .github-syntax-theme .punctuation, .markdown-preview-enhanced .github-syntax-theme .meta.method-call, .markdown-preview-enhanced .github-syntax-theme .meta.method { color: rgb(51, 51, 51); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.separator { color: rgb(179, 179, 179); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .meta.image { color: rgb(65, 131, 196); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.underline.link, .markdown-preview-enhanced .github-syntax-theme .text.html.markdown .constant.other.reference { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.list { color: rgb(238, 106, 66); }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold { font-weight: bold; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic { font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.bold .markup.italic { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .text.html.markdown .markup.italic .markup.bold { font-weight: bold; font-style: italic; }
.markdown-preview-enhanced .github-syntax-theme .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195); background-color: rgb(255, 255, 255); }
.markdown-preview-enhanced .github-syntax-theme .bracket-matcher .region { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgba(240, 192, 0, 0.8); z-index: 100; background-color: rgba(255, 214, 51, 0.0980392); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular { color: rgb(34, 115, 195); }
.markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced .github-syntax-theme .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93); }
.markdown-preview-enhanced .github-syntax-theme .entity.other.attribute-name.html.angular, .markdown-preview-enhanced .github-syntax-theme .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre { color: rgb(51, 51, 51) !important; background-color: rgb(247, 247, 247) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter { color: rgb(179, 179, 179) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line { color: rgb(77, 77, 77) !important; background-color: rgb(245, 245, 245) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .gutter .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .gutter .line-number.cursor-line-no-selection { color: rgb(77, 77, 77) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .wrap-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .wrap-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .indent-guide, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .indent-guide { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .invisible-character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .invisible-character { color: rgb(223, 223, 223) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker .region { border: rgb(0, 0, 0) !important; background-color: transparent !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors .search-results .marker.current-result .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host .search-results .marker.current-result .region { border: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .cursor, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .cursor { border-color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .selection .region, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .selection .region { background-color: rgba(178, 215, 255, 0.4) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] pre.editor-colors.is-focused .line.cursor-line, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line-number.cursor-line-no-selection, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .host(.is-focused) .line.cursor-line { background-color: rgba(240, 240, 240, 0.498039) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .comment, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.comment { color: rgb(176, 176, 176) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string .constant.character.escape { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.language { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.character, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.other.rgb-value { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.find-in-files, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .constant.numeric.line-number.match.find-in-files { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.inherited-class { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.any.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(171, 176, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name .punctuation.definition.entity.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.id.css .punctuation.definition.entity.css, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.class.css .punctuation.definition.entity.css { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.begin.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.end.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.tag.html, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.block.any.html { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.operator { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .storage.type { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.function { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.type, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-name.scss { color: rgb(0, 153, 204) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.other.variable { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.illegal { color: rgb(248, 248, 248) !important; background-color: rgb(181, 42, 29) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .invalid.deprecated { color: rgb(181, 42, 29) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.filename.find-in-files { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .punctuation.definition.entity, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.terminator.rule.scss { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .meta.value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.constant, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.css .support.function { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-class, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .entity.other.attribute-name.pseudo-element { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .support.constant.property-value, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .support.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.property-value.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .variable, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.interpolation.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.scss .meta.set.variable { color: rgb(222, 104, 173) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.else.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.if.scss, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.control.content.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.unit { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .keyword.other.important { color: rgb(235, 69, 53) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.tag.reference.scss { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.name.type.new.js { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.language.js { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .variable.parameter.function { color: rgb(181, 127, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .meta.function .entity.name.function, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.js .entity.name.function .meta.function { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .source.php .entity.name.type.class { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.heading.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.italic.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.bold.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.begin.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.string.end.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.metadata.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.link.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.blockquote.markdown, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.definition.raw.markdown { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation.section.function.scss { color: rgb(99, 163, 92) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .punctuation, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method-call, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.method { color: rgb(51, 51, 51) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.separator { color: rgb(179, 179, 179) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.block { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.raw.inline { color: rgb(0, 0, 0) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .meta.image { color: rgb(65, 131, 196) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.underline.link, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .constant.other.reference { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.list { color: rgb(238, 106, 66) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold { font-weight: bold !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic { font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.bold .markup.italic { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .text.html.markdown .markup.italic .markup.bold { font-weight: bold !important; font-style: italic !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .string.quoted.double.html .invalid.illegal.bad-ampersand.html { color: rgb(34, 115, 195) !important; background-color: rgb(255, 255, 255) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .bracket-matcher .region { border-bottom-width: 1px !important; border-bottom-style: solid !important; border-bottom-color: rgba(240, 192, 0, 0.8) !important; z-index: 100 !important; background-color: rgba(255, 214, 51, 0.0980392) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular { color: rgb(34, 115, 195) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.begin.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .punctuation.definition.block.end.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.tag.template.angular .meta.brace.curly.js { color: rgb(173, 28, 93) !important; }
.markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .entity.other.attribute-name.html.angular, .markdown-preview-enhanced[data-use-github-syntax-theme=&quot;true&quot;] .meta.attribute.html.angular { color: rgb(133, 103, 181) !important; }
.markdown-preview-enhanced-custom { font-family: KoPubDotum; }
.markdown-preview-enhanced { font-family: KoPubDotum !important; }
.bracket-matcher .region {
  border-bottom: 1px dotted lime;
  position: absolute;
}

pre.editor-colors,
.host {
  background-color: #282c34;
  color: #abb2bf;
}
pre.editor-colors .line.cursor-line,
.host .line.cursor-line {
  background-color: rgba(153, 187, 255, 0.04);
}
pre.editor-colors .invisible,
.host .invisible {
  color: #abb2bf;
}
pre.editor-colors .cursor,
.host .cursor {
  border-left: 2px solid #528bff;
}
pre.editor-colors .selection .region,
.host .selection .region {
  background-color: #3e4451;
}
pre.editor-colors .bracket-matcher .region,
.host .bracket-matcher .region {
  border-bottom: 1px solid #528bff;
  box-sizing: border-box;
}
pre.editor-colors .invisible-character,
.host .invisible-character {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .indent-guide,
.host .indent-guide {
  color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .wrap-guide,
.host .wrap-guide {
  background-color: rgba(171, 178, 191, 0.15);
}
pre.editor-colors .gutter .line-number,
.host .gutter .line-number {
  color: #636d83;
  -webkit-font-smoothing: antialiased;
}
pre.editor-colors .gutter .line-number.cursor-line,
.host .gutter .line-number.cursor-line {
  color: #abb2bf;
  background-color: #2c313a;
}
pre.editor-colors .gutter .line-number.cursor-line-no-selection,
.host .gutter .line-number.cursor-line-no-selection {
  background-color: transparent;
}
pre.editor-colors .gutter .line-number .icon-right,
.host .gutter .line-number .icon-right {
  color: #abb2bf;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed.git-line-removed::before {
  bottom: -3px;
}
pre.editor-colors .gutter:not(.git-diff-icon) .line-number.git-line-removed::after,
.host .gutter:not(.git-diff-icon) .line-number.git-line-removed::after {
  content: &quot;&quot;;
  position: absolute;
  left: 0px;
  bottom: 0px;
  width: 25px;
  border-bottom: 1px dotted rgba(224, 82, 82, 0.5);
  pointer-events: none;
}
pre.editor-colors .gutter .line-number.folded,
.host .gutter .line-number.folded,
pre.editor-colors .gutter .line-number:after,
.host .gutter .line-number:after,
pre.editor-colors .fold-marker:after,
.host .fold-marker:after {
  color: #abb2bf;
}
.comment {
  color: #5c6370;
  font-style: italic;
}
.comment .markup.link {
  color: #5c6370;
}
.entity.name.type {
  color: #e5c07b;
}
.entity.other.inherited-class {
  color: #98c379;
}
.keyword {
  color: #c678dd;
}
.keyword.control {
  color: #c678dd;
}
.keyword.operator {
  color: #abb2bf;
}
.keyword.other.special-method {
  color: #61afef;
}
.keyword.other.unit {
  color: #d19a66;
}
.storage {
  color: #c678dd;
}
.storage.type.annotation,
.storage.type.primitive {
  color: #c678dd;
}
.storage.modifier.package,
.storage.modifier.import {
  color: #abb2bf;
}
.constant {
  color: #d19a66;
}
.constant.variable {
  color: #d19a66;
}
.constant.character.escape {
  color: #56b6c2;
}
.constant.numeric {
  color: #d19a66;
}
.constant.other.color {
  color: #56b6c2;
}
.constant.other.symbol {
  color: #56b6c2;
}
.variable {
  color: #e06c75;
}
.variable.interpolation {
  color: #be5046;
}
.variable.parameter {
  color: #abb2bf;
}
.string {
  color: #98c379;
}
.string.regexp {
  color: #56b6c2;
}
.string.regexp .source.ruby.embedded {
  color: #e5c07b;
}
.string.other.link {
  color: #e06c75;
}
.punctuation.definition.comment {
  color: #5c6370;
}
.punctuation.definition.method-parameters,
.punctuation.definition.function-parameters,
.punctuation.definition.parameters,
.punctuation.definition.separator,
.punctuation.definition.seperator,
.punctuation.definition.array {
  color: #abb2bf;
}
.punctuation.definition.heading,
.punctuation.definition.identity {
  color: #61afef;
}
.punctuation.definition.bold {
  color: #e5c07b;
  font-weight: bold;
}
.punctuation.definition.italic {
  color: #c678dd;
  font-style: italic;
}
.punctuation.section.embedded {
  color: #be5046;
}
.punctuation.section.method,
.punctuation.section.class,
.punctuation.section.inner-class {
  color: #abb2bf;
}
.support.class {
  color: #e5c07b;
}
.support.type {
  color: #56b6c2;
}
.support.function {
  color: #56b6c2;
}
.support.function.any-method {
  color: #61afef;
}
.entity.name.function {
  color: #61afef;
}
.entity.name.class,
.entity.name.type.class {
  color: #e5c07b;
}
.entity.name.section {
  color: #61afef;
}
.entity.name.tag {
  color: #e06c75;
}
.entity.other.attribute-name {
  color: #d19a66;
}
.entity.other.attribute-name.id {
  color: #61afef;
}
.meta.class {
  color: #e5c07b;
}
.meta.class.body {
  color: #abb2bf;
}
.meta.method-call,
.meta.method {
  color: #abb2bf;
}
.meta.definition.variable {
  color: #e06c75;
}
.meta.link {
  color: #d19a66;
}
.meta.require {
  color: #61afef;
}
.meta.selector {
  color: #c678dd;
}
.meta.separator {
  background-color: #373b41;
  color: #abb2bf;
}
.meta.tag {
  color: #abb2bf;
}
.underline {
  text-decoration: underline;
}
.none {
  color: #abb2bf;
}
.invalid.deprecated {
  color: #523d14 !important;
  background-color: #e0c285 !important;
}
.invalid.illegal {
  color: #ffffff !important;
  background-color: #e05252 !important;
}
.markup.bold {
  color: #d19a66;
  font-weight: bold;
}
.markup.changed {
  color: #c678dd;
}
.markup.deleted {
  color: #e06c75;
}
.markup.italic {
  color: #c678dd;
  font-style: italic;
}
.markup.heading {
  color: #e06c75;
}
.markup.heading .punctuation.definition.heading {
  color: #61afef;
}
.markup.link {
  color: #c678dd;
}
.markup.inserted {
  color: #98c379;
}
.markup.quote {
  color: #d19a66;
}
.markup.raw {
  color: #98c379;
}
.source.cs .keyword.operator {
  color: #c678dd;
}
.source.css .property-name,
.source.css .property-value {
  color: #828997;
}
.source.css .property-name.support,
.source.css .property-value.support {
  color: #abb2bf;
}
.source.gfm .markup {
  -webkit-font-smoothing: auto;
}
.source.gfm .link .entity {
  color: #61afef;
}
.source.ini .keyword.other.definition.ini {
  color: #e06c75;
}
.source.java .storage.modifier.import {
  color: #e5c07b;
}
.source.java .storage.type {
  color: #e5c07b;
}
.source.java-properties .meta.key-pair {
  color: #e06c75;
}
.source.java-properties .meta.key-pair &gt; .punctuation {
  color: #abb2bf;
}
.source.js .keyword.operator {
  color: #56b6c2;
}
.source.js .keyword.operator.delete,
.source.js .keyword.operator.in,
.source.js .keyword.operator.of,
.source.js .keyword.operator.instanceof,
.source.js .keyword.operator.new,
.source.js .keyword.operator.typeof,
.source.js .keyword.operator.void {
  color: #c678dd;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .string.quoted.json &gt; .punctuation.string {
  color: #e06c75;
}
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json,
.source.json .meta.structure.dictionary.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation,
.source.json .meta.structure.array.json &gt; .value.json &gt; .string.quoted.json &gt; .punctuation {
  color: #98c379;
}
.source.json .meta.structure.dictionary.json &gt; .constant.language.json,
.source.json .meta.structure.array.json &gt; .constant.language.json {
  color: #56b6c2;
}
.source.ruby .constant.other.symbol &gt; .punctuation {
  color: inherit;
}
.source.python .keyword.operator.logical.python {
  color: #c678dd;
}
.source.python .variable.parameter {
  color: #d19a66;
}
 &lt;/style&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css&quot;&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/0.5.8/mermaid.min.css&quot;&gt; &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/0.5.8/mermaid.min.js&quot;&gt;&lt;/script&gt;   &lt;h1 class=&quot;line&quot; data-line=&quot;0&quot; id=&quot;expressjs&quot;&gt;Express.js&lt;/h1&gt;
&lt;p class=&quot;line&quot; data-line=&quot;1&quot;&gt;HTTP 요청에 대하여 &lt;strong&gt;라우팅&lt;/strong&gt; 및 &lt;strong&gt;미들웨어&lt;/strong&gt; 기능을 제공하는 웹 프레임워크&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;2&quot;&gt;&lt;strong&gt;라우팅(routing)&lt;/strong&gt; 은 기본적으로 어플리케이션 서버에서 경로를 제어하는 목적&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class=&quot;line&quot; data-line=&quot;3&quot;&gt;목적지까지 갈 수 있는 여러 경로 중 한 가지 경로를 설정해 주는 과정.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;5&quot;&gt;&lt;strong&gt;미들웨어(middleware)&lt;/strong&gt; 는 중간에 껴넣는다는 의미로 부가적인 기능이나 처리를 제공하는 목적&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class=&quot;line&quot; data-line=&quot;6&quot;&gt;이기종의 환경을 연결해주는 소프트웨어를 가리킴&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class=&quot;line&quot; data-line=&quot;8&quot;&gt;▶ Express.js에서 사용할 수 있는 &lt;strong&gt;중간처리&lt;/strong&gt; 목적의 소프트웨어/모듈&lt;/p&gt;&lt;p class=&quot;line&quot; data-line=&quot;10&quot;&gt;▶ 최종 요청 핸들러 이전의 &lt;strong&gt;Express 라우팅 계층에 의해 호출되는 함수&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;12&quot; id=&quot;설치&quot;&gt;설치&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;npm&amp;nbsp;init&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;npm&amp;nbsp;install&amp;nbsp;express&amp;nbsp;--save&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;18&quot; id=&quot;express-generator&quot;&gt;Express Generator&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;npm&amp;nbsp;install&amp;nbsp;express-generator&amp;nbsp;-g&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;pre class=&quot;editor-colors lang-bash&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source shell&quot;&gt;&lt;span&gt;express&amp;nbsp;-h&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;27&quot;&gt;&lt;img src=&quot;http://i.imgur.com/8b7CLJe.png&quot; alt=&quot;express_generator&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;29&quot;&gt;&lt;strong&gt;기본적인 어플리케이션 골격 생성&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;30&quot;&gt;handlebars, hogan, jade 등 템플릿 엔진 추가 가능&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;31&quot;&gt;css, .gitignore 등 옵션 추가 가능&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;33&quot; id=&quot;기본-라우팅-핸들러&quot;&gt;기본 라우팅 &amp;amp; 핸들러&lt;/h2&gt;
&lt;p class=&quot;line&quot; data-line=&quot;34&quot;&gt;라우팅(Routing) 이란 URL(URI) 요청에 따라 어플리케이션이 응답하는 방법을 결정.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;express&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;require&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;app&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment block documentation js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment block documentation js&quot;&gt;&lt;span&gt;&amp;nbsp;*&amp;nbsp;METHOD&amp;nbsp;:&amp;nbsp;Http&amp;nbsp;Method(GET,&amp;nbsp;POST,&amp;nbsp;PUT,&amp;nbsp;DELETE,&amp;nbsp;PATCH&amp;nbsp;등)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment block documentation js&quot;&gt;&lt;span&gt;&amp;nbsp;*&amp;nbsp;PATH&amp;nbsp;:&amp;nbsp;[경로]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment block documentation js&quot;&gt;&lt;span&gt;&amp;nbsp;*&amp;nbsp;HANDLER&amp;nbsp;:&amp;nbsp;[경로&amp;nbsp;접근&amp;nbsp;시,&amp;nbsp;처리&amp;nbsp;핸들러]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment block documentation js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;METHOD&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;constant other js&quot;&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;constant other js&quot;&gt;&lt;span&gt;HANDLER&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h3 class=&quot;line&quot; data-line=&quot;48&quot; id=&quot;라우팅-형태&quot;&gt;라우팅 형태&lt;/h3&gt;
&lt;p class=&quot;line&quot; data-line=&quot;49&quot;&gt;라우팅 URL 패스는 기본적으로 문자열뿐만 아니라 문자열 패턴 혹은 정규식으로 표현이 가능하다.(path-to-regexp)&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Sample&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/home&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted double js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Hello&amp;nbsp;World&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;abcd,&amp;nbsp;abbcd&amp;nbsp;및&amp;nbsp;abbbcd&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/ab+cd&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ab+cd&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;abcd,&amp;nbsp;abxcd,&amp;nbsp;abRABDOMcd&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/ab*cd&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ab*cd&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;abe&amp;nbsp;및&amp;nbsp;abcde&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/ab(cd)?e&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ab(cd)?e&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;73&quot;&gt;라우팅 핸들러(콜백 함수)는 하나 이상으로 설정이 가능하다.(next 인자를 반드시 설정해야 한다.) 라우팅에 대한 핸들링을 2개 이상을 등록하여 사용할 수 있기 때문에 굳이 하나의 핸들러에 모든 로직이나 코드를 넣어서 처리할 이유가 전혀 없다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;cb0&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CB0&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;cb1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CB1&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/example/a&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace square js&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cb0&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;cb1&lt;/span&gt;&lt;span class=&quot;meta brace square js&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;the&amp;nbsp;response&amp;nbsp;will&amp;nbsp;be&amp;nbsp;sent&amp;nbsp;by&amp;nbsp;the&amp;nbsp;next&amp;nbsp;function&amp;nbsp;...&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Hello&amp;nbsp;from&amp;nbsp;A!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/example/b&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;first&amp;nbsp;handler&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;second&amp;nbsp;handler&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Hello&amp;nbsp;from&amp;nbsp;B!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;103&quot;&gt;모듈식으로 등록하는 개념으로 express.Router 매소드를 활용하여 파일 단위로 모듈화를 시켜서 라우팅을 등록할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;[birds.js]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;express&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;require&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;router&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;Router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;middleware&amp;nbsp;that&amp;nbsp;is&amp;nbsp;specific&amp;nbsp;to&amp;nbsp;this&amp;nbsp;router&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;timeLog&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Time:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Date&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;now&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;define&amp;nbsp;the&amp;nbsp;home&amp;nbsp;page&amp;nbsp;route&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Birds&amp;nbsp;home&amp;nbsp;page&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;define&amp;nbsp;the&amp;nbsp;about&amp;nbsp;route&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/about&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;About&amp;nbsp;birds&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;support variable js&quot;&gt;&lt;span&gt;module&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;exports&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;router&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;127&quot;&gt;위에서 작성된 bird.js을 하단과 같이 로드하면 /birds/, /birds/about 으로 라우팅이 등록되어 사용할 수 있다. 모듈 단위(파일)로 작성하여 등록하는 방식이기 때문에, 라우팅 관리가 편하며 추후에 라우팅을 추가한다고 해도 확장성이 있어 보인다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;birds&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;require&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;./birds&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/birds&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;birds&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;133&quot; id=&quot;미들웨어&quot;&gt;미들웨어&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;134&quot;&gt;&lt;strong&gt;Application&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;135&quot;&gt;&lt;strong&gt;어플리케이션 전체 영역&lt;/strong&gt; 에서 처리 가능. 앱에 대한 Request가 발생할 떄 마다 실행&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;136&quot;&gt;&lt;strong&gt;Router&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;137&quot;&gt;&lt;strong&gt;라우터 단위&lt;/strong&gt; 로 Request가 발생하면 실행
&lt;/p&gt;&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;app&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;router&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;Router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;router&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Time:&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Date&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;now&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function-call js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p class=&quot;line&quot; data-line=&quot;147&quot;&gt;위에서 설명했던 라우팅 방식 중 모듈 단위(파일) 라우팅 시 사용하면 유용&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;149&quot;&gt;&lt;strong&gt;Error Handling&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;150&quot;&gt;기본적으로 4개의 인자가 필요(인자의 숫자로 오류 처리 미들웨어 판별)
&lt;/p&gt;&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;err&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name type object console js&quot;&gt;&lt;span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function console js&quot;&gt;&lt;span&gt;error&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;err&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other property js&quot;&gt;&lt;span&gt;stack&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter property period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support constant js&quot;&gt;&lt;span&gt;status&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;constant numeric decimal js&quot;&gt;&lt;span&gt;500&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;support function js&quot;&gt;&lt;span&gt;send&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Something&amp;nbsp;broke!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;157&quot;&gt;&lt;strong&gt;Basic(Default)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;158&quot;&gt;express.static(root, [options])
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;159&quot;&gt;어플리케이션 정적 자원 설정(CSS,HTML,JS) 등&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;160&quot;&gt;2개 이상의 정적 디렉토리 설정 가능&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;storage type var js&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;options&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;dotfiles&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ignore&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;etag&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;constant language boolean false js&quot;&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;extensions&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace square js&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;htm&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace square js&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;index&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;constant language boolean false js&quot;&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;maxAge&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1d&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;redirect&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;constant language boolean false js&quot;&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function json js&quot;&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;setHeaders&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;keyword operator assignment js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;path&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;x-timestamp&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support class js&quot;&gt;&lt;span&gt;Date&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;now&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;uploads&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;use&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;express&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;178&quot;&gt;&lt;strong&gt;Third-Party&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;179&quot;&gt;Application Level 및 Router Level에 서트파티 미들웨어 설정이 가능하다&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;180&quot;&gt;&lt;a href=&quot;http://expressjs.com/ko/resources/middleware.html&quot;&gt;대표적인 미들웨어 종류&lt;/a&gt;를 참고하여 설정하자.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;181&quot;&gt;Express의 경우, 초기버젼과 다르게 대부분 서드파티 미들웨어 사용을 권고하고 있다. 그렇기 때문에, 자주 사용하는 조합을 찾아놓고 사용하는 것이 개발 속도면에서나 안정성면에서나 유리하다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;183&quot; id=&quot;request-response&quot;&gt;Request &amp;amp; Response&lt;/h2&gt;
&lt;h3 class=&quot;line&quot; data-line=&quot;184&quot; id=&quot;express-어플리케이션-처리-흐름&quot;&gt;&lt;strong&gt;Express 어플리케이션 처리 흐름&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;185&quot;&gt;미들웨어를 선 처리&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;186&quot;&gt;개별 라우팅 주소 값에 맞는 라우팅 핸들러를 실행&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;187&quot;&gt;HTTP 요청에 대한 응답을 실행&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;line&quot; data-line=&quot;190&quot;&gt;&lt;img src=&quot;http://i.imgur.com/oGUSkq8.png&quot; alt=&quot;express-diagram&quot;&gt;&lt;/p&gt;&lt;p class=&quot;line&quot; data-line=&quot;192&quot;&gt;기본적으로, Request 및 Response는 객체이며 HTTP 요청과 응답과 관련된 매서드와 프로퍼티(상태값 등)을 가지고 있다. &lt;strong&gt;Query String, Parameter, Body, HTTP Header 기타 등등&lt;/strong&gt; 심지어 xhr 요청 유무까지 확인 가능한 프로퍼티가 있다. 너무 많기에 관련된 내용은 하단 링크를 통하여 확인하도록 하자&lt;/p&gt;
&lt;h3 class=&quot;line&quot; data-line=&quot;193&quot; id=&quot;요청-프로퍼티-매소드httpexpressjscomko4xapihtmlreq&quot;&gt;&lt;a href=&quot;http://expressjs.com/ko/4x/api.html#req&quot;&gt;요청 프로퍼티 &amp;amp; 매소드&lt;/a&gt;&lt;/h3&gt;
&lt;h3 class=&quot;line&quot; data-line=&quot;194&quot; id=&quot;응답-프로퍼티-매소드httpexpressjscomko4xapihtmlres&quot;&gt;&lt;a href=&quot;http://expressjs.com/ko/4x/api.html#res&quot;&gt;응답 프로퍼티 &amp;amp; 매소드&lt;/a&gt;&lt;/h3&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;196&quot; id=&quot;template-engine&quot;&gt;Template Engine&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Setting&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;view&amp;nbsp;engine&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;jade&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;pre class=&quot;editor-colors lang-javascript&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;comment line double-slash js&quot;&gt;&lt;span class=&quot;punctuation definition comment js&quot;&gt;&lt;span&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Router&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta function js&quot;&gt;&lt;span class=&quot;storage type function js&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters begin js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;req&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta object delimiter js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable parameter function js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition parameters end js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;variable other object js&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta delimiter method period js&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;entity name function js&quot;&gt;&lt;span&gt;render&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;punctuation definition arguments begin bracket round js&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string quoted single js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta delimiter object comma js&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;msg&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword operator js&quot;&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string quoted double js&quot;&gt;&lt;span class=&quot;punctuation definition string begin js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;HelloWorld!&lt;/span&gt;&lt;span class=&quot;punctuation definition string end js&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source js&quot;&gt;&lt;span class=&quot;meta method-call js&quot;&gt;&lt;span class=&quot;meta arguments js&quot;&gt;&lt;span class=&quot;meta brace curly js&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation definition arguments end bracket round js&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation terminator statement js&quot;&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;line&quot; data-line=&quot;209&quot;&gt;express에서 자주 사용하는 뷰 템플릿 엔진은 하단과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;210&quot;&gt;&lt;a href=&quot;https://github.com/pugjs/pug&quot;&gt;jade(pug)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;211&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/package/ejs&quot;&gt;ejs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;212&quot;&gt;&lt;a href=&quot;http://handlebarsjs.com/&quot;&gt;handlebars&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;line&quot; data-line=&quot;214&quot;&gt;React같이 View만을 전문적으로 처리하는 라이브러리가 유행이고, 동형(Isomorphic) 처리라고 하여 서버 사이드에서도 클라이언트 사이드(브라우저)와 같이 뷰를 렌더링하자 라는 테마가 요즘 유행이다.(하지만 나에게는 너무 어렵다…어려워…) 마지막으로 배우고 익혔던 AngularJS도 좋지만 이 녀석은 사용해야 할 성격이 분명히 존재하는거 같다(SEO가 필요한 사이트에서는 쥐약인듯)&lt;/p&gt;&lt;p class=&quot;line&quot; data-line=&quot;217&quot;&gt;아무튼 express에서 뷰 렌더링이 필요하다면 위 3개정도가 가장 현실적으로 사용할만한 템플릿 엔진인것은 분명하다. 만약 뷰단까지 같이 셋팅이 되어 있는 프로젝트가 필요하다면 &lt;a href=&quot;http://yeoman.io/&quot;&gt;Yeoman&lt;/a&gt;이나 &lt;a href=&quot;http://megaboilerplate.com/&quot;&gt;Mega Boilerplate&lt;/a&gt;에서 필요한 리소스를 확보하면 된다.&lt;/p&gt;
&lt;h2 class=&quot;line&quot; data-line=&quot;220&quot; id=&quot;참고&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;221&quot;&gt;&lt;a href=&quot;http://expressjs.com/&quot;&gt;Express.js&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class=&quot;line&quot; data-line=&quot;222&quot;&gt;&lt;a href=&quot;https://github.com/expressjs&quot;&gt;Express.js Github page&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programing/Node.js</category>
      <category>EJS</category>
      <category>Express.js</category>
      <category>Handlebars</category>
      <category>jade</category>
      <category>node.js</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/120</guid>
      <comments>https://stylishc.tistory.com/120#entry120comment</comments>
      <pubDate>Wed, 6 Jul 2016 19:07:40 +0900</pubDate>
    </item>
    <item>
      <title>[Sublime Text 3] 다시 설치하기.</title>
      <link>https://stylishc.tistory.com/105</link>
      <description>&lt;p&gt;기존 서브라임 텍스트2에서 지원 안되는 플러그인이 많기 때문에,&lt;/p&gt;&lt;p&gt;(서브라임 2나오고 계속 썼으니 대충 1년은 넘게 사용하다가 신규 버젼으로 설치)&lt;/p&gt;&lt;p&gt;새로이 서브라임 텍스트 3버젼으로 셋팅했음.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 최신 빌드 버젼으로 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- Portable 버젼을 추천함.&lt;/p&gt;&lt;p&gt;https://www.sublimetext.com/3&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2767AA4C574BD1AE2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2767AA4C574BD1AE2B&quot; width=&quot;820&quot; height=&quot;488&quot; filename=&quot;이미지 2.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. Package Control 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- view &amp;gt; show console 을 누르면 하단에 콘솔 입력창에 뜸. 해당 입력창에 하단 URL에서 제공하는 파이썬 코드를 입력하면 됨.&lt;/p&gt;&lt;p&gt;&amp;nbsp; https://packagecontrol.io/installation&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 787px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/225F534C574BD1AF32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F225F534C574BD1AF32&quot; width=&quot;787&quot; height=&quot;566&quot; filename=&quot;이미지 7.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;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;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 626px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2266CC4C574BD1AD2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2266CC4C574BD1AD2B&quot; width=&quot;626&quot; height=&quot;731&quot; filename=&quot;이미지 1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 플러그인 및 필요 패키치 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- SidebarEnhancements&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Material Theme(http://equinusocio.github.io/material-theme/)&lt;/p&gt;&lt;p&gt;&amp;nbsp;- ConvertToUTF8(인코딩 깨짐 설정)&lt;/p&gt;&lt;p&gt;&amp;nbsp;- IMEsupport(한글 입력 관련)&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Babel(ES6 highlighting)&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;4. 단축키 설정(Preferences &amp;gt; key bindings - user)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;※ 본인에게 필요한 단축키 값은 여기에 넣어놓으면 됨.&lt;/p&gt;&lt;p&gt;{&quot;keys&quot;: [&quot;ctrl+alt+m&quot;], &quot;command&quot;: &quot;toggle_menu&quot;} // Reindent(재정렬)&lt;/p&gt;&lt;p&gt;{&quot;keys&quot;: [&quot;ctrl+alt+m&quot;], &quot;command&quot;: &quot;toggle_menu&quot;} // Menu Toggle(상단 메뉴 Toggle)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;※ 설정 예시&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;[&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;keys&quot;&lt;/span&gt;:&amp;nbsp;[&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;ctrl+shift+i&quot;&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;command&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;reindent&quot;&lt;/span&gt;},&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//&amp;nbsp;Reindent&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;keys&quot;&lt;/span&gt;:&amp;nbsp;[&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;ctrl+alt+m&quot;&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;command&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;toggle_menu&quot;&lt;/span&gt;}&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//&amp;nbsp;Menu&amp;nbsp;Toggle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;]&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; border-radius: 10px; padding: 1px; background-color: rgb(79, 79, 79);&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 기타 유저 설정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;※ Material 테마 설치 후 사이드바 테마 적용이 안되는 문제가 있다.(문제까지는 아니고 설정을 변경을 안해놓는게 디폴트인거 같다.)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;b&gt;&quot;theme&quot;: &quot;Material-Theme.sublime-theme&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; -&amp;gt; 상단 json 내용을 넣어줘야지 사이드바까지 제대로 적용이 됨. &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-&amp;gt; 정상 테마 적용 후 화면&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/246ABE4C574BD1AF26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F246ABE4C574BD1AF26&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;이미지 5.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;※ 설정 예시&lt;/p&gt;&lt;p&gt;- Material theme 설정은 하단 참고 URL에 있으니, 가서 본인에게 맞는 설정으로 변경하면 됨.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;46&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;47&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;always_show_minimap_viewport&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;bold_folder_labels&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;color_scheme&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;Packages/Material&amp;nbsp;Theme/schemes/Material-Theme-OceanicNext.tmTheme&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;font_face&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;Monaco&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;font_options&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;gray_antialias&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;subpixel_antialias&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;font_size&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;13&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;ignored_packages&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;Vintage&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;indent_guide_options&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;draw_normal&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;draw_active&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;line_padding_bottom&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;3&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;line_padding_top&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;3&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_blue&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_cyan&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_indigo&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_lime&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_orange&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_pink&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_purple&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_red&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_accent_yellow&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_bold_tab&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_compact_panel&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_compact_sidebar&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_contrast_mode&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_disable_fileicons&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_disable_folder_animation&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_disable_tree_indicator&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_panel_separator&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_small_statusbar&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_small_tab&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_tabs_autowidth&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;material_theme_tabs_separator&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;overlay_scroll_bars&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;enabled&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;theme&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;Material-Theme.sublime-theme&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; border-radius: 10px; padding: 1px; background-color: rgb(79, 79, 79);&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;6. 참고&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://equinusocio.github.io/material-theme/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://equinusocio.github.io/material-theme/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/webzealer/sublime-text-editor-3-v14&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.slideshare.net/webzealer/sublime-text-editor-3-v14&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/27931448/why-do-sublime-text-3-themes-not-affect-the-sidebar&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://stackoverflow.com/questions/27931448/why-do-sublime-text-3-themes-not-affect-the-sidebar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://laracasts.com/discuss/channels/general-discussion/sublime-text-sidebar-styling&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://laracasts.com/discuss/channels/general-discussion/sublime-text-sidebar-styling&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.sitepoint.com/essential-sublime-text-javascript-plugins/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.sitepoint.com/essential-sublime-text-javascript-plugins/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programing</category>
      <category>Package Control</category>
      <category>SideBarEnhancements</category>
      <category>Sublime Text 2</category>
      <category>Sublime Text 3</category>
      <category>theme</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/105</guid>
      <comments>https://stylishc.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 30 May 2016 14:39:11 +0900</pubDate>
    </item>
    <item>
      <title>[Maven] 주요 개념 / 내용 정리</title>
      <link>https://stylishc.tistory.com/104</link>
      <description>&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;# Ant vs Maven&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1. Ant는 비교적 자유도가 높은 편&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;(Ant : 전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)&lt;/p&gt;&lt;p&gt;2. Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있음.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp;(Build Tool + Project Management)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;# Maven Pattern&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;1.&amp;nbsp;Build : Source/Test Code Compile&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;2. Package : WAR/JAR ETC package&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;3. Test : Unit Test, Test Result Check&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;4. Report : Build, Package, Test 결과 정리 및 문서화(Report 생성)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;5. Release : Build 후 생성된 결과물(Artifact)를 Local / Remote 환경(저장소)에 배포&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# Maven Key Concept / Keyword&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[MAIN]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;1. Plugin &amp;nbsp;: Goal의 집합(Goals) / 메이븐에서 실질적인 실행을 담당&lt;/p&gt;&lt;p&gt;2. LifeCycle : 기본 라이프사이클 / Clean 라이프 사이클 / Site 라이프사이클&lt;/p&gt;&lt;p&gt;3. Dependency : 라이브러리 의존성 관리(의존성 전이 / 스코프 등)&lt;/p&gt;&lt;p&gt;4. Profile : 배포 환경 정의(환경에 따른 배포 내용 정의 가능)&lt;/p&gt;&lt;p&gt;5. POM(Project Object Model)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[그 밖에]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;1. Archetype : Template Project를 지칭&lt;/p&gt;&lt;p&gt;2. Phase : 라이프사이클의 각 단계를 지칭&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;(compile / test / package / install / deploy)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;## Maven Project Structure Example&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-family: '맑은 고딕', sans-serif; font-size: 11pt; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;* [PROJECT]&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgb(44, 45, 48); font-family: Slack-Lato, appleLogo, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-family: '맑은 고딕', sans-serif; font-size: 11pt; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;|- src&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgb(44, 45, 48); font-family: Slack-Lato, appleLogo, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-family: '맑은 고딕', sans-serif; font-size: 11pt; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;| &amp;nbsp;|--main&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgb(44, 45, 48); font-family: Slack-Lato, appleLogo, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-size: 11pt; line-height: 22px; font-family: '맑은 고딕', sans-serif; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;| &amp;nbsp; &amp;nbsp; |--java&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-size: 11pt; line-height: 22px; font-family: '맑은 고딕', sans-serif; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;| &amp;nbsp; &amp;nbsp; |--resources&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-family: '맑은 고딕', sans-serif; font-size: 11pt; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;| &amp;nbsp;|--test&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgb(44, 45, 48); font-family: Slack-Lato, appleLogo, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&lt;span style=&quot;color: rgb(44, 45, 48); font-family: '맑은 고딕', sans-serif; font-size: 11pt; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&amp;nbsp;|- pom.xml&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgb(44, 45, 48); font-family: Slack-Lato, appleLogo, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(249, 249, 249);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;# Maven Plugin Reference URL&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;http://maven.apache.org/plugins/index.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/index.html&lt;/a&gt;)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;- resource : &lt;a href=&quot;http://maven.apache.org/plugins/maven-resources-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-resources-plugin/&lt;/a&gt;&lt;br /&gt;- clean &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/plugins/maven-clean-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-clean-plugin/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- site &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/plugins/maven-site-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-site-plugin/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- install &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/plugins/maven-install-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-install-plugin/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- compiler : &lt;a href=&quot;http://maven.apache.org/plugins/maven-compiler-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-compiler-plugin/&lt;/a&gt;&lt;br /&gt;- deploy &amp;nbsp; : &lt;a href=&quot;http://maven.apache.org/plugins/maven-deploy-plugin/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://maven.apache.org/plugins/maven-deploy-plugin/&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: none; border-radius: 4px; width: 619px; background-color: rgb(39, 39, 39);&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;619&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;#########################################&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;## Maven CommandLine Interface Example ##&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;#########################################&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;1.&amp;nbsp;기본&amp;nbsp;실행&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;[option]&amp;nbsp;[phase]&amp;nbsp;[plugin:goal]&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-&amp;nbsp;기본적으로&amp;nbsp;option,&amp;nbsp;phase,&amp;nbsp;plugin&amp;nbsp;등&amp;nbsp;조합하여&amp;nbsp;사용&amp;nbsp;가능&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;ex)&amp;nbsp;mvn&amp;nbsp;clean&amp;nbsp;test&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mvn&amp;nbsp;clean&amp;nbsp;package&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mvn&amp;nbsp;clean&amp;nbsp;install&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mvn&amp;nbsp;clean&amp;nbsp;dependency:copy-dependencies&amp;nbsp;package&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;2.&amp;nbsp;clean&amp;nbsp;라이프사이클,&amp;nbsp;clean&amp;nbsp;phase&amp;nbsp;실행&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;clean&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;3.&amp;nbsp;기본&amp;nbsp;라이프사이클&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-&amp;nbsp;각&amp;nbsp;phase는&amp;nbsp;이전&amp;nbsp;단계&amp;nbsp;및&amp;nbsp;관련&amp;nbsp;플러그인의&amp;nbsp;실행과&amp;nbsp;관련있음.&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;compile&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;test&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;package&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;install&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deploy&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;4.&amp;nbsp;최상위&amp;nbsp;pom.xml&amp;nbsp;내용&amp;nbsp;확인&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;- 기본적으로 최상위 pom.xml의 내용을 모두 상속받기 때문에, 확인 필요함.&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;help:effective-pom&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;5.&amp;nbsp;의존&amp;nbsp;라이브러리&amp;nbsp;리소스&amp;nbsp;복사(PROJECT#1/targer/dependency)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;dependency:copy-dependencies&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;6.&amp;nbsp;의존성&amp;nbsp;트리&amp;nbsp;내용&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;mvn&amp;nbsp;dependency:tree&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;7. eclipse 플러그인 사용 예제&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;   mvn eclipse:eclipse   : &lt;span style=&quot;line-height: 16.9px;&quot;&gt;.classpath, .project 파일 생성(이클립스 import 가능)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;   mvn eclipse:clean     : 위 파일 삭제&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; width: 171px;&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# 기타 참고 내용&lt;/b&gt;&lt;br /&gt;&amp;nbsp;- pom.xml -&amp;gt; &amp;lt;repositories&amp;gt; 설정에서 &amp;lt;snapshots&amp;gt;, &amp;lt;release&amp;gt; 쪽 설정을 적절하게 바꿔주지 않으면 새로 올려오는 스냅샷이나 릴리즈&lt;br /&gt;를 기본적으로 가져오기 때문에, 의도치 않은 오류가 발생할 수 있다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[예시]&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;pre class=&quot;lang-xml prettyprint prettyprinted&quot; style=&quot;margin-top: 0px; margin-bottom: 1em; padding: 5px; border: 0px; width: auto; max-height: 600px; overflow: auto; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; color: rgb(57, 51, 24); word-wrap: normal; background-color: rgb(239, 240, 241);&quot;&gt;&lt;code style=&quot;margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; white-space: inherit;&quot;&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;repositories&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;you-snapshots&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;url&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;http://host/repo/snapshots&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;snapshots&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;updatePolicy&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;always / daily / never&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/updatePolicy&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/snapshots&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;releases&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;updatePolicy&amp;gt;&lt;span style=&quot;color: rgb(48, 51, 54); white-space: inherit;&quot;&gt;always / daily / never&lt;/span&gt;&lt;span style=&quot;white-space: inherit;&quot;&gt;&amp;lt;/updatePolicy&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/releases&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; color: rgb(125, 39, 39);&quot;&gt;&amp;lt;/repositories&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;참고 :&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;http://maven.apache.org/ref/3.2.2/maven-settings/settings.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-weight: bold;&quot;&gt;http://maven.apache.org/ref/3.2.2/maven-settings/settings.html&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/104</guid>
      <comments>https://stylishc.tistory.com/104#entry104comment</comments>
      <pubDate>Tue, 19 Apr 2016 17:12:26 +0900</pubDate>
    </item>
    <item>
      <title>[Mybatis] Stored Procedure 호출 샘플</title>
      <link>https://stylishc.tistory.com/103</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. mapper.xml Sample&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;display:inline-block; background-color:#010101; &quot;&gt;&lt;div&gt;&lt;table style=&quot;font-size: 13px; font-family: NanumGothicCoding, 나눔고딕코딩, 나눔고딕, NanumGothic, 돋움, Dotum; white-space: nowrap !important; width: 692px;&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;692&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;margin:0; padding:0;&quot;&gt;&lt;td style=&quot;color:#FFFFFF; margin:0; padding:0 3px; text-align:right; background-color:#010101; border-right:3px solid #FFCC00&quot;&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;3&lt;/div&gt;&lt;div&gt;4&lt;/div&gt;&lt;div&gt;5&lt;/div&gt;&lt;div&gt;6&lt;/div&gt;&lt;div&gt;7&lt;/div&gt;&lt;div&gt;8&lt;/div&gt;&lt;div&gt;9&lt;/div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;margin: 0px; padding: 0px 3px; color: rgb(255, 255, 255); white-space: nowrap !important; width: 671px;&quot; nowrap=&quot;&quot;&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#FFFF00&quot;&gt;&amp;lt;update&amp;nbsp;id=&lt;font color=&quot;#99FF00&quot;&gt;&quot;testProc&quot;&lt;/font&gt;&amp;nbsp;statementType=&lt;font color=&quot;#99FF00&quot;&gt;&quot;CALLABLE&quot;&lt;/font&gt;&amp;nbsp;parameterType=&lt;font color=&quot;#99FF00&quot;&gt;&quot;HashMap&quot;&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;call sp_test_procedure(&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;#{p1},&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;#{p2,jdbcType=VARCHAR},&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;#{p3},&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;#{p4,jdbcType=VARCHAR},&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;#{p5,jdbcType=VARCHAR}&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#FFFF00&quot;&gt;&amp;lt;/update&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;- statementType 속성 값에 &quot;CALLABLE&quot;을 지정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- SELECT, INSERT, DELETE, UPDATE, SELECTKEY 구문에서 사용 가능.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 리턴 받는 내용이 있으면, #{} 안 내용을 하단과 같이 기술&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;#{p1, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=test}&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ※ reseultmap 구문 지정해줘야 함.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ex) &lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&quot;&amp;lt;resultMap id=&quot;procTestMap&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&quot; type=&quot;HashMap&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&quot;&amp;gt;&amp;lt;/resultMap&amp;gt;&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. Java Code Sample(DAO)&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;display:inline-block; background-color:#010101; &quot;&gt;&lt;div&gt;&lt;table style=&quot;font-size: 13px; font-family: NanumGothicCoding, 나눔고딕코딩, 나눔고딕, NanumGothic, 돋움, Dotum; white-space: nowrap !important; width: 692px;&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;692&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;margin:0; padding:0;&quot;&gt;&lt;td style=&quot;color:#FFFFFF; margin:0; padding:0 3px; text-align:right; background-color:#010101; border-right:3px solid #FFCC00&quot;&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;3&lt;/div&gt;&lt;div&gt;4&lt;/div&gt;&lt;div&gt;5&lt;/div&gt;&lt;div&gt;6&lt;/div&gt;&lt;div&gt;7&lt;/div&gt;&lt;div&gt;8&lt;/div&gt;&lt;div&gt;9&lt;/div&gt;&lt;div&gt;10&lt;/div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;margin: 0px; padding: 0px 3px; color: rgb(255, 255, 255); white-space: nowrap !important; width: 671px;&quot; nowrap=&quot;&quot;&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&amp;nbsp;testMap&amp;nbsp;=&amp;nbsp;&lt;font color=&quot;#FF0000&quot;&gt;new&lt;/font&gt;&amp;nbsp;HashMap&amp;lt;&lt;font color=&quot;#FFFF00&quot;&gt;String&lt;/font&gt;,&amp;nbsp;Object&amp;gt;();&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testMap.put(&lt;font color=&quot;#99FF00&quot;&gt;&quot;p1&quot;&lt;/font&gt;,&amp;nbsp;378);&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testMap.put(&lt;font color=&quot;#99FF00&quot;&gt;&quot;p2&quot;&lt;/font&gt;,&amp;nbsp;&lt;font color=&quot;#99FF00&quot;&gt;&quot;01001&quot;&lt;/font&gt;);&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testMap.put(&lt;font color=&quot;#99FF00&quot;&gt;&quot;p3&quot;&lt;/font&gt;,&amp;nbsp;&lt;font color=&quot;#99FF00&quot;&gt;&quot;100&quot;&lt;/font&gt;);&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testMap.put(&lt;font color=&quot;#99FF00&quot;&gt;&quot;p4&quot;&lt;/font&gt;,&amp;nbsp;&lt;font color=&quot;#99FF00&quot;&gt;&quot;테스트&quot;&lt;/font&gt;);&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testMap.put(&lt;font color=&quot;#99FF00&quot;&gt;&quot;p5&quot;&lt;/font&gt;,&amp;nbsp;&lt;font color=&quot;#99FF00&quot;&gt;&quot;SYSTEM&quot;&lt;/font&gt;);&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color:#010101&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MySql.update(&lt;font color=&quot;#99FF00&quot;&gt;&quot;mapper.testProc&quot;&lt;/font&gt;,&amp;nbsp;testMap);&lt;/div&gt;&lt;div style=&quot;background-color:#0F0F0F&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#FFFF00&quot;&gt;System&lt;/font&gt;.&lt;font color=&quot;#FFFF00&quot;&gt;out&lt;/font&gt;.&lt;font color=&quot;#FFFF00&quot;&gt;println&lt;/font&gt;(testMap);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;3. 참고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&amp;nbsp; http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html&lt;/span&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/103</guid>
      <comments>https://stylishc.tistory.com/103#entry103comment</comments>
      <pubDate>Mon, 29 Feb 2016 17:38:34 +0900</pubDate>
    </item>
    <item>
      <title>[Intellij] 01. 인텔리J 시작하기(맥)</title>
      <link>https://stylishc.tistory.com/100</link>
      <description>&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;01. Setting &amp;amp; Guide &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;01-01 키 셋팅 &amp;amp; 키 바인딩&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;기본적으로 나는 이클립스 &amp;amp; 윈도우 유저로 새롭게 맥북에서 적응하는 것도 중요하지만... 무엇보다 나의 돈벌이(?)와 관련이 있는 개발툴 단축키가 무엇보다 중요하다.&lt;/p&gt;&lt;p&gt;그래서 일단 인텔리J 설치 후(설치는 어렵지 않습니다. 공식 홈페이지를 참고해주세요.) 바로 키 바인딩 셋팅부터 들어갔다.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하단 이미지는 일단 이클립스와 인텔리J에서 사용하는 주요 용어의 차이점을 보여주는 도표이다.&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/2655194C56EEA51331&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2655194C56EEA51331&quot; width=&quot;820&quot; height=&quot;251&quot; filename=&quot;스크린샷 2016-03-20 오후 10.26.23.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &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 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/2467914A56C9D44C0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2467914A56C9D44C0F&quot; width=&quot;820&quot; height=&quot;425&quot; filename=&quot;스크린샷 2016-02-22 오전 12.13.54.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.jetbrains.com/idea/help/discover-intellij-idea.html#UserInterface&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.jetbrains.com/idea/help/discover-intellij-idea.html#UserInterface&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(역시 공식 레퍼런스가 최고다! 이건 웹페이지에서 제공해주는 키 바인딩 관련 튜토리얼)&lt;/p&gt;&lt;p&gt;: But! 제공해주는 내용중 버젼과 동일하지 않은 키가 있음. 버젼에 해당하는 녀석은 설정(Preference)에서 찾아서 확인하면서 익히도록 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; 간단하게 따라하면서 진행하는 것을 추천한다. 직접 프로젝트 생성 후 간단한 소스 입력 후 진행!&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 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/2170C14656C9D47F06&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2170C14656C9D47F06&quot; width=&quot;820&quot; height=&quot;486&quot; filename=&quot;스크린샷 2016-02-22 오전 12.14.55.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://resources.jetbrains.com/assets/products/intellij-idea/IntelliJIDEA_ReferenceCard_mac.pdf&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://resources.jetbrains.com/assets/products/intellij-idea/IntelliJIDEA_ReferenceCard_mac.pdf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(키 맵 관련 PDF)&lt;/p&gt;&lt;p&gt;: PDF로 제공해주는 키 바인딩 관련 문서이다. 영어 능력이 좋고 배움이 빠르신 분들은 바로 여기서 키 내용을 확인 후 직접 적용해보시면 되겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;키 바인딩 및 키맵 설정을 보면서 발견한 문서가 있었는데, 이클립스와 비교하여 단축키를 설명하는 페이지였다.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.jetbrains.com/help/idea/2016.1/eclipse.html?origin=old_help&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.jetbrains.com/help/idea/2016.1/eclipse.html?origin=old_help&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기존에 이클립스에서 자주 사용하던 키와 인텔리J에서 제공하는 키의 비교문서라 그런지 더 읽기가 편했다.&lt;/p&gt;&lt;p&gt;특히 인상 깊었던 부분이 바로 템플릿 사용 부분이었다.&amp;nbsp;&lt;span style=&quot;line-height: 1.5;&quot;&gt;윈도우 - 이클립스 환경에서 sysout, main 등 템플릿화 시켜서 쓰는 키워드들이 많았는데 인텔리J 역시 기본으로 제공하는 템플릿 키워드가 여러개 있었는데 몇번 예제 코드를 작&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;성하다보니 꽤 쓸만하고 오히려 더 편리하게 느껴졌다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;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/23053D3C56EEA45E26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23053D3C56EEA45E26&quot; width=&quot;820&quot; height=&quot;426&quot; filename=&quot;스크린샷 2016-03-20 오후 10.20.32.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;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>Programing</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/100</guid>
      <comments>https://stylishc.tistory.com/100#entry100comment</comments>
      <pubDate>Mon, 22 Feb 2016 00:09:31 +0900</pubDate>
    </item>
    <item>
      <title>[Mac Life] 창 이동하기 / 무료 앱</title>
      <link>https://stylishc.tistory.com/99</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;맥 프로를 구매하고 (무려 300만원 가까이 지출을 했다.)... 사실 제대로 활용을 못하고 있다.(회사에서 맥을 사용하지 않다보니 빠르게 친해지지가 않는다 하....)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래도 집에서는 간단한 샘플 소스라도 셋팅해놓고 짜고 있으니....그나마 다행이라고 할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;맥에서 작업하다보니 윈도우에서 아무 생각없이 사용했던 단축키를 사용하지 못하는 불편함이 있다. 특히!! 창을 줄이고 키우는 단축키를 윈도우에서는 즐겨 사용했었는데, 맥에는 요런 녀식이 없나해서.. 찾아봤다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://spectacleapp.com&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://spectacleapp.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p 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/24692A4E56C9D3B91A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24692A4E56C9D3B91A&quot; width=&quot;820&quot; height=&quot;737&quot; filename=&quot;스크린샷 2016-02-22 오전 12.11.32.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;무료앱으로 간단하게 사이트 접속 후 다운을 받고 실행 시키면 끝!&lt;/p&gt;&lt;p&gt;(설정은 맞춰줘야 하며, login at launch를 해줘야지 재부팅 상황에도 적용이 된다.)&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 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/2338B34A56C9D38C27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2338B34A56C9D38C27&quot; width=&quot;820&quot; height=&quot;709&quot; filename=&quot;스크린샷 2016-02-21 오후 11.35.09.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;단축키의 경우 앱을 실행시키면 볼 수 있으니 참고하면 되겠다.&lt;/p&gt;&lt;p&gt;( 풀 사이즈 단축키의 경우 &lt;b&gt;control + command + f -&amp;gt; &lt;/b&gt;요 녀석은 지원이 안되니 이거는 그냥 사용하면 될듯)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참고로 나 같은 경우에는 다른 단축키(개발툴)에서 단축키와 겹치는 문제가 발생했는데, 이런 경우에는 한쪽(스팩타클 혹은 개발툴이나 기타 툴)에서 키 바인딩을 바꿔줘서 겹치지 않도록 하는 것이 좋겠다. 물론 나같이 맥 허접들은.... 손에 익은 툴보다는 덜 익숙한 툴에 있는 키를 바꾸는 것이 유리하겠지만.....&lt;/p&gt;</description>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/99</guid>
      <comments>https://stylishc.tistory.com/99#entry99comment</comments>
      <pubDate>Fri, 19 Feb 2016 23:55:21 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] JDK Version 변경</title>
      <link>https://stylishc.tistory.com/94</link>
      <description>&lt;p&gt;&lt;b style=&quot;line-height: 1.5;&quot;&gt;Apple Java_home 관련 문서&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/library/prerelease/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://developer.apple.com/library/prerelease/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;line-height: 1.5;&quot;&gt;IntelliJ에서 Java와 Gradle 버전 설정하기 (Spring Boot)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;: ~/.bash_profile 설정, $JAVA_HOME 변경 처리&lt;/p&gt;&lt;p&gt;- &lt;a href=&quot;http://blog.saltfactory.net/java/setting-java-and-gradle-version-in-intellij.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://blog.saltfactory.net/java/setting-java-and-gradle-version-in-intellij.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;terminal)&lt;/b&gt; cd&lt;/p&gt;&lt;p&gt;&lt;b&gt;terminal)&lt;/b&gt; sudo nano&amp;nbsp;&lt;span style=&quot;line-height: 1.5;&quot;&gt;~/.bash_profile&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;b&gt;terminal)&lt;/b&gt;&amp;nbsp;&lt;span style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 17.02400016784668px;&quot;&gt;source ~/.bash_profile&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;JDK VersionChanger&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- &lt;a href=&quot;http://javakorean.com/?p=1993&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://javakorean.com/?p=1993&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- &lt;a href=&quot;http://www.guigarage.com/2013/02/change-java-version-on-mac-os/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.guigarage.com/2013/02/change-java-version-on-mac-os/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Shell Script 작성하여 JDK 버젼 변경하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- &lt;a href=&quot;http://stackoverflow.com/questions/21964709/how-to-set-or-change-the-default-java-jdk-version-on-os-x&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://stackoverflow.com/questions/21964709/how-to-set-or-change-the-default-java-jdk-version-on-os-x&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/94</guid>
      <comments>https://stylishc.tistory.com/94#entry94comment</comments>
      <pubDate>Thu, 14 Jan 2016 10:13:07 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 4장 내용 정리</title>
      <link>https://stylishc.tistory.com/93</link>
      <description>&lt;p&gt;&lt;b&gt;1. 데이터베이스를 사용한 인증 적용&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 기본 스키마 적용 / 사용할 DB 설정&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;lt;jdbc-user-service&amp;gt;에 datasource를 참조하도록 하여 security.xml파일 수정&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 기본 예제와 다른 점은 UserDetailService에 대한 구체적인 구현 내용&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;(JdbcDaoImpl를 상속하여 Custom UserDetailService 클래스를 생성)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 스프링 시큐리티에서는 JDBC 데이터베이스와 관련 일반적인 CRUD 기능을 제공함.&lt;/p&gt;&lt;p&gt;&amp;nbsp; (JdbcUserDetailsManager 빈 선언 및 CRUD 기능을 제공하는 UserDetailManager 인터페이스 매소드를 구현하여 실질적인 유머와 관련된 CRUD 작업 내용으로 작성)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- JdbcDaoImpl의 주요 기능 중 하나는 GratedAuthority를 그룹으로 분류, 간접 레벨을 두어 개별 그룹에 대해 권한 부여가 가능함. =&amp;gt; Group-Based-Access Control, GABC)라고 함.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- UserInfo, User, Group, GroupPermission, Permission 스키마를 사용하여 JdbcDaoImpl을 수정&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;userByUsernameQuery, authoritiesByUsernameQuery, groupAuthoritiesByUsernameQuery 등의 쿼리명을 사용하여 사용자, 권한 및 그룹 권환을 반환(JdbcUserService XML 설정에 해당 퀴리의 내용을 삽입하여 적용)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 보안 비밀번호 설정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 비밀번호 적용 규칙&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;비밀번호는 텍스트로 저장해서는 안됨&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;사용자가 제공한 비밀번호와 저장소에 저장된 값과 비교하는 과정이 있어야 함.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;비밀번호는 바로 제공되어서는 안됨&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Password Encoder 사용&lt;/p&gt;&lt;p&gt;&amp;nbsp; PlaintextPasswordEncoder : 일반 텍스트 인코딩 처리&lt;/p&gt;&lt;p&gt;&amp;nbsp; Md4PasswordEncoder : MD4 해리 알고리즘을 사용, 안전한 알고리즘이 아님&lt;/p&gt;&lt;p&gt;&amp;nbsp; Md5PasswordEncoder : MD5 단방향 인코딩 알고리즘 사용&lt;/p&gt;&lt;p&gt;&amp;nbsp; ShaPasswordEncoder &amp;nbsp;: 단방향 인코딩 알고리즘 사용, 인코딩 레벨을 설정할 수 있는 기능이 있음.&lt;/p&gt;&lt;p&gt;&amp;nbsp; LdapShaPasswordEncoder : LDAP 인증 저장소, 9장에서 자세히&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 비밀번호 인코딩은 해당하는 클래스 빈을 설정하여 XML 설정을 진행.&lt;/p&gt;&lt;p&gt;&amp;nbsp; (해당 빈 설정 후, SQL에서 로드한 비밀번호를 인코딩 처리, initMethod 지정)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 비밀번호 솔트 제공&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&amp;nbsp;- 저장소에 존재할 수 있는 동일한 인코딩 값은 잠재적인 보안 문제로 이어질 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 솔팅(Salting 적용)(인코딩된 데이터에 약간의 데이터 추가를 하는 개념)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;사용자 생성 시점의 날짜 데이터, 랜덤 텍스트 등&lt;/p&gt;&lt;p&gt;&amp;nbsp;- SaltSource 빈 생성, PasswordEncoder설정에 Salt-Source를 추가하여 빈 설정 완료&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. SSL을 사용한 사이트 보안&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- HTTPS(SSL / TLS) 적용&lt;/p&gt;&lt;p&gt;&amp;nbsp;- SSL 사용을 위한 톰캣 설정 및 키 저장소 생성&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 톰캣 SSL 커넥터 생성 및 &amp;lt;http&amp;gt; 설정에서의 채널로 https 설정(https, any, http)&lt;/p&gt;&lt;p&gt;&amp;nbsp; (보호된 영역과 보호되지 않는 영역에 따라서 해당 require-channel 설정 처리)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 포트 맵핑(80/443) 이외에 명시적으로 다른 포트를 사용할 수 있음.(&amp;nbsp;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&amp;lt;port-mappings&amp;gt;설정 )&lt;/span&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/93</guid>
      <comments>https://stylishc.tistory.com/93#entry93comment</comments>
      <pubDate>Sat, 2 Jan 2016 23:23:48 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 3장 내용 정리</title>
      <link>https://stylishc.tistory.com/92</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;[스프링 시큐리티 3장 정리]&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;스프링 시큐리티는 기본 Security 네임스페이스 설정을 사용하더라도 기본적인 로그인, 인증, 권한부여의 기능 구현이 가능함.&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;1. 로그인 / 로그아웃 이해&lt;br /&gt;&amp;nbsp;- 헤더/푸터 페이지 구성(태그 라이브러리를 활용)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 폼 액션의 경우, UsernamePasswordAuthentification 서블릿 필터에서 설정한 액션과 일치해야 함.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;폼의 기본 액션 값은 j_spring_security&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- &amp;lt;intercept-url&amp;gt;태그 설정을 통하여 로그인 페이지로 접근할 수 있는 URL 및 액세스 권한을 설정해야 함&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎&amp;nbsp;스프링 시큐리티의 모든 URL 요청에 대해 위에서 아래로 내려오는(top to bottom) 순서대로 권한부여 규칙을 해석해 적용&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ ex)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;lt;intercept-url pattern=&quot;/login.do&quot; access=&quot;permitAll&quot;&amp;gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;lt;intercept-url pattern=&quot;/*&quot; access=&quot;hasRole(&quot;ROLE_USER&quot;)&quot;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 로그아웃은 일반적으로 사이트에서 보호되지 않은 영역으로의 이동/리다이렉트를 뜻함.&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 모든 URL 요청은 서블릿 요청으로 리졸브되기 전에, 항상 필터 체인을 통과함.(중요)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ ex)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;lt;logout invalidate-session=&quot;true&quot;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;logout-sucess-url=&quot;/&quot;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;logout-url=&quot;/j_spring_security_logout&quot; /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;: /j_spring_security_logout의 경우, 컨트롤러 및 서블릿에 맴핑된 실제 주소가 아닌, 가상의 url&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;logout-success-url 속성의 경우, 로그아웃이 정상적으로 수행된 후 리다이렉트 될 주소에 대한 설정&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;▶︎ 로그아웃은 크게 3단계로 이뤄짐 -&amp;gt; 세션 무효화 / SecurityContext초기화 / logout-sucess-url에 지정된 url redirect&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;▶︎ LogoutHandler 구현이 직접 가능하며, 세션 초기화 및 사용자 인증 관련 정보가 남지 않도록 할 수 있다.&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;-&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;2. Remember Me 기능 구현&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 쿠키를 암호화하고, 사용자 브라우저에 저장해 재방문하는 사용자를 기억하는 기능&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; : rememberMe 쿠키 값을 가지고 있으면, 별도의 인증 절차를 거치지 않고 로그인 및 인증 처리&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 기본 설정&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;lt;remember-me key='jbcpPetStore'&amp;gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ key : 쿠기에 대한 고유값 / token-validity-seconds : 시간 범위를 설정, 설정 시간에만 유효(초단위)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 동작 원리&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 사용자명 / 쿠기 만료 일자 / 만료 일자, 사용자명, 비밀번호에 대한 MD5 해시값 / remember-me태그 기본 key 값&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; : 기본적으로 base64 인코딩 처리 =&amp;gt; 임의 길이를 갖는 압축된 텍스트로 반환(다이제스트)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 입력이 된 값의 인코딩된 값과 저장되어 있는 인코딩값과 비교 검증을 통하여 일치 유무 판단&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; : 쿠키 값을 디코딩 후 검증&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- 완전히 인증된 세션과 rememberMe를 이용한 세션의 구분이 분명하게 필요&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ rememberMe 세션에 대해서는 완전한 인증(fullyAuthenticated)을 받도록 해야 함.&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;lt;intercept-url&amp;gt; 설정 및 내부의 SpEL 표현식의 조합을 통하여 설정 가능&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- IP주소를 인식하는 rememberMe 서비스 개발&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 클라이언트의 IP 주소를 기반으로 하여, MD5 해시값을 생성하여 http 통신 중에 발생할 수 있는 악의적인 접근에 대해서&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 차단이 가능함.&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ TokenBasedRememberMeServices 부모 클래스를 상속, onLoginSuccess,&amp;nbsp;makeTokenSignature, setCookie 및&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; processAutoLoginCookie 매서드를 오버라이드하여 IP주소를 받아오고 이를 적절하게 변환처리하여 rememberMe 쿠키값에&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 저장할 수 있도록 오버라이드 메소드 로직을 구성.&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 위에서 작성된 rememeberMe 서비스에 대해서는 빈을 등록하여 (위에서 작성한 클래스에 설정자 초기화를 통하여) 이를&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;remember-me&amp;gt; 설정에서 참조할 수 있도록 service-ref 속성값을 지정.&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ 추가적으로 &amp;lt;remember-me&amp;gt; 속성값 설정을 통하여 폼에서 넘어오는 remember_me 값에 대해서 사용자가 지정이 가능&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;3. 비밀번호 찾기 및 사용자 관리 기능 개선,추가&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- UserDetailService 인터페이스 구현체를 상속하여 기본 기능 제공&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; (인메모리 기반으로 디비 및 저장방식에 얽매이지 않고 프레임워크에서 제공하는 확장 기능의 흐름과 설계에만 집중)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; (하드코딩된 사용자 목록을 사용하여 단위 테스트를 작성할떄 주로 사용)&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp;- InMemoryDaoImpl 인메모리 크리덴셜 저장소를 사용하여 UserDetails를 저장&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp;▶︎ InMemoryChangePasswordDaoImpl을 사용하여 InMemoryDaoImpl 상속 및 시큐리티 설정&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: -apple-system-font; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/92</guid>
      <comments>https://stylishc.tistory.com/92#entry92comment</comments>
      <pubDate>Tue, 22 Dec 2015 23:34:18 +0900</pubDate>
    </item>
    <item>
      <title>[Github] README.md 쉽게 작성하기</title>
      <link>https://stylishc.tistory.com/90</link>
      <description>&lt;p&gt;Github을 시작하면서 마스터 브랜치를 가지고 지속적으로 커밋을 날리고 있다. 물론 로컬에서 브랜치를 따로 만들어서 작업을 해보기도 했었지만, 아직 SVN에 더 익숙해서 git 명령어나 예외상황을 좀 더 지켜본 뒤 브랜치를 여러개를 만들어서 실험적(?)인 작업을 해볼 생각이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그전에 올린 소스에 대해서 쫌 세세하게 이력? 혹은 요약을 하고 싶은 생각에 README.md라는 녀석을 수정해보려고 하는데 요녀석(?)이 그냥 마크업 문법이 아닌 다른 문법을 가지고 있는 것이었다.&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: 12pt;&quot;&gt;1) StackEdit(&lt;a href=&quot;https://stackedit.io/editor&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://stackedit.io/editor&lt;/a&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;웹 기반 에디터로 접속하게 되면, 간단한 영어로 튜토리얼을 진행한다.(레이어 팝업 형식으로) 사용법은 간단하고, 인트로 페이지에 사용법에 대한 내용도 나와 있으니 참고하도록 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/254AE73E5666854426&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F254AE73E5666854426&quot; width=&quot;650&quot; height=&quot;366&quot; filename=&quot;이미지 3.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) MarkdownPad(&lt;a href=&quot;http://www.markdownpad.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.markdownpad.com/&lt;/a&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;설치형/포터블 둘 중에 선택할 수 있으며, 위에 있는 StackEdit와 둘다 써본 결과, 요녀석이 좀 더 편하다는 생각이 들었다.(웹으로 접속안하고, 포터블버젼을 다운받아서 사용하기 때문에 편리한듯?) 단축키에 대한 설명도 간단하게 인트로 페이지에 나와 있어서 금방 적응하여 사용 가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24294B495666859F31&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24294B495666859F31&quot; width=&quot;650&quot; height=&quot;366&quot; filename=&quot;이미지 4.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;※ 라이센스가 존재한다! 상업용으로 사용할 경우에는 제한이 있으니, 확인하고 사용하자.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Programing/Git</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/90</guid>
      <comments>https://stylishc.tistory.com/90#entry90comment</comments>
      <pubDate>Tue, 8 Dec 2015 16:26:01 +0900</pubDate>
    </item>
    <item>
      <title>SVN(SubVersion) 백업 및 이관</title>
      <link>https://stylishc.tistory.com/78</link>
      <description>&lt;p&gt;&lt;b&gt;- VisualSVN 사용 기준(2.1.2)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- 운영체제 : Windows Server 2008 R2 Standard&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 85, 255);&quot;&gt;방법 1) svnadmin dump를 이용한 방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;: SVN 로그 및 리비젼을 모두 dump 뜨는 방식인거 같은데 이번에 이관 작업은 서버에 있던 데이터를 &lt;br /&gt;&amp;nbsp;모두 옮기는 작업이라서 이렇게 할 필요가 없었음. 방법은 아래와 같음&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(254, 254, 184); padding: 10px; background-color: rgb(254, 254, 184);&quot;&gt;&lt;p&gt;&lt;b&gt;○ 백업&lt;/b&gt;&lt;/p&gt;&lt;p&gt;: SVN 이 설치된 폴더 콘솔(설치경로\bin)에서&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;'svnadmin dump C:\Repositories\Project &amp;gt; Project.dump' 명령어를 실행하여 덤프파일을 생성한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;○ 백업 복구 방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 복구할 저장소를 먼저 생성한다. (방법은 2가지이다.)&lt;/p&gt;&lt;p&gt;- VisualSVN Server Manager를 이용하여 Project 저장소를 만들어도 됨.&lt;/p&gt;&lt;p&gt;- 'svnadmin create C:\Repositories\Project' 명령어를 실행하여 Project 저장소를 생성하여도 된다.&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;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;- 'svnadmin load C:\Repositories\Project &amp;lt; Project.dump' 명령어를 실행하여 덤프 파일을 SVN 서버에 복구&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- VisualSVN Sever Manager을 refresh하여 복구된 Repositories를 확인한다.(그냥 누르기도 귀찮으면 재시작 하자)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;○ 참고자료&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;: &lt;a href=&quot;http://ppusari.blogspot.kr/2015/02/svn.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://ppusari.blogspot.kr/2015/02/svn.html&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;: &lt;a href=&quot;https://www.visualsvn.com/support/svnbook/reposadmin/maint/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.visualsvn.com/support/svnbook/reposadmin/maint/&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;(뭐니뭐니 해도 공식 메뉴얼이 짱인거 같음, 대신 머리부터 발끝까지 조선 사람들은 힘들 수 있음)&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 85, 255);&quot;&gt;방법 2) Full BackUp(추천)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;: &lt;b&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;방법1)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;같은 경우에는 운영체제가 다른 경우(Windows -&amp;gt; Unix 계열 등)으로 옮길때 사용해야 할듯 싶고, &lt;br /&gt;&amp;nbsp;동일한 운영체제의 경우 풀백업을 사용하는 것이 빠르고 안전한거 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(254, 254, 184); padding: 10px; background-color: rgb(254, 254, 184);&quot;&gt;&lt;p&gt;&lt;b&gt;○ 백업 및 복구 방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 백업할 데이터(일반적으로 &lt;b&gt;C:\Repositories&lt;/b&gt;)를 복사&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 이관하는 서버쪽에 동일한 버젼의 &lt;b&gt;VisualSVN&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;br /&gt;&lt;/p&gt;&lt;p&gt;- 복사한 Repositories 폴더를 이관하는 서버쪽에 동일하게 붙여넣기 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- VisualSVN을 실행하여 보면 유저 데이터 및 리비젼 데이터가 기존에 사용하던 SVN 서버와 동일하게 보일 것이다.&lt;/p&gt;&lt;p&gt;: &lt;b&gt;Repositories 폴더에 authz, authz-windows, htpasswd 파일이 동일하게 복사되므로, User도 동일하게 복구 됨&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;- 다른 툴은 어떻게 될지 모르겠지만 Eclipse의 경우, 기존 레파지토리 메뉴 중 Relocate 메뉴를 선택하여 바뀐 주소로 변경을 처리할 수 있다.(주소 값만 바꾸면 되니깐 편리하다)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;○ 백업 중 발생한 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;오류 및 이슈&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 백업 완료 후, 커밋 테스트를 진행하는데 발생한 오류가 있었다. 아래와 같음&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;(OOOO는 폴더명)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(254, 254, 184); padding: 10px; background-color: rgb(254, 254, 184);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;svn: Can't open file 'C:\Repositories\OOOO\db\txn-current-lock': 액세스가 거부되었습니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;svn: MKACTIVITY of '/svn/OOOO/!svn/act/OOOOOOOOO': 500 Internal Server Error (http://IP주소:포트)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 검색을 해보니, &lt;b&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;Repositories 폴더의 권한과 관련이 있는 이슈로, 해당 폴더의 User 계정 셋팅을 다시 해주면 되는 것으로 해결&lt;/span&gt;&lt;/b&gt;할수 있었다.&lt;b&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;(권한 설정은 읽기, 쓰기, 수정이 모두 가능한 것으로 바꾸면 된다. 운영체제마다 설정하는 방법이 상이하므로 나머지는 검색을 통하여 해결하도록 하자)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/SVN</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/78</guid>
      <comments>https://stylishc.tistory.com/78#entry78comment</comments>
      <pubDate>Mon, 5 Oct 2015 13:17:18 +0900</pubDate>
    </item>
    <item>
      <title>이클립스 속도 향상 (eclipse.ini 수정)</title>
      <link>https://stylishc.tistory.com/69</link>
      <description>&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;주력 통합개발환경인&amp;nbsp;이클립스 환경 설정에 관련된 포스팅을 남겨본다. PC환경이 조금이라도 안좋은 경우(예를 들어 램이 모자라거나 CPU 사양이 낮거나.... 혹은 SSD를 사용 안하거나...)는 진짜 이클립스 쓰기에 뻑뻑한게 현실이다. 이럴 경우 이클립스에서 사용하는 JVM쪽 설정을 조금 다시 셋팅하여 사용하는 것이 그나마 속도 개선이 좋은 부분이 있기 때문에 평소 사용하는 설정 부분을 포스팅하려고 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; line-height: 22px; font-size: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 85, 255);&quot;&gt;&amp;lt;eclipse.ini&amp;gt; // STS의 경우 STS.ini&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: none; border-radius: 4px; width: 658px; background-color: rgb(39, 39, 39);&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;658&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;#######################&amp;nbsp;eclipse.ini&amp;nbsp;#################################&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-vmargs-Dosgi.requiredJavaVersion=1.6&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-Xverify:none-XX:+UseParallelGC-XX:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-UseConcMarkSweepGC&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-XX:PermSize=128M&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-XX:MaxPermSize=128M&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-XX:MaxNewSize=128M&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-XX:NewSize=128M&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-Xms512m&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;-Xmx512m&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; width: 162px;&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;font color=&quot;#FF0000&quot; face=&quot;verdana&quot; size=&quot;4&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 14pt;&quot;&gt;★&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 14pt;&quot;&gt;설명&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-Dosgi.requiredJavaVersion=1.6&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;→&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;JDK 1.6 이상을 설치했을 경우에 1.6으로 설정하면 속도가 빨라짐&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;line-height: 14.4px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-Xverify:none&lt;/b&gt;&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; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;span style=&quot;line-height: 14.4px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;클래스의 유효성을 검사&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;생략. 시작 시간이 단축되어 빨라진다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:+UseParallelGC&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;병렬 가비지 컬렉션(병렬처리로 속도 향상) 사용.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:+AggressiveOpts&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;컴파일러의 소수점 최적화 기능을 작동(왜 빨리지는지는 설명이 안된다.)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:-UseConcMarkSweepGC&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;병행 mark-sweep GC 수행하여&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;이클립스 GUI의 응답을 빠르게한다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:+CMSIncrementalMode=true&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;font face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;점진적인 GC&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;font face=&quot;verdana&quot; size=&quot;4&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 돋움, Dotum, AppleGothic, sans-serif; line-height: 18px; font-size: 12px;&quot;&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:PermSize=128M&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;font face=&quot;verdana&quot; style=&quot;line-height: 10.2857px;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;Permanent Generation(영구 영역)&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;크기&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;(Out Of Memory 에러시 크기 조절)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:MaxPermSize=128M&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;font face=&quot;verdana&quot; style=&quot;line-height: 10.2857px;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;최대 Permanent&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;Generation&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;크기&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:NewSize=128M&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;font face=&quot;verdana&quot; style=&quot;line-height: 10.2857px;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;ew Generation(새 영역) 크기&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-XX:MaxNewSize=128M&lt;/b&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; line-height: 14.4px;&quot;&gt;→&lt;/span&gt;&lt;font face=&quot;verdana&quot; style=&quot;line-height: 10.2857px;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 22px; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;line-height: 22px; font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;ew Generation(새 영역) 의 최대 크기&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;b style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt; line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;b style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt; line-height: 22px;&quot;&gt;-Xms512m&lt;/b&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt; line-height: 22px;&quot;&gt; : 이클립스가 사용하는 최소 Heap 메모리&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;font face=&quot;verdana&quot; size=&quot;4&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 돋움, Dotum, AppleGothic, sans-serif; line-height: 18px; font-size: 12px;&quot;&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;-Xmx512m&lt;/b&gt; : 이클립스가 사용하는 최대 Heap 메모리&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 최소와 최대를 같은 값으로 설정하면 오르락 내리락 하지않아 빨라진다.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;메모리 설정의 경우, 본인의 PC 환경에 맞게끔 다시 설정해주면 좋다. 하지만 무작정 메모리 크기를 크게 잡는다고 속도에는 크게 영향을 주는 부분이 없기 때문에 적당량을 배정해주는 것이 좋을 것이다. 또한, 설정 후 이클립스가 죽는(?) 일이 생길수도 있으니 기존 eclipse.ini를 백업한 후 작업하는 것이 베스트!!&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;font face=&quot;verdana&quot; size=&quot;4&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;&lt;font face=&quot;돋움, Dotum, AppleGothic, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 14.3999996185303px; color: rgb(102, 102, 102); text-align: justify;&quot;&gt;&lt;font face=&quot;verdana&quot; size=&quot;4&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;&lt;font face=&quot;돋움, Dotum, AppleGothic, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: 15px;&quot;&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border: 1px solid rgb(254, 254, 184); padding: 10px; background-color: rgb(254, 254, 184);&quot;&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 85, 255);&quot;&gt;[ 참고 ] JVM&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;JVM 은 3가지 메모리 영역을 관리함. GC와도 관련이 있는 부분임.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;1. Permanent(영구) &amp;nbsp;: JVM 클래스와 메소드를 위한 공간. = PermSize&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: Gulim, 굴림, AppleGothic, sans-serif;&quot;&gt;&amp;nbsp;2. New/Young &amp;nbsp;: 새로 생성된 개체들을 위한 공간. = NewSize&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;&amp;nbsp;3. Old &amp;nbsp;: 만들어진지 오래된 객체들의 공간.(New 영역에서 이동)&lt;/span&gt;&lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;position: absolute; opacity: 0; line-height: 1.5;&quot;&gt;&lt;p style=&quot;margin: 11px 0px 7px; padding: 0px; line-height: 1.5; font-size: 12px; font-family: Dotum;&quot;&gt;&lt;strong style=&quot;padding: 0px 7px 0px 0px;&quot;&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;[출처]&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://blog.naver.com/sungback/90097516641&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;이클립스 속도 향상 (eclipse.ini 수정)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;padding: 0px 7px 0px 5px; font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;|&lt;/span&gt;&lt;strong style=&quot;padding: 0px 7px 0px 0px;&quot;&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;작성자&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://blog.naver.com/sungback&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Gulim, 굴림, AppleGothic, sans-serif; font-size: 9pt;&quot;&gt;메멘토&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programing/Java</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/69</guid>
      <comments>https://stylishc.tistory.com/69#entry69comment</comments>
      <pubDate>Wed, 14 Jan 2015 17:29:51 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 결합 컬럼 인덱스 / 조인(Join)문의 종류와 성능</title>
      <link>https://stylishc.tistory.com/43</link>
      <description>&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;1. 결합 컬럼 인덱스를 생성할 때 선행 컬럼을 결정하는 기준에 대해 자세히 설명하시오.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;ex.1) CREATE INDEX I_EMP_DATE_DEPTNO ON BIG_EMP(HIREDATE, DEPTNO)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;ex.2) CREATE INDEX I_EMP_DATE_DEPTNO ON BIG_EMP(DEPTNO, HIREDATE)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; SELECT DEPTNO, COUNT(*), SUM(SAL)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; FROM BIG_EMP&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; WHERE HIREDATE BETWEEN TO_DATE('1983-01-01','YYYY-MM-DD')&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; AND TO_DATE('1984-12-31','YYYY-MM-DD')&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; AND (DEPTNO = 70 OR DEPTNO = 80 OR DEPTNO = 90)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; GROUP BY DEPTNO&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; ORDEY BY SUM(SAL) DESC&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;위 두 가지 인덱스를 적용한 후 실행한 SELECT문의 처리과정과 실제로 READ해야 하는 BLOCK의 개수는 크게 차이가 난다. 원인으로는 불필요한 검색범위가 줄고 이에 따라 실행계획이 변경이 되기 때문이다. 이처럼 결합 컬럼 인덱스를 생성할 때 정하는 DRIVING COLUMN이 어떤 컬럼이 되느냐에 따라 실행하는 SQL문의 성능에 크게 영향을 미칠 수 있는 요소이다. 경우에 따라서는 생성한 인덱스를 두고 FTS 스캔을 하는 경우도 발생할 수 있는 등 성능과 관련되어서는 반드시 고려해야 할 요소임에 틀림없다.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - WHERE절에서 자주 검색되는 선행 컬럼이 되어야 함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - 분포도가 좋은 컬럼이 선행 컬럼이 되어야 함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   : 분포도 = 조건을 만족하는 행수/전체행수 * 100&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;     보통 10% 내외가 가장 이상적&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - 데이터양이 적은 컬럼을 선행으로 사용.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - BETWEEN, &amp;gt; AND &amp;lt;, LIKE 연산자로 검색하지 않는 컬럼을 선행 컬럼으로 사용.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;2. 조인문의 종류에 대해 설명하고 조인문의 성능에 영향을 주는 요소와 작성 방법에 대해 설명하시오.&lt;/span&gt;&lt;/p&gt;&lt;table style=&quot;border-collapse:collapse;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:266.72pt;height:26.97pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#ff9999;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;SORT-MERGE JOIN&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:266.72pt;height:26.97pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#e9ef00;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;NESTED-LOOPS JOIN&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:266.72pt;height:26.97pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#b3c5f3;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;CLUSTER JOIN&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:266.72pt;height:26.97pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#d5aad5;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;HASH JOIN&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;1. SORT-MERGE JOIN&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; 두 개 이상의 테이블이 공통 컬럼을 기준으로 결합 될 때(EQUI-JOIN), 각각의 컬럼에 인덱스가 전혀 없는 상태에서 조인이 되는 방법. FTS(FULL TABLE SCAN)에 의한 검색이기 때문에 성능이 매우 떨어짐.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;2. NESTED-LOOPS JOIN&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; 두 개 이상의 테이블이 공통 컬럼을 기준으로 결합 될 때(EQUI-JOIN), 둘 다 혹은 둘 중 하나의 컬럼에 인덱스가 존재하는 검색방법. 가장 보편적으로 사용됨. 데이터 스캔 범위를 줄일 수 있어 SORT-MERGE JOIN보다 빠른 성능을 기대할 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;3. HASH JOIN&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; 두 개 이상의 테이블이 논리적으로 결합될 때(EQUI-JOIN) 공통 컬럼을 기준으로 메모리 상에서 여러개의 파티션 영역을 나누어 결합하는 조인 기법. 일반적으로 HINT(USE_HASH)를 사용하여 처리하고, 주로 처리량이 많은 전체범위를 처리하는 경우에 사용하면 효율적이다. 이에 따라 효과적인 검색 및 결합이 되기 위해서는 인덱스 구성이 중요함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;4. CLUSTER JOIN&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; 2개 이상의 테이블이 자주 조인되어 실행될 때, 일반적인 조인문의 실행과정처럼 블록으로부터 각각 읽혀져서 결합되는 것이 아닌, 처음부터 블록구조 내에 조인되어 결합된 형태로 저장되는 기법.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-size:12.0pt;color:#0000ff;&quot;&gt;조인문 성능에 영향을 주는 요소&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt; - DRIVING TABLE(선행 테이블)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   조인에 참여하는 각 테이블은 데이터의 양과 분포도가 다르기 때문에 일반적으로 &lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   데이터 범위가 좁은 테이블을 선행 테이블로 결정하는 것이 성능상 유리함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   1. 조인에 참여하는 컬럼에 모두 인덱스가 있거나 / 모두 없는 경우(동등조건)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;      : 가장 오른쪽에 배치된 테이블이 선행 테이블로 결정됨.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   2. 개발자에 의해 조인 순서를 결정하는 경우&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;      : 옵티마이저가 최적의 실행계획을 결정하지 못하는 경우에 사용함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt; - 테이블의 조인 순서&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   1. 조인에 참여하는 테이블들의 인덱스의 종류에 따라서 실행 순서가 바뀔 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   2. 구동테이블이 결정되고 나면, 나머지 테이블들 중 순서가 결정이 되는데 우선순위&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;      가 적용이 된다.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;      : 모두 인덱스가 존재하는 경우(싱글&amp;lt;결합, NON-UNIQUE&amp;lt;UNIQUE)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt; - 검색되는 테이블의 데이터량에 따라 성능이 좌우&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   : 넓은 범위가 아닌 좁은 범위 / FTS보다 INDEX SCAN&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt; - 조인 시, INDEX의 사용여부&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   : 동일한 조인문장이더라도, 인덱스가 존재하지 않는 SORT-MERGE JOIN과 &lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;    NESTED LOOPS JOIN의 결과는 다른 성능을 나타나게 됨. 일반적으로 INDEX &lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;    사용한 NESTED-LOOPS 조인이 성능이 우수하지만, 경우에 따라 SORT-MERGE JOIN&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;이 유리한 경우도 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Programing/Database &amp;amp; SQL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/43</guid>
      <comments>https://stylishc.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 23 Jul 2014 17:34:44 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] Rule-Based-Optimizer vs Cost-Based-Optimizer</title>
      <link>https://stylishc.tistory.com/39</link>
      <description>&lt;p class=&quot;바탕글&quot; style=&quot;line-height: 1.8;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;1. RBO의 실행계획 결정원리와 예외 조건들에 대해 설명하시오.&lt;/span&gt;&lt;/p&gt;&lt;table style=&quot;border-collapse:collapse;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:209.77pt;height:52.44pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#ffe1e1;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;RBO 내장규칙&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:209.77pt;height:52.44pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#fddfc7;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;FROM절에서의 테이블 위치&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:209.77pt;height:52.44pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#fafabf;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;WHERE절에서의 순서변경&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:209.77pt;height:52.44pt;padding:-0.01pt -0.01pt -0.01pt -0.01pt;border-top:solid #000000 0.28pt;border-left:solid #000000 0.28pt;border-bottom:solid #000000 0.28pt;border-right:solid #000000 0.28pt;background:#e0e5fa;&quot; valign=&quot;center&quot;&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;INDEX 생성 및 삭제&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;우선 순위가 빠른 인덱스&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;를 선정함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - 우선 순위가 &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;같고&lt;/span&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;color:#0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;동등(Equal) 조건&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;에 의한 검색은 &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#ff0000;&quot;&gt;인덱스가 모두 사용&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;됨.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - 우선 순위가 &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#0000ff;&quot;&gt;같지만 동등조건이 아닌 경우&lt;/span&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#ff0000;&quot;&gt;나중에 생성된 인덱스를 사용&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - 같은 칼럼에 대한 검색 조건 중, &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#ff0000;&quot;&gt;조건이 함수 등에 의해 변형되면 둘 중 &lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#ff0000;&quot;&gt;   나쁜 실행계획이 선택되어 실행됨&lt;/span&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;color:#ff0000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - AND. OR 조건에서 우선 순위를 결정&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   (AND는 조건절에서 &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;정방향&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;으로 조건을 읽음 / OR는 조건절에서 &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;역방향&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;으로)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;2. CBO의 문제점에 대해 설명하고 그 대처 방안에 대해 설명하시오.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;통계가 있는지 없는지에 대한 유무가 중요함&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   1. (SELECT TABLE_NAME, LAST_ANALYZED FROM USER_TABLES) 등의 쿼리를 통하여&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   날짜 정보가 있으면 통계정보가 존재, 없으면 통계정보가 없음.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   2. DBMS_STATS를 활용하여 통계정보에 대한 BACKUP / RECOVERY 가능&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;     (DBMS_STATS + DBMS_JOB을 동시에 사용)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   3. &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;color:#ff0000;&quot;&gt;최신의 통계정보를 기반&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;으로 하는 것이 원칙이나, &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;반드시 최신의 통계정보가&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;     우수한 성능을 보장하는 것이 아님(데이터 분포도 관련 문제)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;   =&amp;gt; 부정확한 통계정보를 기반으로 한 CBO는 성능상 효율이 떨어짐&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;      이러한 현상은 골고루 분산되어 있는 데이터라는 전제 때문에 발생함.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;    1. &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;히스토그램(HISTOGRAM)&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;을 통하여 DISTINCT-KEY의 수를 지정하는 등의 방법을 사용&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;    2. &lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;&quot;&gt;힌트(Hint)설정&lt;/span&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;&quot;&gt;을 통하여 사용자가 파악한 최적의 실행계획을 수행하도록 SQL문 작성&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:맑은 고딕;font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;STOURED OUTLINE을 활용하여 RBO/CBO 모두 튜닝 시 &lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;font-family:맑은 고딕;mso-ascii-font-family:맑은 고딕;mso-hansi-font-family:맑은 고딕;font-weight:bold;font-size:12.0pt;&quot;&gt;실행계획을 재사용하는 방법도 있음.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Programing/Database &amp;amp; SQL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/39</guid>
      <comments>https://stylishc.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 21 Jul 2014 17:23:25 +0900</pubDate>
    </item>
    <item>
      <title>[Android] Switch문 case expressions must be constant expressions</title>
      <link>https://stylishc.tistory.com/36</link>
      <description>&lt;p&gt;R.java에 선언되어 있는 아이디 값을 switch문에서 읽지를 못해서 생기는 오류인데&lt;/p&gt;&lt;p&gt;R.java를 임의로 수정하려 하였으나 수정을 이클립스에게 거부당했다( ^^;;;;;;;)&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;switch ~ case문 대신 If-else를....사용하라는....문서를 발견했고&lt;/p&gt;&lt;p&gt;또한 이클립스에서 Ctrl+1을 누르면 쉽게 수정이 된다는 사실을 발견!&lt;/p&gt;&lt;p&gt;(switch문에 커서 올려놓으시고 Ctrl+1만 누르면 쉽게 해결)&lt;/p&gt;</description>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/36</guid>
      <comments>https://stylishc.tistory.com/36#entry36comment</comments>
      <pubDate>Sun, 8 Jun 2014 23:22:08 +0900</pubDate>
    </item>
    <item>
      <title>SQL전문가 가이드 - join 부분</title>
      <link>https://stylishc.tistory.com/35</link>
      <description>&lt;p&gt;--조인&lt;/p&gt;&lt;p&gt;/*&lt;/p&gt;&lt;p&gt;SQL에서 데이터를 처리할 때는 단 두개의 집합 간에만 조인 처리되고,&lt;/p&gt;&lt;p&gt;2개의 테이블이 조인되어서 처리된 새로운 테이블이 나열되었더라도 특정 2개의 테이블만&lt;/p&gt;&lt;p&gt;먼저 조인 처리되고, 2개의 테이블이 조인되어서 처리된 새로운 데이터 집합과 남은 한 개의 테이블이 다음 차례로 조인되는 것&lt;/p&gt;&lt;p&gt;(((A join B)join C)join D)&lt;/p&gt;&lt;p&gt;*/&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;--(1) 등가(equi) 조인&lt;/p&gt;&lt;p&gt;select player.player_name 선수명, team.team_name 소속팀명&lt;/p&gt;&lt;p&gt;from player, team&lt;/p&gt;&lt;p&gt;where player.team_id = team.team_id;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;select player.player_name 선수명, team.team_name 소속팀명&lt;/p&gt;&lt;p&gt;from player inner join team&lt;/p&gt;&lt;p&gt;on player.team_id = team.team_id; --inner join&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;select player.player_name, player.back_no, player.team_id,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;team.team_name, team.region_name&lt;/p&gt;&lt;p&gt;from player, team&lt;/p&gt;&lt;p&gt;where player.team_id = team.team_id;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;select player.player_name, player.back_no, player.team_id,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;team.team_name, team.region_name&lt;/p&gt;&lt;p&gt;from player inner join team&lt;/p&gt;&lt;p&gt;on player.team_id = team.team_id;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;--테이블명에도 alias를 사용하여 가독성 및 코드의 길이를 줄일 수 있음.&lt;/p&gt;&lt;p&gt;select p.player_name, p.back_no, p.team_id,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t.team_name, t.region_name&lt;/p&gt;&lt;p&gt;from player p, team t&lt;/p&gt;&lt;p&gt;where p.team_id = t.team_id;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;select p.player_name 선수명, p.back_no 백넘버, t.region_name 연고지,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t.team_name 팀명, p.position&lt;/p&gt;&lt;p&gt;from player p, team t&lt;/p&gt;&lt;p&gt;where p.team_id=t.team_id&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; and p.position = 'GK'&lt;/p&gt;&lt;p&gt;order by p.back_no; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;select team.region_name, team.team_name, team.stadium_id,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stadium.stadium_name, stadium.seat_count&lt;/p&gt;&lt;p&gt;from team, stadium&lt;/p&gt;&lt;p&gt;where team.stadium_id = stadium.stadium_id;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;--(2) 비등가(Non-equi) 조인 //자료가 읍슴 ㅠㅠ&lt;/p&gt;&lt;p&gt;select e.name, e.job, e.sal, s.grade&lt;/p&gt;&lt;p&gt;from emp e, salgrade s&lt;/p&gt;&lt;p&gt;where e.sal between s.losal and s.hisal;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;--(3) 3개 이상 TABLE JOIN&lt;/p&gt;&lt;p&gt;select p.player_name 선수명, p.position 포지션,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t.region_name 연고지, t.team_name 팀명,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s.stadium_name 구장명&lt;/p&gt;&lt;p&gt;from player p, team t, stadium s&lt;/p&gt;&lt;p&gt;where p.team_id = t.team_id&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; and t.stadium_id = s.stadium_id&lt;/p&gt;&lt;p&gt;order by 선수명; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;</description>
      <category>Programing/Database &amp;amp; SQL</category>
      <author>oh-yes</author>
      <guid isPermaLink="true">https://stylishc.tistory.com/35</guid>
      <comments>https://stylishc.tistory.com/35#entry35comment</comments>
      <pubDate>Fri, 6 Jun 2014 16:45:32 +0900</pubDate>
    </item>
  </channel>
</rss>